最早的时候,博主在做支付的时候牵涉到没支付成功,点击了系统左上角的自带返回按钮后支付失败的,无法拿到这个回调(不知道现在是否可以)。近日有小伙伴偶尔问题来这个问题,所以觉得有必要在这里公开一下这个方法,搜了下,网上关于这个方法内容很少,所以博主就发扬下极客精神:
PS:关于支付是否成功,当你的支付没有第三方的回调时,点击左上角返回按钮后,可以通过后台接口来查询是否支付成功。
1.使用一个方法
- (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. //这里做了一个延时,很有必要,否则_isLeftBack值不会改变 _isLeftBack = NO; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if (!_isLeftBack) { [[NSNotificationCenter defaultCenter]postNotificationName:@"leftBackPay" object:nil]; } }); }
_isLeftBack在Appdelegate中,需要在几个方法中给赋值YES:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { _isLeftBack = YES; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { _isLeftBack = YES; }
现在有很多拿回调URL的方法,都需要加上上面的赋值,自定义的就不需要了(比如说极光推送代理里面的)。
这样就可以了。这里强调下:
[[NSNotificationCenter defaultCenter]postNotificationName:@”leftBackPay” object:nil];
这个通知不用博主再讲解了吧,在需要的地方add一个你需要的通知即可在回到原界面的时候触发操作。
这里再说一个离开app后一切回来就会触发的操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endBackground) name:UIApplicationWillEnterForegroundNotification object:nil];
可以用来做强制更新,也可根据自己需要来做操作。