分支没有打开 App Store link

Branch does not open the App Store link

我使用 Branch 创建深度 links。我添加了一个新的控制参数 ios_has_app_url 和 ios_url。安装应用程序时单击深度 link 然后一切正常,但是如果在设备上未安装应用程序时单击深度 link 然后在启动过程中,我会看到浏览器打开 ios_url(App Store link)时,它会尝试打开 ios_has_app_url。我该如何解决?

private func createDeepLink(_ card: CardModel) -> (branchUniversalObject: BranchUniversalObject, branchLinkProperties: BranchLinkProperties) {
    let branchUniversalObject = BranchUniversalObject(canonicalIdentifier: ("cardId/\(card.id)"))
    branchUniversalObject.title = card.title
    branchUniversalObject.contentDescription = ""
    branchUniversalObject.imageUrl = card.photoURLsProperties.originalURL

    branchUniversalObject.addMetadataKey(CardKeys.cardID.rawValue, value: card.id)

    branchUniversalObject.addMetadataKey("placeAvatarURLString", value: card.photoURLsProperties.originalURL)

    branchUniversalObject.addMetadataKey("title", value: card.title)
    branchUniversalObject.addMetadataKey("isAutoGeneratedCard", value: "false")

    let fullLocationName = card.location.fullLocationName
    branchUniversalObject.addMetadataKey("fullLocationName", value: fullLocationName)

    branchUniversalObject.addMetadataKey(CardKeys.ownerID.rawValue, value: card.ownerID)
    branchUniversalObject.addMetadataKey(ParametersKeywords.type.rawValue, value: ModeKeywords.shareCard.rawValue)

    branchUniversalObject.addMetadataKey("availableSeats", value: card.peopleProperties.availableSeats.description)

    let coordinate = card.location.coordinate
    branchUniversalObject.addMetadataKey("latitude", value: coordinate.latitude.description)
    branchUniversalObject.addMetadataKey("longitude",value: coordinate.longitude.description)

    let linkProperties = BranchLinkProperties()
    linkProperties.feature = "sharing"
    linkProperties.addControlParam("$desktop_url", withValue: "http://www.appname.com")
    linkProperties.addControlParam("$ios_has_app_url", withValue: "appname://")
    linkProperties.addControlParam("$ios_url", withValue: "https://itunes.apple.com/app/idXXXXXXXXXXXXXXX")

    return (branchUniversalObject: branchUniversalObject, branchLinkProperties: linkProperties)
}

更新:我的目标是点击深度link时,如果安装了应用,则打开应用,如果没有,则打开应用商店 link.

更新 1: 我这样更改了我的代码,如果我只需单击 link,它就会打开 App Store,如果我使用 3D Touch,那么我可以选择在哪里打开这个link。如果安装了应用程序并单击 link 立即打开应用程序(或者至少在浏览器中有一个 link,但有一个打开应用程序的选项)和如果应用程序未安装,则单击 link,转到 App Store 应用程序页面。

let linkProperties = BranchLinkProperties()
        linkProperties.feature = "sharing"
        linkProperties.addControlParam("$desktop_url", withValue: "http://www.appname.com")
        linkProperties.addControlParam("$ios_has_app_url", withValue: "https://appname.app.link/")
        linkProperties.addControlParam("$ios_url", withValue: "itms-apps://itunes.apple.com/app/idXXXXXX")

I see that the browser instead of opening ios_url (App Store link), it tries to open ios_has_app_url. How can I fix it?

通过让 link 为:

"itms-apps://itunes.apple.com/app/idxxxxxxxxxx"

Alex 来自 Branch.io 这里:

好消息是这比您预期的要容易得多。不过,既然你做了这么完整的报告,我会把所有的细节都讲一遍,让你知道幕后发生了什么。

简短说明

要在安装时启动您的应用程序,您无需手动将自定义 URI 方案设置为 $ios_has_app_url 的值 — 分支和 iOS 通过设计为您实现此行为。

如果您的 links 没有启动您的应用程序,则您的通用 Links 配置可能有问题。我建议查看 this troubleshooting guide

详细说明

我们的 $ios_has_app_url 控制参数依赖于我们的服务器跟踪的布尔 has_app 值。 has_app 值在典型的实际使用中相当准确(足以在显示 OpenInstall 之间切换按钮例如,智能应用横幅上的标签),但它并非在所有情况下都是 100% 准确的。

这是 iOS 的限制:Apple 不允许网页查询设备上安装了哪些应用程序(出于明显的隐私原因),因此 Branch 必须依赖 cookie 匹配。这意味着如果我们无法匹配 cookie,或者最近没有看到用户,或者用户清除了他们的设备缓存,或者用户在 Branch 上次看到他们后卸载了应用程序,has_app 将是不正确的。当 has_app 值不正确时,$ios_has_app_url 行为也将是错误的。

但是,即使 Apple 不允许网页查询访问此数据,iOS 本身仍然可以对其进行操作。 Universal Links 正是这样做的——当用户打开 Universal Link(其中包括 Branch links,假设您已完成所有配置)时,如果安装了该应用程序,该应用程序将打开.如果没有安装,用户会被传送到link的URL。

$ios_has_app_url

的预期用途

Branch $ios_has_app_url 参数用于高级实现中非常具体的用例; 广大 我们的大多数合作伙伴从未使用过它。以下是您可能需要的潜在情况:

你有一个边缘案例 Universal Links are not supported,如果 Branch 知道他们安装了你的应用程序,你想将你的用户发送到 不同的 网页 而不是让他们选择打开它。显然这是一种罕见的情况,通常只与企业级应用程序相关。

调试has_app

如果您无法尝试调试 has_app 返回错误值的情况,您有几个选择:

  1. 如果您正在 true 并且想要 false,请在 Safari 中使用隐私浏览模式。这会阻止 Branch 进行 cookie 匹配,这意味着您将 总是 得到 false.
  2. 或者,执行以下步骤:
    1. 确保正在测试的应用有 setDebug enabled.
    2. 将 link 粘贴到带有智能横幅代码的页面到笔记中。
    3. 卸载应用程序。
    4. 设置 > 通用 > Safari > 清除历史记录和网站数据。
    5. 设置 > 通用 > Safari > 高级 > 网站数据 > 向左滑动并删除所有条目。
    6. 设置 > 通用 > 隐私 > 广告 > 重置广告标识符...
    7. 单击注释中的 link(来自第 1 步)。
    8. 横幅应始终显示 "Download"(如果不显示,那是因为清除网站数据不成功)。
    9. 点击下载。
    10. 运行 通过 Xcode 的应用程序(用于安装)。
    11. 在 Xcode 中停止应用程序,然后从 phone 中启动它。
    12. 再次单击“备忘录”中的 link - 该按钮现在应显示 "Open" 并打开应用程序。