iOS 跳转第三方应用&自己被第三方应用打开

2018.9.26

iOS应用间通信:URL Schemes


参考链接:

入门 iOS 自动化:读懂 URL Schemes
URL Schemes 使用详解
iOS应用间通信:URL Schemes
如何在Mac上获取App Store的ipa包
About Apple URL Schemes
Support Universal Links
CFBundleURLTypes
LSApplicationQueriesSchemes


1.跳转第三方应用

a.获取第三方应用的URL Schemes信息
方法1:直接网上搜索相关应用的跳转方法,主流应用一般都会有朋友贴出文章的;
方法2:参考如何在Mac上获取App Store的ipa包;

关键文件夹路径:~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
注意:需要将拷贝出的.ipa包,后缀名改成.zip,然后解压;否则可能会提示包损坏;取出info.plist文件,查看URL types中的内容即可,若该键值不存在,则该应用不支持被第三方应用打开;

iOS 跳转第三方应用&自己被第三方应用打开_第1张图片
微信 info.plist 中的 URL types

iOS 跳转第三方应用&自己被第三方应用打开_第2张图片
淘宝 info.plist 中的 URL types

b.实际跳转,代码(以跳转 淘宝&天猫 商品详情页 示例)

NSString* productID = @"商城中某件具体商品的id";
NSString* taobaoUrlStr = [NSString stringWithFormat:@"taobao://item.taobao.com/item.htm?id=%@", productID];
NSURL* taobaoUrl = [NSURL URLWithString:[taobaoUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSString* tmallUrlStr = [NSString stringWithFormat:@"tmall://tmallclient/?{\"action\":\"item:id=%@\"}", productID];
NSURL* tmallUrl = [NSURL URLWithString:[tmallUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

NSURL *url = taobaoUrl;

/**
*实际上,canOpenURL只是用于判断设备上是否已安装某个应用,
并且需要在 info.plist 文件中搭配 LSApplicationQueriesSchemes 来使用;
如果该键值下没有将某个应用列为白名单,则canOpenURL方法会永远返回失败;

*更重要的是,LSApplicationQueriesSchemes 白名单是有数量限制的。。

*因此,对于微信来说,并未在 info.plist 文件中配置该键值,
故而,可以猜测微信在回调第三方应用的时候,并不会事先用 canOpenURL 方法进行判断;
*/
if (![[UIApplication sharedApplication] canOpenURL:url]) {
    return;
}

if (@available(iOS 10.0, *)) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
    [[UIApplication sharedApplication] openURL:url];
}
iOS 跳转第三方应用&自己被第三方应用打开_第3张图片
淘宝 info.plist 中的 LSApplicationQueriesSchemes (部分)


2.自己被第三方应用打开

a.简单应用
简单配置info.plist文件中的URL types键值即可,可以像上文中的微信那样配置,也可以像淘宝那样配置,item x中可以只包含URL Schemes键值,在这个数组中配置一个或多个字符串,提供给第三方应用;代码示例:

自己应用中 info.plist 文件的键值配置

/// 第三方应用调用代码

NSURL *url = [NSURL URLWithString:@"myapp:"];
if (@available(iOS 10.0, *)) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
    [[UIApplication sharedApplication] openURL:url];
}

b.复杂应用
请参考链接
URL Schemes 使用详解
iOS应用间通信:URL Schemes

你可能感兴趣的:(iOS 跳转第三方应用&自己被第三方应用打开)