代码之家  ›  专栏  ›  技术社区  ›  Alexander Khitev

分支未打开应用商店链接

  •  1
  • Alexander Khitev  · 技术社区  · 9 年前

    我使用 Branch

    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: 我这样修改了代码,只要点击链接,它就会打开应用商店,如果我使用3D Touch,那么我可以选择在哪里打开这个链接。如果安装了应用程序并单击链接立即打开应用程序(或者至少是浏览器中的一个链接,但有打开应用程序的选项),并且如果未安装应用程序,则单击链接,转到App Store App页面,是否可以这样做。

    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 回复  |  直到 9 年前
        1
  •  1
  •   Alex Bauer    9 年前

    分支机构的Alex。io此处:

    好消息是,这比你预期的要容易得多。不过,既然你做了这么完整的报告,我会详细介绍所有细节,让你确切地知道幕后发生了什么。

    简短的解释

    要在安装应用程序时启动应用程序, $ios_has_app_url Branch和iOS通过设计为您实现此行为。

    如果你的链接没有启动你的应用程序,你的通用链接配置可能有问题。我建议复习 this troubleshooting guide .

    详细解释

    我们的 $ios\u has\u app\u url 控制参数依赖于布尔值 has_app 我们的服务器跟踪的价值。这个 在典型的实际应用中,数值相当准确(足以在显示 打开 安装 例如,智能应用横幅上的标签),但它是 在所有情况下都100%准确。

    这是iOS的一个限制:苹果不允许网页查询设备上安装了哪些应用程序(出于明显的隐私原因),因此分支必须依赖cookie匹配。这意味着,如果我们无法匹配cookie,或者最近没有看到用户,或者用户清除了他们的设备缓存,或者用户自Branch上次看到他们以来卸载了应用程序,则 has\u应用程序 has\u应用程序 值不正确,则 $ios\u has\u app\u url

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

    预期用途 $ios\u has\u app\u url

    $ios\u has\u app\u url 巨大的 我们的大多数合作伙伴从未使用过它。以下是您可能需要的潜在情况:

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

    has\u应用程序

    has\u应用程序 如果返回的值错误,则有两个选项:

    1. true false ,在Safari中使用私人浏览模式。这会阻止Branch进行cookie匹配,这意味着您将 总是 收到
    2. 或者,遵循以下步骤:
      1. setDebug enabled .
      2. 将指向带有智能横幅代码的页面的链接粘贴到便笺中。
      3. 卸载应用程序。
      4. 设置(>);概述>Safari>清除历史记录和网站数据。
      5. 设置(>);概述>Safari>高级>网站数据>向左滑动并删除每个条目。
      6. 设置(>);概述>隐私>广告>重置广告标识符。。。
      7. 横幅应始终显示“下载”(如果不显示,则是因为清除网站数据失败)。
      8. 点击下载。
      9. 在Xcode中停止应用程序,然后从手机上启动。
        2
  •  0
  •   Ahmad F    9 年前

    我看到浏览器没有打开ios_url(应用商店链接),而是 尝试打开ios\u has\u app\u url。我该怎么修?

    通过让链接:

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