在網了搜了一些解決方案,感覺並不是那么嚴謹,於是自己動手搞了一下,直接說思路
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去監聽訂單結果了