app跳转到QQ,微信,支付宝等之后是怎么返回来的
相关app之间的跳转可以参考<a href="http://www.cocoachina.com/ios/20161026/17855.html">iOS开发--一步步教你彻底学会『iOS应用间相互跳转』</a>,写的挺详细的,这里就不用做赘述了。
场景:我们一般会有分享,支付的功能,当我们分享或者支付完毕之后,是怎么跳转回到我们的app的?
因为我们知道,在iOS9之后,相关的跳转需要添加白名单,不添加白名单是跳转不了的,我们跳转微信,支付宝的时候,都是提前添加了相关需要跳转app的url schemes到我们的白名单了。我们跳过去的时候虽然把我们自己的url scheme带过去了,但是微信支付宝也不可能动态的将我们自己的url scheme添加到他们的白名单中。
先来看一下跳转qq做的工作
1、添加白名单
将qq的scheme添加到白名单中.png
2、操作代码
// 将自己的url Schemes通过参数的形式传递过去,
NSString *urlStr = @"mqq://App-A";
NSURL *url = [NSURL URLWithString:urlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
// 3. 打开应用程序
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装");
}
如果没有添加qq的白名单,是跳转不过去的,会报错
-canOpenURL: failed for URL: "mqq://" - error: "This app is not allowed to query for scheme mqq"
通过实验,其实白名单是对canOpenURL:方法起了限制。
直接写,也是能够跳过去的。
NSString *urlStr =@"mqq://App-A";
NSURL *url = [NSURL URLWithString:urlStr];
[[UIApplication sharedApplication] openURL:url];
所以,我们跳转到qq,微信或者支付宝的时候,带上自己的url schemes,qq微信或者支付宝将我们带过去的参数url scheme保存了起来。等做完了相关的操作,触发返回操作的时候,qq,微信或者支付宝应该是直接调用了
NSString *urlStr = @"我们的url schemes://";
NSURL *url = [NSURL URLWithString:urlStr];
[[UIApplication sharedApplication] openURL:url];
说到这里就明白了。
还有一个问题,为啥你跳转到qq,微信,支付宝,他们就能直接调用** [[UIApplication sharedApplication] openURL:url];跳转app,而不是先通过canOpenURL:**方法判断一下?因为你跳都跳过去了,说明短时间你的应用是不会卸载的,直接跳转肯定能跳转回来。即使你在跳转的前一步操作卸载了,你也得通过将qq压入后台,回到桌面,找到自己的应用的时候卸载吧,当你再回到qq的时候你会发现,qq的界面已经不是准备跳回的界面了,不给你返回的机会,这就是设计上避免了这种非正常的操作了。
最后献上相关的<a href="https://github.com/RunOfTheSnail/App-A-Jump-App-B">Demo</a>
App-A跳转到App-B,跳转的时候,App-A将自己的url Schemes当做参数传递给App-B,App-B获取到App-A的url Schemes之后保存起来,可以直接返回App-A
注意:只有先通过App-A跳转到App-B之后<App-B获取到了App-A的url schemes>才能通过App-B跳转回App-A。