前面我们写了一篇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内配置 >> 打包安装到手机(真机) >> 使用Safari验证结果 >> 内部逻辑

详细步骤:

1、填写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中编辑,然后贴过来。

%title插图%num
2、在服务器根目录新建.well-known目录,然后上传刚刚写好的文件,这样就可以通过https://yourHost/.well-known/apple-app-site-association来访问到刚才的文件,如果不能访问,则上传的有问题。

3、app内配置Associated Domains,见上图

前面要追加applinks: ​
不用写协议部分https://,直接写host部分就行了,
举例,假设我们现在配置的是得道app,注意格式即可,参数值只是示例:

apple-app-site-association文件中的teamID为 JDIU78976J.com.dedao.app,paths不变
上传到得到移动端的文件地址:https://m.dedao.com/.well-known/apple-app-site-association,并且可在浏览器访问到内容
在Xcode配置是:applinks:m.dedao.com
把3中配置后的app运行到真机里,或者打包安装也可以。
在4完成后的手机中,找到Safari,浏览器输入:https://m.dedao.com?id=8301280,这里假设
4、把app安装到app中,然后在Safari中打开一个部署在刚才的服务上的h5页面,加载完成后,微微下拉,即可看到打开app的提示。如果有提示,即代表配置成功。

5、如果需要内部跳转逻辑,可以实现以下代理方法,抓取到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即可发现规律。