一、前言
iOS应用可以使用 URL Schemes(客户端协议) 进行应用间的跳转或实现网页打开应用的功能,这种跳转是协议跳转。
* 要应用间能跳转就要遵循URL Schemes协议。
* 要网页跳转应用网页就要遵循URL Schemes协议。
所以这就出现了微信或QQ等知名应用不能打开第三方应用的问题,不能打开是因为微信和QQ使用的是自己研发的QQ浏览器,他不遵循URL Schemes这个协议。
备注:
* 关于URL Schemes更多了解,可参考传送门
* yourdomain.com 就是你服务器的域名
二,需求场景
(1)第三方应用集成了友盟分享到QQ和微信的功能
(2)第三方应用分享了一个web页面到微信或QQ
(3)打开分享的web页面,点击上面的某一个按钮
(4)如果用户安装了该应用,直接打开应用根据web地址中的参数跳转到对应的页面
(5)如果用户没有安装应用,直接跳转到appStore
三,需求实现方案
iOS9 之后提供的 Universal Links 功能
备注:了解更多Universal Links可参考
四,需求实现步骤
(1)创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名
apple-app-site-association 文件必须放在https服务器的根目录下,例:https://kahui.huankaun.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用
* apple-app-site-association 文件格式:
{ "applinks": { "apps": [], "details": [ { "appID": "teamID.bundleId", "paths": ["/deaplink","/wwdc/news/","*"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] } }
1)appID :
appID 格式为 teamID.bundleId形式,譬如说我的teamID
是xxxxxxxxxxx
,bundleId
是com.mytest.app
那么我的appID
就是:xxxxxxxxxxx.com.mytest.app。
teamID:打开苹果官网,点击Account,点击左边栏的 Membership,查找teamID
2) paths:
实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app。格式如下:
"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]
-
使用
*
配置,则整个网站都可以使用 -
使用特定的URL,例如
/wwdc/news/
来指定某一个特殊的链接 -
在特定URL后面添加
*
,例如/videos/wwdc/2015/*
, 来指定网站的某一部分 -
除了使用
*
来匹配任意字符,你也可以使用?
来匹配单个字符,你可以在路径当中结合这两个字符使用,例如/foo/*/bar/201?/mypage
需要注意的是:
配置的paths路径,是区分大小写的
* 验证apple-app-site-association
文件
文件配置完成之后,将其上传到你的服务器根目录或者.well-known
这个子目录下。
- 确保使用
https://yourdomain.com/apple-app-site-association
这个链接可以访问到,yourdomain.com
为你的服务器域名。 - 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:
- 出现该提示为
apple-app-site-association
文件配置正确。 - 出现
404
错误码提示,则为apple-app-site-association
文件未上传成功,或者使用https://yourdomain.com/apple-app-site-association
路径无法访问。
(2) 建立web网页和app应用之间的关联 -> app IDs
配置 和 项目配置
app IDs 配置
进入开发者网站,找到你自己的bundleId
,可以点击edit
按钮,开启associate domains
,如下图:
项目配置
在项目的Capablities
中开启Associated domains
,如下图:
domains
可以添加多个,前缀必须为
applinks:
,
applinks:
后为你的服务器的域名。
代码接收Universal Links唤醒
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{ NSLog(@"userActivity : %@",userActivity.webpageURL.description); return YES; }
在appdelegate中实现上面这个方法,当使用Universal Links唤醒app时就执行这个方法。
(3)验证以上配置
快捷验证,在备忘录中输入https://yourdomain.com/apple-app-site-association
,长按这个链接,出现下图提示则配置成功。
当没有安装该应用时的处理方式是:上传该html文件到 kahui.huankaun.com 路径下,如下图:
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" /> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <title>上新-跳转中...</title> </head> <body> <script type="text/javascript"> setTimeout(function(){ window.location = "第三方在应用宝的下载链接" },3000) </script> </body> </html>