背景:
我遇到了这个疯狂的问题,不仅我的Universal Links没有打开应用程序的开发版本,他们正在推出生产版本,尽管生产版本没有适当的权利。
我的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
数组应按顺序进行评估,并在找到匹配后停止。
数组中字典的顺序决定了它的顺序 在查找匹配时系统会跟随,因此您可以指定应用程序 处理您网站的特定部分。
目的是为我的团队中的任何人加载开发版本中的相同Universal Link,并为手机上没有.debug
包的最终用户加载生产版本。
这不仅不起作用,而且如上所述,Universal Links总是加载生产版本,即使生产版本缺少指向applinks:dev.myserver.com
文件的apple-app-site-association
权利。这看起来很疯狂,但这意味着我可以启动我没有发布的任意软件包,并且不会强制执行权利文件。
此外,如果我从details
数组中删除第二个条目并且仅保留调试版本的字典,则Universal Links无法工作,而是打开Safari。切换数组的顺序也没有影响。我在9.3和9.3.1上的iPhone 6s上都遇到过这种情况。关于这两个问题的任何建议(启动错误的软件包,并且当它是唯一的条目时不启动调试软件包)非常感谢!
答案 0 :(得分:2)
这不是缓存问题 - 更新后的解决方案
原始答案:
根据Alex Bauer的建议,将我的捆绑ID更改为第三层不同的东西后,我能够获得链接。然后我将我的捆绑ID更改回com.myapp.consumer.debug
,然后他们继续工作。所以这可能是swcd
服务与奇怪的缓存相关的错误。但是,如果我将DY74R9XXXX.com.myapp.consumer
条目移动到数组中的第一个位置,它将继续启动消费者版本,即使它缺少权利。这似乎是与四级捆绑ID和错误匹配相关的潜在单独或附加错误。
更新/更正解决方案
更改捆绑包ID然后将其更改回来实际上修复了该问题,因为它修改了我的Info.plist
和project.pbxproj
文件。当我看到差异时,真正的问题变得明显。我们之前在Info.plist
:
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)${BUNDLE_ID_SUFFIX}</string>
我们的PRODUCT_BUNDLE_IDENTIFIER
中有一个静态project.pbxproj
。这是基于以前发布的多个env构建的常见实践。但是,在XCode 7中,Apple强烈建议升级设置,以便Info.plist
始终包含:
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
在使用正确的软件包名称构建和提交iTunes之前,这绝不是一个问题。但是,现在很明显某些功能需要这种精确设置,如下所示:Use Bundle Identifier instead of Product Bundle Identifier with Xcode 7
我通过XCode为每个构建类型设置了Product Bundle ID,如here所示 现在一切都按预期工作了。
TL; DR - 通用链接定位您的 PRODUCT_BUNDLE_IDENTIFIER ,不 CFBundleIdentifier 。如果您的PRODUCT_BUNDLE_IDENTIFIER与您的软件包的最终软件包ID不匹配,则Universal Links将无法正常运行。
答案 1 :(得分:0)
如果您正在使用多个目标&amp;多个Firebase项目。
就是这样。使用不同的app_code生成链接表单。它将推出备受推崇的应用程序。