假设:App1要跳转到App2
App1:跳转方 App2:被跳转方
一个App2可以被其他App1调起的条件就是:
> 设备上安装了该App2
> 该App2注册了自己的URL Scheme协议(唯一标识)
App2以Property List方式打开info.plist,截图如下:
App2以Source Code方式打开info.plist,添加URL Schemes:App2UniqueScheme
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string></string>
<key>CFBundleURLSchemes</key>
<array>
<string>App2UniqueScheme</string>
</array>
</dict>
</array>
一个App1能够跳转到其他App2的条件就是:
> 设备上安装了该App1
> 该App1添加了被跳转方App2的Scheme白名单
> 该App1中添加了调起代码
- (void)jumpToAnotherApp {
NSURL *url = [NSURL URLWithString:@"App2UniqueScheme
://"];
BOOL isCanOpen = [[UIApplication sharedApplication] canOpenURL:url];
if (isCanOpen) {
#ifdef NSFoundationVersionNumber_iOS_10_0
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
}];
#else
[[UIApplication sharedApplication] openURL:url];
#endif
NSLog(@"App1打开App2");
}else{
NSLog(@"设备没有安装App2");
}
}
App1以Property List方式打开info.plist,截图如下:
App1以Source Code方式打开info.plist,添加白名单:App2UniqueScheme
<key>LSApplicationQueriesSchemes</key>
<array>
<string>App2UniqueScheme</string>
</array>
典型的例子就是App中接入微信分享SDK,实现分享功能:
想要调起微信进行朋友圈、好友分享,需要配置weixin、wechat白名单,这是微信自己定义的URL Schemes协议,方便其他App调起。
在App中需要添加从微信开放平台申请的AppId,这个AppId就作为该App在微信平台的唯一标识符,填写到URL Schemes下。这是为了使微信分享完毕后,从微信跳转回自己的App。
简单来说,配置URL Schemes协议是为了让其他App调起;配置白名单是为了跳转到其他App。微信分享就进行了从自己的App跳转到微信,再从微信跳转到自己的App这个过程。