【发布时间】:2016-08-11 00:44:34
【问题描述】:
背景:
- 我们的应用在开发版本、测试版本和生产(App Store)版本中使用不同的捆绑包 ID
- 我目前正在我们的开发版本中实现通用链接
- 我们目前在 App Store 中的生产版本不支持通用链接
我遇到了这个疯狂的问题,我的通用链接不仅没有打开应用程序的开发版本,而是在启动生产版本,尽管生产版本没有适当的权利。
我的apple-app-site-association 文件已使用https://branch.io/resources/universal-links/ 和https://search.developer.apple.com/appsearch-validation-tool/ 进行了验证,如下所示:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "DY74R9XXXX.com.myapp.consumer.debug",
"paths": [ "/profiles/*", "/messages/*"]
},
{
"appID": "DY74R9XXXX.com.myapp.consumer",
"paths": [ "/profiles/*", "/messages/*"]
}
]
}
}
根据https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html,details 数组应按顺序求值,并在找到匹配项后停止。
数组中字典的顺序决定了字典的顺序 系统在寻找匹配时跟随,因此您可以指定一个应用程序 处理您网站的特定部分。
我们的目的是在开发版本中为我团队中的任何人加载相同的通用链接,在生产版本中为手机上没有.debug 包的最终用户加载。
这不仅不起作用,而且如上所述,通用链接始终加载生产版本,即使生产版本缺少指向我 apple-app-site-association 文件的 applinks:dev.myserver.com 权利。这看起来很疯狂,但这意味着我可以启动我没有发布的任意包并且权利文件没有被强制执行。
此外,如果我从 details 数组中删除第二个条目,只保留调试版本的字典,通用链接将无法工作,而是打开 Safari。切换数组的顺序也没有效果。我在 9.3 和 9.3.1 的 iPhone 6s 上都经历过这种行为。非常感谢关于这两个问题的任何建议(启动错误的包,并且在它是唯一条目时不启动调试包)!
【问题讨论】:
-
这看起来很奇怪,听起来 iOS 在某种程度上将
DY74R9XXXX.com.myapp.consumer.debug和DY74R9XXXX.com.myapp.consumer之间的权利混为一谈,也许是因为它们非常相似。这绝对没有记录在任何地方。您能否尝试将调试版本的捆绑 ID 更改为明确不同的内容? -
@AlexBauer 您似乎对权利由于相似性而感到困惑,但这并不能解释为什么它不适用于仅一个详细信息条目。但是,根据您的建议,我将捆绑 ID 更改为
com.myapp.dev并且它起作用了。然后我将其更改为com.myapp.dev.dev,这同样有效(我担心一个具有 4 个级别标识符的错误与典型的 3 个级别标识符相比)。对后续步骤有何建议? -
apple-app-site-association文件仅在安装应用程序时被拉取。假设这实际上是一个缓存问题,我认为您每次都必须删除 both 应用程序构建以获得干净的测试。如果您只是删除并重新安装其中一个,我可以看到这将如何导致这些挥之不去的问题。 -
@AlexBauer 我找到了确切的原因,它不是缓存。请参阅下面的更新答案。感谢您的所有帮助!
-
太棒了。感谢您的更新!
标签: ios ios9 deep-linking ios-universal-links