前言

接到一个需求app需要接入支付宝登录,而安卓端可以通过urlScheme拉起,ios端则是苹果新定义的协议Universal Link

Universal Link

苹果新推出的app之间跳转方法
应用比较广泛案例:用户分享app中某个内容到微信,用户在微信聊天中点开这个(universal link),例如:www.xxx.com/mypage?id=1… 就可以直接跳转到app中的个人主页页面!然而微信的webview中检测到uniersal link,禁止了跳转。那一般的解决方法就是:在微信浏览器网页中提示用户在safari中打开该网页,在safari中打开该网页就可以直接跳转app。

Universal Links配置步骤及验证

建一个名字叫做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里面也可以找到)

服务器的配置:

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

验证Universal Links配置是否成功

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

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

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

1.直接将https://universal Link复制到Safari打开,记得下拉以下看看会不会出现APP的跳转栏。

  1. 快捷验证,在备忘录中输入https://universal Link/apple-app-site-association,长按这个链接,如果能正常显示出apple-app-site-association文件内容,则表示服务端已经上传成功了。
  2. 使用苹果的验证网站(有时候会抽风访问不了),验证文件是否能被苹果请求到。另外找苹果官方测试网站好像没了,找了半天 找到下面平替网站(要翻墙)实测是否配置的apple-app-site-association连接是否生效branch.io/resources/a…

常见问题以及解决办法

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

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

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

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

  3. 所有配置都完全没问题,但是通过备忘录与Safari测试死活不通过

    自己测试时候也遇到过,以为是app缓存,然而删掉app重装也没效果!最后删掉app、重启手机,再测试居然通过了,这是内置在手机系统文件里了吗 啊啊啊啊!!!