在iOS开发中应用内跳转是很常用的,比如第三方登录跳转到授权的App(QQ,微信等),还有第三方支付(微信,支付宝等)
开发这些都需要应用内跳转的知识。
先大概说下流程:
appA想跳到appB,先将appB绑定一个URL Schemes(如:appB),在appA中实现:
// 1.获取应用程序App-B的URL Scheme
NSURL *appBUrl = [NSURL URLWithString:@"appB://"];
// 2.判断手机中是否安装了对应程序
if ([[UIApplication sharedApplication] canOpenURL:appBUrl]) {
// 3. 打开应用程序App-B
[[UIApplication sharedApplication] openURL:appBUrl];
} else {
NSLog(@"没有安装");
}
在iOS 9.0之前无论是模拟器还是真机都可以实现跳转了,但是在iOS 9.0之后就会报错-canOpenURL: failed for URL: "应用B的URL Schemes://" - error: "This app is not allowed to query for scheme 应用B"需要在appA中加入白名单, 具体做法就是在appA的Info文件中,添加LSApplicationQueriesSchemes数组,然后添加键值为AppB url Schemes
这样就能成功跳转,也可以跳转到应用的指定页面,不再多写了。
最近想到个问题:在iOS 9.0以后的应用内跳转都需要白名单了,那么在支付或三方登录完调回本app应该也要添加白名单的,介入微信或支付宝的app有
百万个,都加到白名单是不现实的,这个应该是动态加入的,都是系统的plist文件是不能动态代码去改的吧,那他们是怎么跳回我们的app的?也可能是
他们根本没有添加一个白名单直接openURL,没有进行canOpenURL的判断。