美文网首页 ios零碎记录iOSiOS Developer
iOS-9.0后跳支付左上角返回键解决办法

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

作者: paradisery | 来源:发表于2016-11-29 16:47 被阅读3486次

    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里看见回调结果,只不过一个是微信支付宝的直接回调,一个是服务器给的结果。增强用户的体验性。

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

    相关文章

      网友评论

      • 1剑天下:支付成功之后不会自动返回原来app是什么原因
      • 雪_晟:大神,看到你的文章,感觉很棒,有一个问题,怎么样在进入前台时 ,判断支付成功与否的标志呢
        paradisery:在仔细看看我写的支付调起后返回应用部分,写的很清除啊。
      • 风中承诺:想请教一下 是在哪里清空NSUserDefaults呐?是- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options 在这个方法里面吗?
      • AppleIdGX:“支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意 一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准”
        这是微信支付官方说明,并且由于用户可能使用系统左上角或者home键返回到APP,此时根本没有微信回调,所以应该直接以APP向自己服务器的查询结果为准,无需处理微信回调。
        AppleIdGX:微信回调还是要处理下,就是取消支付的提示
      • ce7871d40869:请问你说的服务器是指你App的后台服务器还是支付宝微信的服务器
        paradisery:@CoderAlanz 自己的服务器
      • 汉东大学政法系:其实很多现有App都有这个问题, 感谢LZ给出解决方案。 我也是用和LZ一样的方案解决,不过避免异常错误,我会弹出Alert让用户确认是否已经支付(模仿滴滴出行)
      • 8d66d922cb2e:你好,我想问一下,既然点左上角没有回调,那我自己的服务器的支付结果怎么改变呢?这个问题卡很久了,麻烦帮解答一下~谢谢🙏
        paradisery:回调结果是两套,服务器是会收到回调结果的。
      • CoffeeKid:现在微信还没处理这个问题吗?支付宝支付成功就自动返回了,微信还要显示一下账单详情,好气人:sob:
        paradisery:@馒头小子 :+1: 可以就需要更多思路,谢谢补充
        CoffeeKid:@paradisery 昨天研究了一天,最后在vc里面监听notification center,同样是willEnterForground消息,然后查询已经支付的账单,查查有没有和当前账单相同的,有就执行后续操作。其实思路和楼主大同小异了,只是作为一个强迫症不想污染appdelegate
        paradisery:这个交个最近没有试,我也不知道微信是否做补全了,哈哈,不过按照我的方法应该可以做好。:grin:
      • NateLam:我能说全网就你一个靠谱的么:+1:
        paradisery:谢谢,哈哈:smiley:
      • cec39cbcdee8:在每次处理完以后要去把NSUserDefaults清空
        paradisery:@梦里梦见故人归 哈哈:smile:
        cec39cbcdee8:@paradisery 嗯。折腾了一上午。谢谢。
        paradisery:@梦里梦见故人归 是的,在每次支付处理结束,要把NSUserDefaults对应的键值清除。

      本文标题:iOS-9.0后跳支付左上角返回键解决办法

      本文链接:https://www.haomeiwen.com/subject/jymapttx.html