iOS-9.0后跳支付左上角返回键解决办法

iOS系统9.0以后,左上角多了一个返回键。在app里调起支付,跳转到支付宝或者微信的时候,左上角有一个返回键,点击这个返回键,支付宝和微信是不给app回调的,因此用户返回app的时候,app无法判断支付结果,针对这个,我做了一个补全。


支付宝返回键,支付宝的阴影给的真暗啊
微信返回键

图上红色标记的地方就是那个返回键,现在介绍详细解决办法:

在点击返回键的时候,支付宝、微信就会退回发起支付的app,返回app必定会走这个方法:

       我在这个方法里发通知告诉调起支付的vc,请求服务器,看服务器那边的支付结果,如果没有支付结果,就给支付结果等待页面,一般来说支付宝和微信回调结果会很快的。

      但是仅仅这样做事不够的,因为app压后台,再次打开的情况很多,比如分享返回也走这个接口,我怎么会知道是不是支付调起的返回呢,那么我就在发起支付的时候,做了一个标记,这里我用了系统单例NSUserDefaults,这样我在返回app的时候,就知道是不是支付返回的了。

支付返回的标记

     做完这些感觉是完成了,其实还有个重点问题,就是点击支付宝或微信给的取消或者完成按钮的时候,app返回不仅会走WillEnterForeground方法,而且会走下图的方法,要命的是,下图的方法是后进入的,这样app就会返回两次支付结果。

真正的支付回调进的方法

    为了解决以上问题,我就用了GCD,在进入WillEnterForeground方法里的时候,让里面的方法等0.5秒执行,如果是有回调的返回,就利用bool值,变为ture,这是下面判断这个bool是ture,WillEnterForeground方法里的判断就不进,如果是没有回调的返回,这个bool值是不会改变的,0.5秒后继续执行WillEnterForeground方法里的判断。

改变bool值,打码是支付回调
这里有初始bool值,等0.5秒看看bool值是否改变,根据bool值判断是否执行下面方法

   至此,整个补全算是完成了,不管用户点击哪个返回,都能在app里看见回调结果,只不过一个是微信支付宝的直接回调,一个是服务器给的结果。增强用户的体验性。

以上是个人的想法和实现,有更好的想法或者方法,欢迎指正和讨论🙃。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 142,787评论 18 610
  • 接到新需求接入支付宝SDK后先到官方网站上面读接入文档支付宝官方文档。若手机安装支付宝则调起支付宝,没有安装就跳到...
    一亩三分甜阅读 3,503评论 0 4
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 4,168评论 3 20
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    sillen阅读 390评论 0 1
  • 匆匆忙忙的赶到车站,车刚好走了,只好等下趟班车了。望着等候的班车,突然觉得每辆班车好比我们每个人,在某个特别的时刻...
    崖边草阅读 25评论 0 0