在网了搜了一些解决方案,感觉并不是那么严谨,于是自己动手搞了一下,直接说思路
iOS调起第三方支付和安卓还不一样,安卓是把第三方的支付SDK直接镶嵌在自己的App中,而iOS由于沙盒机制,各个应用之间相互独立,应用之间的调用只有通过系统留下的唯一入口scheme, 所以iOS调起第三方支付是在两个App之间相互切换的。以下从两个角度解析iOS吊起第三方支付
1、支付之前点击取消或者左上返回
(1)点击支付是App显示进入非活跃状态,再进入后台
-[AppDelegate applicationWillResignActive:]
-[AppDelegate applicationDidEnterBackground:]
(2)点击取消时会
-[AppDelegate applicationWillEnterForeground:]
然后回调支付成功失败方法
-[AppDelegate applicationDidBecomeActive:]
(3)由(2可以看出)我们需要做的操作
重点思路
1)定义一个单例类,并定义支付类型属性
typedef enum{
Pay_Type_none = 0,
Pay_Type_wxpay = 1,
Pay_Type_alipay = 2
} Pay_Type;
在点击支付是把Type设置为对应的类型
2)在支付成功失败的回调里把type设置为Pay_Type_none(没有任何类型),这样在其他操作的时候调用-[AppDelegate applicationDidBecomeActive:]不会有任何影响
3)在-[AppDelegate applicationDidBecomeActive:]方法里判断type类型发送相对应的通知
4)在支付控制器接收通知,并结合后台的查询接口查询订单是否支付结果,如果订单支付成功type设置为Pay_Type_none并做成功的操作,如果失败ype设置为Pay_Type_none,做失败的操作
2、支付完成后点击左上返回
一般第三方API是尽量避免这种操作的,但是不排除特殊情况,这种方案按照第一种方案解决就没问题了,但是支付成功后,你把App进程杀死,单例对象随着进程也被释放,那肯定是监听不到了。只有等下次打开App去监听订单结果了