前面我们写了一篇iOS分发管理( iOS App托管和分发搭建)的文章,这一篇写一下分发后,如果用户已经安装了app需要调起app的需求
注意事项:
• Your domain is valid (valid DNS)
• Your file must be served over HTTPS
• Your server shouldn't return an error status code (>= 400)
• Your file cannot be behind redirects
• Your file must be served with content type "application/pkcs7-mime"
• Your file should validate and return its contents with `openssl smime -verify -inform DER -noverify`
• Your file should contain valid JSON (using simple JSON.parse). This can be tripped by things like having an extraneous NULL at the end of your string.
教程很多,我们先看注意事项,上面的重定向、页面报错我都有尝试,确实导致link不生效,把apple-app-site-association文件上传到某个域名指向的服务器中,如果我们测试的web页面会重定向、或者是个不存的页面,都无法正常测试你的结果。当然如果有微信登录的服务,可以配置微信的Universal links,然后调起微信试试就能验证结果。
下面简述一下Universal links的配置过程
截图和参考环境:Xcode Version 11.4 (11E146)
大致步骤:
- 创建【apple-app-site-association】文件
- 上传文件到自己服务器的指定目录下
- app内配置 Associated Domains
- 打包安装到手机(真机)
- 使用Safari验证结果
详细如下
1、创建apple-app-site-association文件
填写apple-app-site-association文件,可以找个json文件,填写,写完后把.json后缀删除。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "teamId.bundleid",
"paths": [ "*" ]
},
{
"appID": "H7JOD8J4A1.bundleid",
"paths": [ "*" ]
}
]
}
}
- 我们只要配置上面的appID 和 paths 就可以了;
- appID是由teamID和bundleID通过"."链接在一起组成的,其中teamID在developer.apple.com的Membership选项下可查。但是!!,但是如果是子账号打包调试,teamID可能有变,在Signing & Capabilities中可以看到,具体见下图。我曾花费1天的时间,苦苦思考,最终发现问题是这个teamID不正确
- paths的配置,建议前期简单配置,测试通过再去琢磨是否有必要丰富一下path
- 注意格式不要出错,一定是严格的json格式,建议在json.cn中编辑,然后贴过来。
2、上传配置文件到服务根目录
在服务器根目录新建.well-known目录,然后上传刚刚写好的文件,这样就可以通过https://yourHost/.well-known/apple-app-site-association来访问到刚才的文件,如果不能访问,则上传的有问题。
app内配置
APP内的 Associated Domains,见下图

- 前面要追加applinks:
- 不用写协议部分https://,直接写host部分就行了,
3、验证
把app安装到app中,然后在Safari中打开一个部署在刚才的服务上的h5页面,加载完成后,微微下拉,如果有看到打开app的提示,即代表配置成功。
4、APP内跳转处理
内部跳转逻辑可以实现以下代理方法,抓取到URL即可自行处理
swift:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool
OC:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable restorableObjects))restorationHandler;
取userActivity.webpageURL即可。如果微信分享使用了 universal Links的方式通信,需要单独做个判断,具体如何判断,抓一个微信回调的URL即可发现规律。
5、举例
假设我们现在配置的是“会小二”APP,注意格式即可,参数值只是示例:
- apple-app-site-association文件中的appID项为 JDIU78976J.com.huixiaoer.app,paths设置为“*”
- 上传到得到移动端的文件地址:https://m.huixiaoer.com/.well-known/apple-app-site-association,并且可在浏览器访问到内容
- 在Xcode配置是:applinks:m.huixiaoer.com
- 把3中配置后的app运行到真机里,或者打包安装也可以。
- 在4完成后的手机中,找到Safari,浏览器输入:https://m.huixiaoer.com?id=8301280,如果能看到打开app的提示即代表成功
6、关于微信分享和登录
除了以上说的细节之外,微信登录和分享还需要做以下处理
1)从微信后台配置universalLink,特别注意的是,如果你的apple-app-site-association文件中的paths写的不是*还是指定到某个子目录里面去了,要同步到微信,否则无法分享。比如这样写的:
"paths": ["/app/*"]
那么微信那边就应该带上/app/
2)微信SDK初始化的时候传入地址,和微信后台一致,可能差个/,具体看情况吧,能用就对了
注意坑:如果你中间把域名换了,那很惨,老版本废了,用不了了,微信也没办法解决
个人觉着这个东西适合网站引流到APP,应不适合app之间信息传递,苹果的决定并不一定好。微信SB也没考虑这些问题,问了也没回答你。
本文详细介绍了iOS应用中Universal Links的配置流程,包括apple-app-site-association文件的创建与上传、服务器设置、Xcode内配置及验证方法。适用于希望深化iOS应用与网页交互功能的开发者。
4430

被折叠的 条评论
为什么被折叠?



