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里看见回调结果,只不过一个是微信支付宝的直接回调,一个是服务器给的结果。增强用户的体验性。
以上是个人的想法和实现,有更好的想法或者方法,欢迎指正和讨论🙃。
网友评论
这是微信支付官方说明,并且由于用户可能使用系统左上角或者home键返回到APP,此时根本没有微信回调,所以应该直接以APP向自己服务器的查询结果为准,无需处理微信回调。