关于ios Universal Links apple-app-site-association文件 Not Found的问题

1. 背景说明

Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是

当您支持通用链接时,iOS 用户可以点击指向您网站的链接,并无缝重定向到您安装的应用程序

大白话就是说,用户通过点击某个链接,可以直接唤起对应的app。提供这样功能的目的是为了吸引网络用户(俗称引流)

简单的来说,配置Universal Links需要涉及到两方面:域名服务器和app:

① 域名服务器上要配置apple-app-site-association文件 (也被称为AASA文件)

创建apple-app-site-association文件后,将其上传到 HTTPS Web 服务器的根目录或子目录.well-known。该文件需要可通过 HTTPS 访问(无需任何重定向),地址为https:///apple-app-site-association或https:///.well-known/apple-app-site-association。接下来,您需要处理应用程序中的通用链接

即配置成以后,有3个链接要访问成功才可以:

html 复制代码
https://你的域名.com/apple-app-site-association
https://你的域名.com/.well-known/apple-app-site-association
https://app-site-association.cdn-apple.com/a/v1/你的域名.com

最后一个链接是苹果CDN链接,可以理解为只要这个地址像下图一样返回正常,就说明我们配置的AASA文件没有问题

② app上要在Xcode的Associated Domains里面去配置applinks

两方面都要配置好,才能正常使用Universal Links 唤起app。配置OK后,可以在钉钉、微信、safari浏览器、扫描器等里面直接通过配置的域名唤起app。

2. 问题出现与调试

昨天17点的时候,发现Universal Links 无法正常唤起app了。打开那3个链接进行调试,发现只有前个是可以正常访问的。

html 复制代码
https://你的域名.com/apple-app-site-association
https://你的域名.com/.well-known/apple-app-site-association
https://app-site-association.cdn-apple.com/a/v1/你的域名.com

第三个显示Not Found

在shell里面运行:

html 复制代码
curl -v  https://app-site-association.cdn-apple.com/a/v1/你的域名.com

可以看到该请求的详细信息:

powershell 复制代码
< Apple-Failure-Details: {"status":"405 Not Allowed"}
< Apple-Failure-Reason: SWCERR00101 Bad HTTP Response: 405 Method Not Allowed

3. 修复总结

  1. 这个Universal Links 之前一直能正常访问,ios app发版也没有动过相关配置。为什么就失效了呢

  2. 前2个链接是可以正常访问的,即apple-app-site-association的配置是ok的。问题出在最后一个连接上,Not Allowed 可能是我们的服务器不允许app-site-association.cdn-apple.com访问

  3. 联想到前几天服务器受到了攻击,所以运维调整了安全策略,有时候在我们的域名下可以安全提示。和运维确认以后,得知运维禁止了所有的国外ip访问

  4. 但是在运维放开以后,访问

powershell 复制代码
https://app-site-association.cdn-apple.com/a/v1/你的域名.com

依然是 Not Found,似乎没有任何变动。

  1. 正好那个时间还有几分钟就下班了,还要取写每日云效和日报,就先没管这个了。今天上班以后,发现链接可以访问了。

    回想可能是缓存问题,之前配置AASA文件的时候,就了解到AASA文件文件是有缓存的,或者说是apple CDN的缓存。修改AASA文件以后,从https://app-site-association.cdn-apple.com/a/v1/ 访问可能不会马上更新。这个缓存具体时间不确定,可能是几小时或几天不等

  2. 也就是说即使我们修改了自己服务器上的apple-app-site-association文件,搭配app测试的时候,可能也不会马上达到我们想要的效果。 比如一开始我们在AASA文件里面是这样配置的:

javascript 复制代码
     "paths": [
        "*"
      ]

这代表当前域名下的所有url都会唤起我们的app

但是如果修改一下:

javascript 复制代码
        "paths": [
          "NOT *-wx-*",
          "*"
        ]

这表示我们想当前域名下,含-wx-的url不会唤起app。但是当我们修改了AASA文件,并更新到服务器以后,同时确保服务器文件已更新。

可能依然会发现,测试效果并非我们所预测的那样,包含-wx-的url依然会唤起app,此时查看

html 复制代码
https://app-site-association.cdn-apple.com/a/v1/你的域名.com 

会发现,依然是

javascript 复制代码
     "paths": [
        "*"
      ]
  1. 同文件内容的缓存一样,我感觉我们在放开国外ip访问以后,https://app-site-association.cdn-apple.com/a/v1/ 或 apple CDN 并没有马上访问更新。所以当时没有生效,但是第二天缓存更新就生效了
相关推荐
wjm0410064 小时前
ios八股文 -- Objective-c
开发语言·ios·objective-c
麦兜*13 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
Digitally18 小时前
重置iPhone会删除所有内容吗? 详细回答
ios·iphone
普罗米拉稀20 小时前
Flutter 复用艺术:Mixin 与 Abstract 的架构哲学与线性化解密
flutter·ios·面试
kymjs张涛1 天前
零一开源|前沿技术周刊 #12
ios·google·github
2501_915918412 天前
iOS 应用上架全流程实践,从开发内测到正式发布的多工具组合方案
android·ios·小程序·https·uni-app·iphone·webview
笔沫拾光2 天前
iOS 正式包签名指南
flutter·ios·ios签名
Magnetic_h2 天前
【iOS】锁的原理
笔记·学习·macos·ios·objective-c·cocoa·xcode
Digitally2 天前
将 iPhone 联系人转移到 Infinix 的完整指南
ios·cocoa·iphone
imLix3 天前
RunLoop 实现原理
前端·ios