5

背景:

  • 我们的应用程序对开发版本、测试版本和生产(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.htmldetails应按顺序评估数组并在找到匹配项后停止。

数组中字典的顺序决定了系统在查找匹配项时遵循的顺序,因此您可以指定一个应用程序来处理您网站的特定部分。

.debug目的是为我团队中的任何人在开发版本中加载相同的通用链接,在手机上没有该软件包的最终用户的生产版本中加载。

这不仅不起作用,而且如前所述,通用链接始终加载生产版本,即使生产版本缺少applinks:dev.myserver.com指向我apple-app-site-association文件的权利。这看起来很疯狂,但这意味着我可以启动我没有发布的任意包并且权利文件没有被强制执行。

此外,如果我从数组中删除第二个条目details,只保留调试版本的字典,通用链接将无法工作,而是打开 Safari。切换数组的顺序也没有效果。我在 9.3 和 9.3.1 的 iPhone 6s 上都经历过这种行为。非常感谢关于这两个问题的任何建议(启动错误的包,并且在它是唯一条目时不启动调试包)!

4

2 回答 2

2

这不是缓存问题- 下面更新了解决方案

原答案:

根据 Alex Bauer 的建议,在第三级将我的包 ID 更改为不同的 ID 后,我能够使链接正常工作。然后我将我的捆绑 ID 改回com.myapp.consumer.debug,他们继续工作。所以这可能是一个奇怪的与swcd服务缓存相关的错误。但是,如果我将DY74R9XXXX.com.myapp.consumer条目移动到数组中的第一个位置,它将继续启动消费者版本,即使它缺少权利。这似乎是与四级捆绑 ID 和不正确匹配相关的潜在单独或附加错误。

更新/正确的解决方案

更改捆绑 ID 然后将其更改回来实际上解决了问题,因为它修改了我的Info.plistproject.pbxproj文件。当我查看差异时,真正的问题变得显而易见。我们之前通过以下值设置我们的包 ID 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,如此处所示 现在一切都按预期工作。

TL;DR - 通用链接针对您的PRODUCT_BUNDLE_IDENTIFIER而不是您的CFBundleIdentifier。如果您的 PRODUCT_BUNDLE_IDENTIFIER 与您的包裹的最终捆绑 ID 不匹配,通用链接将无法正常工作。

于 2016-04-19T05:49:34.577 回答
1

其他解决方案,以防您使用多个目标和多个 Firebase 项目。

  1. 分别为目标和
  2. 在 Firbase 控制台中创建不同的深层链接。
  3. 使用 Firebase 控制台中的 App_code 更新权利文件 -> Associated_Domain 名称。

而已。使用不同的 app_code 生成链接表单。它将启动受人尊敬的应用程序。

于 2017-01-10T09:12:13.873 回答