iOS Universal Links 使用详细教程

您所在的位置:网站首页 ios怎么下载qq的文件 iOS Universal Links 使用详细教程

iOS Universal Links 使用详细教程

2023-12-26 07:29| 来源: 网络整理| 查看: 265

目录

1.为什么要配置Universal Links

2.Universal Links配置步骤及验证

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

4.常见问题及解决方案

苹果官方文档:苹果官方文档-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":["*"] ] }

⚠️ 注意事项:

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

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则表示示例域名,大家的项目应该都是这么命名的吧)

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:域名 的格式填写

3.服务器的配置:

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

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

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

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的跳转栏,像下面这样就是成功了

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

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

3.使用苹果的验证网站(有时候会抽风访问不了),验证文件是否能被苹果请求到。如果是未上线的应用,使用验证网站时可能出现如下提示:

出现该提示为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配置问题 QQ的配置

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

按照提示填写相关信息,最后生成如下Universal Links :app.mytest.com/qq_conn/123… 及12345678(注意这个不是项目的APPID,是QQ生成的);

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

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

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

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

相关QQ配置可参考QQUniversallinks配置

微信的配置

和上面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里面就不行了?

未跨域导致的,如:分享到微信的链接是 www.mydomain.com/share.html,… www.mydomain.com/index.html。… 和 调用通用链接的网页不要使用同一域名。即如果通用链接域名为“www.mydomain.com”,则通用链接所处的网页域名就不能是“www.mydomain.com”。

点个赞再走呗~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3