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包;关键文件夹路径:
微信 info.plist 中的 URL types~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps/
注意:需要将拷贝出的.ipa
包,后缀名改成.zip
,然后解压;否则可能会提示包损坏;取出info.plist
文件,查看URL types
中的内容即可,若该键值
不存在,则该应用不支持被第三方应用打开;
淘宝 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];
}
淘宝 info.plist 中的 LSApplicationQueriesSchemes (部分)
2.自己被第三方应用打开
a.简单应用
自己应用中 info.plist 文件的键值配置
简单配置info.plist
文件中的URL types
键值即可,可以像上文中的微信那样配置,也可以像淘宝那样配置,item x
中可以只包含URL Schemes
键值,在这个数组中配置一个或多个字符串,提供给第三方应用;代码示例:
/// 第三方应用调用代码
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
网友评论