Universal Links 相关文档
先上效果:
工作原理
1、App第一次启动时,或App更新后第一次启动时,会通过Associated Domains里取的域名,通过GET请求访问apple-app-site-association的文件
2、访问到到apple-app-site-association文件,统一注册到系统
3、任意Webview(包括第三方应用内的Webview)发起跳转(必须要跨域跳转),如果命中通过apple-app-site-association注册的通用链接,就会找到AppID
4、如果下载安装过该App则会打开App 触发 Universal Link Delegate事件,如果没安装,则继续跳转url
应用场景
1、微信 WechatOpenSDK_NoPay 1.8.6.1版本初始化需要配置universalLink
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
* 需要在每次启动第三方应用程序时调用。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param universalLink 微信开发者Universal Link
* @return 成功返回YES,失败返回NO。
*/
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
2、类似淘宝、小红书详情自动跳转到原生App,若未安装,可以显示原链接内容
开始配置
1、配置developer.apple.com 后台 Certificates, Identifiers & Profiles ,在Identifiers 中 找到对应的 Identifiers,进行配置
2、在工程中,配置Domains,配置Domains,需要 applinks: 开头,结构为:applinks:<domains>, 例如:applinks:www.baidu.com
3、服务端配置apple-app-site-association文件,通过浏览器能够直接访问:https://<domains>/.well-known/apple-app-site-association 或者 https://<domains>/apple-app-site-association能够直接访问到配置文件
apple-app-site-association 模板:
{
"applinks": {
"apps": [],
"details": [ {
"appID": "9JA89QQLNQ.com.apple.wwdc", // TeamID.BoundleID
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] // 正则匹配URL域名后面的路径
}, {
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
} ]
}
}当safri浏览器访问https://<domains>/wwdc/news/ 或 https://<domains>/videos/wwdc/2015/xxx 时,会检测iOS设备是否安装 9JA89QQLNQ.com.apple.wwdc 这个App,如果安装,则会跳转到原生应用,并保留safri页面,如果未安装,则停留safri页面,并打开当前网页。
当有多个details时,匹配规则从上到下一次匹配,匹配到后就不再往下匹配
这个步骤坑比较多,且排查困难
坑1:运维存放文件时,不能以json文件格式保存。不需要加任何扩展名
Don’t append .json to the apple-app-site-association filename.
坑2:通过浏览器返回时,Response Headers的Content-Type设置为:text/html,不能用text/plain。因为text/plain返回的浏览器会当作文本不作任何解析
坑3:必须要Https下才能正确访问到,且文件必须在根目录下才能访问
最总目的是 https://<domains>/.well-known/apple-app-site-association 或 https://<domains>/apple-app-site-association 能访问
目前我们的方案可以参考一下:
nginx 配置
location /apple-app-site-association {
charset UTF-8;
default_type text/html;
return 200 '{\"applinks\":{\"apps\":[],\"details\":[{\"appID\":\"appID.com.xxxx\",\"paths\":[\"*\", \"/*\"]}]}}'
}
官方验证链接:苹果官方测试链接
配置结果说明:
1、
Error no apps associated with url
配置异常,没有访问到apple-app-site-association的文件
2、
Error no apps with domain entitlements
The entitlement data used to verify deep link dual authentication is from the current released version of your app. This data may take 48 hours to update.
48小时后生效
3、
配置成功的标志