iOS关联域名-子域名似乎被忽略了。

7
我有两个构建配置:App和App Stage。
每个配置都配置了不同的关联域:app。mydomain.com 和app-stage。mydomain.com 。
当然,每个网站都公开不同的apple-app-site-association文件:app.mydomain.com/apple-app-site-association和app-stage.mydomain.com/apple-app-site-association(HTTP 200,没有.json扩展名等)。
问题在于,只有第一个注册的域(不幸的是它是Stage)正常工作。当我安装了两个应用程序时,每个深层链接(app.mydomain.com/homeapp-stage.mydomain.com/home)打开了App Stage。当我仅安装了App Sage时,也会打开这两个链接。当我仅安装App时,没有任何链接有效。看起来关联域的子域被忽略,仅考虑mydomain.com 。
我认为构建配置已正确定义,因为我还区分了其他设置,如Facebook,Google和其他设置。
您是否遇到过类似的问题?可以使用相同域的不同子域进行关联域使用吗? 更新: 按照@clayjones94的说明,我检查了每个应用程序是否使用Charles Proxy下载正确的JSON文件。 我发现App Stage正在获取正确的文件,而App不会获取任何文件。 我还编辑了app-stage.mydomain.com/apple-app-site-association 中的URL的HTTP请求,在其中Charles确保app.mydomain.com/apple-app-site-association 返回正确的JSON。当我从URL中删除-stage 并重复调用时,它会获取不同的JSON文件,因此我确认后端对于两个配置均正常工作。
起初,我认为我的构建配置有误。因此,我决定将App的 applinks:app.mydomain.com关联域替换为Stage的 applinks:app-stage.mydomain.com ,以查看App配置能否获取App Stage文件。它有效,App已下载App Stage的JSON文件。再次,看起来关联域的子域被忽略,仅考虑第一个注册的子域。

你能在服务器上看到访问日志以查看正在请求什么吗?mydomain.com/apple-app-site-association提供了什么内容? - Lou Franco
是的,它可以成功获取(HTTP 200),并且看起来几乎与阶段子域apple-app-site-association文件相同 - 只有捆绑标识符不同(两个应用程序在同一个团队中)。 - KlimczakM
你解决了问题吗?我在iOS 17上遇到了同样的问题。 - undefined
2个回答

2

在通用链接(应用程序域)中,域名和子域名概念是无可比拟的。我猜测苹果站点关联文件配置可能存在问题。

请检查与appID字段相关的苹果站点关联配置。我怀疑您可能已经在两个文件中放置了相同的appID。

您应该为这两个配置使用不同的appID。


感谢您的回复。apple-app-site-association文件不同,阶段应用程序appID条目:"appID": "3U******2D.de.k****a.app-stage",应用程序appID条目:"appID": "3U******2D.de.k****a.app"。我希望这不是iOS的一个错误,就像iOS11上的静默通知一样... - KlimczakM
你还有其他相关的域名列出来吗? - Kumar Reddy
不,这是唯一的一个。 - KlimczakM

1
当拉取苹果应用网站关联文件时,您的操作系统应该分别拉取两个文件。我建议删除这两个应用程序并重新启动手机,以确保没有旧的AASA文件被缓存。
当您重新安装应用程序到手机上时,您可以使用Charles Proxy查看每个安装是否拉取了正确的AASA文件。由于您的关联域中有两个URL,因此每个安装都将下载两个AASA文件。如果您的生产应用程序未能下载两个文件,则可能是一个苹果问题,您只需删除该应用程序并重试即可。
如果您验证每个应用程序都下载了两个AASA文件,则应验证appIDs是否正确(似乎您已经这样做了)。当两个应用程序都具有正确的关联域和具有正确appIDs的两个AASA文件时,根据链接,您的操作系统应该打开正确的应用程序。如果仍然无法正常工作,则可能意味着您的AASA文件已由与您的Staging应用程序但不是您的生产应用程序相关联的授权签名。
我建议您使用Branch进行通用链接。Branch有测试链接,您可以使用这些链接来测试产品应用程序的链接,并且您应该能够在Branch上创建一个单独的应用程序,用于您的分段应用程序,以便您拥有不同的链接。好处是我们将为您处理所有的AASA处理和签名。深度链接服务是免费的,我们执行延迟深度链接 :)。

谢谢您的回复!当我使用Charles验证每个应用程序是否正在下载正确的文件时,我发现虽然App Stage正在下载正确的文件,但是App没有下载任何AASA文件!现在我正在调查原因。 - KlimczakM
请检查更新的问题。当我在Xcode中将“-stage”添加到应用程序关联域名时,该应用程序已下载App Stage JSON文件(先前它没有获取任何内容)。 - KlimczakM
嗯,这不应该是这种情况。分支应用程序实际上会从2个不同的子域中获取AASA文件。我们为每个应用程序都有一个类似于您的“-stage”的“-alternate”。当用户在原始子域上并希望深度链接到应用程序时,将使用备用域(如果用户在该域上,则Apple不允许通用链接进入本机应用程序)。请查看我的测试应用程序AASA,网址为http://q1hv.app.link/apple-app-site-association和备用AASA,网址为http://q1hv-alternate.app.link/apple-app-site-association。看起来您的应用程序的AASA文件没有正确托管。 - clayjones94
谢谢你的示例,它让我相信这不应该是问题,我会继续尝试。如果我发现其他问题,我会更新问题。 - KlimczakM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接