iOS Universal Links 使用详细教程

目录

一.为什么要配置Universal Links

二.Universal Links配置步骤及验证

三.微信QQ的Universal Links配置问题

四.常见问题及解决方案

苹果官方文档苹果官方文档-Universal Links


一.为什么要配置Universal Links

1.Universal Links可以通过配置指定域名路径直接唤醒APP,一步到位。对比以前的 URL Scheme跳转强大太多,有兴趣可以自行谷歌了解详细原因这里不作太多解释。

2.QQ微信等第三方平台在2021以后相关分享第三方登录都会进行universal link的校验,不配置的话将无法正常使用第三方的功能。

二.Universal Links配置步骤及验证

1.创建一个名字叫做apple-app-site-association,包含固定格式的json文件内容如下:

{

"applinks": {

"apps": [],

"details": [

"appID": "TeamID.com.demon.lan",

"paths":["*"]

]

}

⚠️  注意事项:

1.文件名字必须为apple-app-site-association,不能带json后缀名,不能带json后缀名,不能带json后缀名,重要的事情说三次。

2.apple-app-site-association中的appID 的格式为 teamID.BundleID,teamID和BundleID在开发者网站 Identifiers一栏可以找到。(BundleID在xcode里面也可以找到)

譬如说我的teamID是xxxxxxxxxxx,bundleId是com.mytest.app (为了方便叙述,文章后面都将用com.mytest.app 作为示例的bundleID, bundleID反过来app.mytest.com则表示示例域名,大家的项目应该都是这么命名的吧)

3.  paths配置,实际上就是限制哪些路径可以唤醒app,哪些路径不能唤醒app。

上面的示例中是"paths":["*"] , 只有一个*则表示整个网站都可以使用,不推荐这么写,博主刚开始是这么配置的,出了一个严重的bug,一个支付H5链接,本来点击去H5支付页面的,结果因为我这么配置了,只要链接包含域名直接往APP里面跳,导致用户无法支付!

所以我们要加一些路径:

比如现在我项目有一个把一个事件记录到系统日历里面的功能,里面放一个指定链接如:https://app.mytest.com/SystemCalendar/ 点击直接进入我的APP,那么我path就需要像下面这样配置就好啦,(备注:为了兼容后面需要加字段,我在后面添加了* 来指定网站的某一部分)

"paths": [ "/SystemCalendar/*"]

依次类推如果还想加其他路径,用逗号分割即可,文章后面也会加入QQ微信等path,以下是苹果官方文档示例可以了解一下,注意配置的paths路径,是区分大小写的

"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/*", "/videos/wwdc/201?/*"]


2.xcode项目的配置:

在项目的Capablities中开启Associated domains,如下图:

一定要按照applinks:域名 的格式填写

1

3.服务器的配置:

将apple-app-site-association文件上传到服务器这个需要后端开发配合完成,将这个文件放到服务器的根目录下或者放到.well-known目录下。

当时后端同学给我的截图如下,这里我还是使用文章的相关示例id展示:

确保使用https://app.mytest.com/apple-app-site-association这个链接在safari可以打开APP,一定要是这个格式,后缀不能带.json,中间也不能包含其他路径,app.mytest.com为你的服务器域名。

2

4.验证Universal Links配置是否成功

如果已经配置过Universal Links,那么在用户第一次安装app时,苹果会发送一个请求,请求你服务器上的apple-app-site-association文件。

请求apple-app-site-association文件成功之后,用户就可以使用Universal Links唤醒app了。测试的咱们最好把应用删了重新装,确保苹果会发请求。

以下几种测试方法可以参考:

1.直接将https://app.mytest.com/SystemCalendar  复制到Safari打开,记得下拉以下看看会不会出现APP的跳转栏,像下面这样就是成功了


3

2.快捷验证,在备忘录中输入https://app.mytest.com/apple-app-site-association,长按这个链接,如果能正常显示出apple-app-site-association文件内容,则表示服务端已经上传成功了。

4


然后长按 https://app.mytest.com/SystemCalendar ,出现“在xxxx中打开”(xxxx为你的项目名称)则表示配置成功




3.使用苹果的验证网站,验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:

Validation Tool.png

出现该提示为apple-app-site-association文件配置正确

出现404错误码提示,则为apple-app-site-association文件未上传成功,或者使用https://yourdomain.com/apple-app-site-association路径无法访问,需要检查网络和后端同学联调一下。

Tips:服务器必须要支持https,而且需要支持TLS1.2协议以上,不过相信苹果强制支持https之后,这个坑就会慢慢填上了。现在还有很多童鞋的服务器使用的免费的证书,或者证书不被苹果信任,然后就会导致无法下载apple-app-site-association。苹果支持的https根证书列表

apple-app-site-association文件名千万不能写错,使用charles抓包显示,只有初次安装app时才会去请求apple-app-site-association文件,所以测试时有可能因为网络波动导致apple-app-site-association文件获取失败。这种情况,多卸载几次,安装时使用4G。

验证各种配置的还有一个网站,需要打成ipa包丢上去。

5.通过Universal Links跳到APP内,获取URL:

OC代码:

-(BOOL)application:(UIApplication*)application continueUserActivity:(NSUserActivity*)userActivity restorationHandler:(void(^)(NSArray*_Nullable))restorationHandler{

NSLog(@"userActivity : %@",userActivity.webpageURL.description);

returnYES;

}

Swift代码:

func application(_application:UIApplication, continue userActivity:NSUserActivity, restorationHandler:@escaping([UIUserActivityRestoring]?) ->Void) ->Bool{

   NSLog("userActivity :\(userActivity.webpageURL.description)")

        return true

   }

    在appdelegate中实现上面这个方法,当使用Universal Links唤醒app时就执行这个方法。

三.微信QQ的Universal Links配置问题

1.QQ的配置

1.登录QQ互联官网,到应用管理->找到应用(需要审核通过) ->查看

按照提示填写相关信息,最后生成如下Universal Links :https://app.mytest.com/qq_conn/12345678,刚创建完是要点击验证的,我们拿到QQ的appId 及12345678(注意这个不是项目的APPID,是QQ生成的);

5



项目中对接QQSDK需要配置一下这个Universal Links,初始化会让你传进去

然后将 qq_conn/12345678 这个path加入到apple-app-site-association文件,如下

"paths": [ "/SystemCalendar/*", "/qq_conn/12345678/*"]

即 SystemCalendar为上面提到过的日历路径 ,/qq_conn/12345678/*则QQ的路径,

相关QQ配置可参考QQUniversallinks配置


3.微信的配置

和上面QQ类似,个人感觉比QQ简单很多,登录后台配置一条Universal Links,如果有指定路径则和上面一样加上指定路径,也可以直接填域名,项目内初始化传入即可。

四.常见问题及解决方案

1:appid和项目中为什么要配置支持associate domains呢?

为了在app启动的时候告诉系统,我这个app支持Universal Links呀,这样系统才方便根据项目中配置的domain域,去下载apple-app-site-association文件呀。

2:apple-app-site-association文件配置了一堆是干啥用的呀?

作为WebKit加载链接时进行拦截,然后跳转到目标app的配置文件呀。

3.按照上面写的配好了,怎么死活打不开呀???

a.必须支持https,一定要是符合苹果认证的https证书;

b.配置文件问题,apple-app-site-association文件中配置的path和测试用的通用链接不一致,注意是区分大小写的;

c.域名问题,xcode中配置的域名一不小心写错了。

6.为毛有的手机成功了,有的手机就不行呢???

上面也提到过,因为网络波动有可能会导致部分用户第一次安装时,无法下载apple-app-site-association文件,这个只能引导用户删除重装或者在迭代时修改Associated Domains配置告诉系统重新下载apple-app-site-association文件。

7.服务器换域名了肿么办???

博主做了一个小测试,当Associated Domains添加新的 Domains的之后,在app再次启动的时候抓包发现(不需要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。也就是说Associated Domains发生改变的话,系统是会知道的,这样就可以在迭代的时候删除旧的域名,添加新的域名了。另外Domains的配置也可以使用通配符,例如:applinks:*.mywebsite.com

8.备忘录和safari中都可以打开app,怎么分享到其他app里面就不行了?

未跨域导致的,如:分享到微信的链接是 https://www.mydomain.com/share.html,然后该网页中的“在app内打开”按钮配置的通用链接为 https://www.mydomain.com/index.html。跨域的意思是说,通用链接 和 调用通用链接的网页不要使用同一域名。即如果通用链接域名为“www.mydomain.com”,则通用链接所处的网页域名就不能是“www.mydomain.com”。

总结不易,如有帮助到你,点个赞再走呗~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335