[iOS]Universal Link
从零开始的操作流程在后面,这里把几个坑先挪到前面来 便于查看:
🕳️
apple-app-site-association 只会在APP第一次启动的时候请求一次,因此文件的任何更新的验证都需要APP重新安装或App Store更新。
iOS 要使用 Universal Link,在客户端和网页端都需要进行配置
首先先看客户端的工作:
1.在APP 的工程中添加 Associated Domains
Xcode 11.4 及以上版本,直接在工程的的 Targets - Signing&Capabilities - +Capability - Associated Domains,添加Associated Domains
2.在 Associated Domains 进行链接的配置
点击添加按钮,添加要配置的网址链接,格式为 applinks:你的域名
比如你的域名是 www.hahaha.com, 那么你就配置成 applinks:www.hahaha.com
(注意前面不用加https:// 后面也不要加path 或者 /)
3.在 APPDelegate中 增加额外的处理方法
在 APPDelegate 中增加这个方法
在 APP被 universal link 唤醒后,就可以在这个函数内进行额外的处理(比如对path的处理来打开对应的界面等)
#pragma mark Universal Link - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *url = userActivity.webpageURL; // TODO 可以读到URL里的host ,path等内容,根据需求进行处理 } // TODO 根据需求进行处理 return YES; }
然后看网页端的配置:
1.客户端的开发人员需要给网页端提供一个 apple-app-site-association 的 json文件
创建一个文本文件,不要加后缀名,里面的json内容如下:
{ "applinks": { "apps": [], "details": [ { "appID": "你的TeamID.你的bundleID", "paths": [ "/你的path/你的path/", "/你的另一个path/*"] } ] } }
apps 字段 固定为一个空数组就可以了(为什么会有这种设置-_-)
我们关注一下 details 的写法:
首先,details 这个字段是一个数组,你可以配置多个元素,也就是说你的同一个域名其实可以打开不同的APP;
来看一个 detail 元素的格式:
1⃣️ appID,由两部分组成,teamID 和 budnleID。
首先是 teamID,去apple开发者网站-account,
https://developer.apple.com/account
点击 - 左侧 Membership ,就可以看到开发者账号的Team ID
TeamID 的格式 类似于 HILIE3CF44 (此处的teamID是编的),
然后我们继续找一下 bundleID,在你的工程中就可以找到
bundleID的格式,类似于 com.orancompany.peal ,(这个ID当然也是编的)
我们把这两个ID用点号拼在一起,就得到了这里需要的 appID :
HILIE3CF44.com.orancompany.peal
2⃣️下面再来看一下paths:
可以配置多个path;
结尾的 * 号表示这个路径之后不同的子路径也都可行;
只有域名+path的地址才能够唤起appID对应的APP;
paths中的内容,在唤起APP之后,APP中是可以接收到的,所以APP中通过对paths参数的判断,可以进一步打开不同的页面或者做其他的处理逻辑。
如果你这样写一个 detail
{ "appID": "HILIE3CF44.com.orancompany.peal", "paths": [ "*"] }
path里只有*,那么只要点击你的域名,就会唤起appID对应的APP。
2.让你们的网页开发人员把第一步的这个文件放到域名下的根目录 或者 .well-known (注意点号)目录下
必须支持HTTPS协议;
悄悄放一个apple的官方文档:https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/supporting_universal_links_in_your_app