Universal Link打开错误的捆绑ID

时间:2016-04-19 03:48:38

标签: ios ios9 deep-linking ios-universal-links

背景:

  • 我们的应用程序使用不同的捆绑ID进行开发构建与beta版本与生产(App Store)构建
  • 我目前正在开发构建中实施Universal Links
  • 我们目前在App Store中的生产版本不支持Universal Links

我遇到了这个疯狂的问题,不仅我的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.htmldetails数组应按顺序进行评估,并在找到匹配后停止。

  

数组中字典的顺序决定了它的顺序   在查找匹配时系统会跟随,因此您可以指定应用程序   处理您网站的特定部分。

目的是为我的团队中的任何人加载开发版本中的相同Universal Link,并为手机上没有.debug包的最终用户加载生产版本。

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

此外,如果我从details数组中删除第二个条目并且仅保留调试版本的字典,则Universal Links无法工作,而是打开Safari。切换数组的顺序也没有影响。我在9.3和9.3.1上的iPhone 6s上都遇到过这种情况。关于这两个问题的任何建议(启动错误的软件包,并且当它是唯一的条目时不启动调试软件包)非常感谢!

2 个答案:

答案 0 :(得分:2)

这不是缓存问题 - 更新后的解决方案

原始答案:

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

更新/更正解决方案

更改捆绑包ID然后将其更改回来实际上修复了该问题,因为它修改了我的Info.plistproject.pbxproj文件。当我看到差异时,真正的问题变得明显。我们之前在Info.plist

中通过此值设置了我们的捆绑ID
<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项目。

  1. 为目标和
  2. 创建每个权利文件
  3. 在Firbase控制台中创建不同的Deep链接。
  4. 使用Firebase控制台中的App_code更新权利文件 - &gt; Associated_Domain名称。
  5. 就是这样。使用不同的app_code生成链接表单。它将推出备受推崇的应用程序。