Branch不会打开App Store链接

时间:2017-07-23 14:01:15

标签: ios swift deep-linking branch.io

我使用Branch创建深层链接。我添加了一个新的控制参数ios_has_app_url和ios_url。安装应用程序时单击深层链接,然后一切正常,但如果在设备上未安装应用程序时单击深层链接,则在启动期间,我看到浏览器而不是打开ios_url(App Store链接) ,它试图打开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)
}

更新:我的目标是,当点击深层链接时,如果安装了应用程序,则打开应用程序,如果没有,则打开应用商店链接。

更新1:我改变了我的代码,如果我点击链接就会打开App Store,如果我使用3D Touch,那么我可以选择打开此链接的位置。如果安装了应用程序并点击链接后立即打开应用程序(或者至少是浏览器中的链接,但是有打开应用程序的选项)并且如果未安装应用程序,则可以这样做吗?单击该链接,转到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")

2 个答案:

答案 0 :(得分:1)

来自Branch.io的Alex:

好消息是这比你期望的要容易得多。但是,由于您完成了这样一个完整的报告,我将详细介绍所有细节,以便您确切了解幕后发生的事情。

简短说明

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

如果您的链接未启动您的应用,则可能是您的Universal Links配置存在问题。我建议您查看this troubleshooting guide

长解释

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

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

然而,即使Apple不允许网页查询访问此数据,iOS本身仍然可以对其进行操作。 Universal Links正是这样做的 - 当用户打开通用链接(包括分支链接,假设您已完成所有配置)时,如果已安装,应用程序将打开。如果未安装,则将用户发送到链接的URL。

$ios_has_app_url

的预期用途

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

您有一个Universal Links are not supported的边缘情况,并且如果分支知道他们已经安装了您的应用而不是向他们提供,那么您希望将用户发送到不同的网页打开它的选项。显然这是一种罕见的情况,通常只与企业级应用程序相关。

调试$ios_has_app_url

如果你试图调试has_app返回错误值的情况,你有几个选择:

  1. 如果您收到has_app并且想要true,请在Safari中使用隐私浏览模式。这可以防止Branch进行Cookie匹配,这意味着您将始终获取false
  2. 或者,请按以下步骤操作:
    1. 确保正在测试的应用具有setDebug enabled
    2. 将带有智能横幅代码的网页链接粘贴到Notes中。
    3. 卸载该应用。
    4. 设置>一般> Safari>清除历史记录和网站数据。
    5. 设置>一般> Safari>高级>网站数据>向左滑动并删除每个条目。
    6. 设置>一般>隐私>广告>重置广告标识符...
    7. 单击Notes中的链接(从步骤1开始)。
    8. 横幅应始终显示“下载”(如果没有,则是因为清除网站数据不成功)。
    9. 点击下载。
    10. 通过Xcode运行应用程序(用于安装)。
    11. 在Xcode中停止应用,然后从手机启动它。
    12. 再次单击Notes中的链接 - 该按钮现在应显示“打开”并打开应用程序。

答案 1 :(得分:0)

  

我看到浏览器而不是打开ios_url(App Store链接),它   试图打开ios_has_app_url。我该如何解决?

让链接成为:

"itms-apps://itunes.apple.com/app/idxxxxxxxxxx"
相关问题