前两天公司要用到Af的深度链接去进行广告定向投放并要做一些归因方面的逻辑,看了一天没看出头绪,一头雾水,第二天缕了下差不多了解了它的原理,开始也因为对通用链接方面的只是不太了解。吐槽一下,确实接入这些第三方的东西它不会去说明太多原理方面的东西,多数只会给出文档让去照着做,遇到问题很难找出头绪去解决。That's painful!
Af的深度链接功能,是基于ios的通用链接的功能(不熟悉可以搜索了解下“ios 通用链接”相关),在Af添加,Af会自动生成链接,并且在服务器里生成对应的apple-app-site-association文件,格式:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamID.bundleId",
"paths": [ "/abc/a/", "/abc/a/b/*"]
},
{
"appID": "teamID.bundleId",
"paths": [ "*" ]
}
]
}
}
注意:teamId和bundleID要和当前的应用对应
我们要做的是Associated Domains里添加生成的链接域名,如下图:
![](https://img.haomeiwen.com/i8126931/7fe0e04f1e537fa6.png)
然后将Af生成的链接拷贝到邮件、便签、iMessage里,长按链接,如果出现“在xxapp中打开”就表明配置成功了。它的逻辑我猜想应该是长按链接时系统会根据该链接去查找已安装的app,获取app里有对应的Domains applinks的app,应该和查找bundleID的方式一样的查找包含相应Domains applinks的app的逻辑,如果该app已安装就显示“在xxapp中打开”,未安装在safari里点开就会跳转到app store下载地址。
我们还需要在Appdelegate里实现continueUserActivity方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
{
NSURL *url = userActivity.webpageURL;
if (url){
//对url进行处理
}
else
{
[[UIApplication sharedApplication] openURL:url];
}
}
return YES;
}
实现该深度链接的地址就应该是编辑的Domains applinks加apple-app-site-association里detail的path路径,即域名加路径。如Domains applinks是aa.bb.com,apple-app-site-association的details里的paths是/cc/dd,那么深度链接地址就是aa.bb.com/cc/dd,只要把这个链接拷贝到便签等指定app内长按,如果配置正常就会弹出在xx app打开的选项。验证深度链接是否可用可以使用苹果的官方验证地址验证,地址:
https://search.developer.apple.com/appsearch-validation-tool/
网友评论