ios universal link

第一次接触 universal link是发现有的app可以发短信里面带链接 点击直接用safari打开 跳转到app 大概粗略的看了一下 没有具体实施
第二次则是由于新版ios 微信sdk必须配置 每次到universal link配置就会卡住 所以决定研究一下这个到底是什么

官方文档:https://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content/enabling_universal_links?language=objc

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW1

  1. 创建一个json文件,名称必须为 apple-app-site-association,⚠️该文件不可带 .json 的后缀名

    apple-app-site-association 文件必须放在https服务器的根目录下,例:https://kahui.huankaun.com 这个路径下 ⚠️一定是根目录,也就是说该文件必须是一级目录,供下载使用

    * apple-app-site-association 文件格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    {
    "applinks": {
    "apps": [],
    "details": [
    {
    "appID": "teamID.bundleId",
    "paths": ["/deaplink","/wwdc/news/","*"]
    },
    {
    "appID": "ABCD1234.com.apple.wwdc",
    "paths": [ "*" ]
    }
    ]
    }
    }

    1) appID :appID 格式为 teamID.bundleId形式,譬如说我的teamIDxxxxxxxxxxxbundleId是com.mytest.app 那么我的appID就是:xxxxxxxxxxx.com.mytest.app。
    teamID:打开苹果官网,点击Account,点击左边栏的 Membership,查找teamID

    2) 设定一个App的路径支持列表,只有这些指定的路径链接才会被App所处理。格式如下:

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

    需要注意的是:
    配置的paths路径,是区分大小写的

  2. apple-app-site-association文件上传到您的HTTPS Web服务器。您可以将文件放在服务器的根目录或.well-known子目录中。

    • 确保使用https://yourdomain.com/apple-app-site-association这个链接可以访问到,yourdomain.com为你的服务器域名。
    • 也可以使用苹果的验证网站,验证文件是否能被苹果请求到。
  3. 建立web网页和app应用之间的关联 -> app IDs配置 和 项目配置

    进入开发者网站,找到你自己的bundleId,可以点击edit按钮,开启associate domains

    image-20200329180435654

  4. 在项目的Capablities中开启Associated domains

image-20200329180739550

注意domains可以添加多个,前缀必须为applinks:applinks:后为你的服务器的域名。

代码接收Universal Links唤醒

1
2
3
4
-(BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
NSLog(@"userActivity : %@",userActivity.webpageURL.description);
return YES;
}

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

  1. 验证以上配置

    • 测试 Universal Link 是否可用

      备忘录里输入可以让 app 处理的 Universal Link 网址,例如 我配置的paths 是 ["*"] , 表示域名下的任意网址, 我在备忘录里输入 https://foobar.com/foo 然后点击,如果成功是会打开 app 的。

下面是微信1.8.6sdk配置的方法

具体参考文档 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html

ps:

  1. 向微信注册你的应用程序id和Universal Links

    开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。

image-20200329181903874

  1. Target —> info —> LSApplicationQueriesSchemes —> 添加 weixinULAPI