iOS系統(tǒng)9.0以后溯职,左上角多了一個(gè)返回鍵录别。在app里調(diào)起支付放坏,跳轉(zhuǎn)到支付寶或者微信的時(shí)候访圃,左上角有一個(gè)返回鍵蝌数,點(diǎn)擊這個(gè)返回鍵想暗,支付寶和微信是不給app回調(diào)的嚷量,因此用戶返回app的時(shí)候镇饮,app無法判斷支付結(jié)果取逾,針對(duì)這個(gè)耗绿,我做了一個(gè)補(bǔ)全。
圖上紅色標(biāo)記的地方就是那個(gè)返回鍵误阻,現(xiàn)在介紹詳細(xì)解決辦法:
在點(diǎn)擊返回鍵的時(shí)候,支付寶、微信就會(huì)退回發(fā)起支付的app究反,返回app必定會(huì)走這個(gè)方法:
? ? ? ?我在這個(gè)方法里發(fā)通知告訴調(diào)起支付的vc寻定,請(qǐng)求服務(wù)器,看服務(wù)器那邊的支付結(jié)果精耐,如果沒有支付結(jié)果狼速,就給支付結(jié)果等待頁面,一般來說支付寶和微信回調(diào)結(jié)果會(huì)很快的卦停。
? ? ? 但是僅僅這樣做事不夠的向胡,因?yàn)閍pp壓后臺(tái),再次打開的情況很多惊完,比如分享返回也走這個(gè)接口僵芹,我怎么會(huì)知道是不是支付調(diào)起的返回呢,那么我就在發(fā)起支付的時(shí)候小槐,做了一個(gè)標(biāo)記拇派,這里我用了系統(tǒng)單例NSUserDefaults,這樣我在返回app的時(shí)候凿跳,就知道是不是支付返回的了件豌。
? ? ?做完這些感覺是完成了,其實(shí)還有個(gè)重點(diǎn)問題拄显,就是點(diǎn)擊支付寶或微信給的取消或者完成按鈕的時(shí)候苟径,app返回不僅會(huì)走WillEnterForeground方法,而且會(huì)走下圖的方法躬审,要命的是棘街,下圖的方法是后進(jìn)入的,這樣app就會(huì)返回兩次支付結(jié)果承边。
? ? 為了解決以上問題遭殉,我就用了GCD,在進(jìn)入WillEnterForeground方法里的時(shí)候博助,讓里面的方法等0.5秒執(zhí)行险污,如果是有回調(diào)的返回,就利用bool值富岳,變?yōu)閠ure蛔糯,這是下面判斷這個(gè)bool是ture,WillEnterForeground方法里的判斷就不進(jìn)窖式,如果是沒有回調(diào)的返回蚁飒,這個(gè)bool值是不會(huì)改變的,0.5秒后繼續(xù)執(zhí)行WillEnterForeground方法里的判斷萝喘。
? ?至此爬早,整個(gè)補(bǔ)全算是完成了哼丈,不管用戶點(diǎn)擊哪個(gè)返回,都能在app里看見回調(diào)結(jié)果筛严,只不過一個(gè)是微信支付寶的直接回調(diào)醉旦,一個(gè)是服務(wù)器給的結(jié)果。增強(qiáng)用戶的體驗(yàn)性脑漫。
以上是個(gè)人的想法和實(shí)現(xiàn)髓抑,有更好的想法或者方法,歡迎指正和討論??优幸。