我使用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")
答案 0 :(得分:1)
好消息是这比你期望的要容易得多。但是,由于您完成了这样一个完整的报告,我将详细介绍所有细节,以便您确切了解幕后发生的事情。
要在安装应用时启动应用,您无需手动将自定义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
返回错误值的情况,你有几个选择:
has_app
并且想要true
,请在Safari中使用隐私浏览模式。这可以防止Branch进行Cookie匹配,这意味着您将始终获取false
。答案 1 :(得分:0)
我看到浏览器而不是打开ios_url(App Store链接),它 试图打开ios_has_app_url。我该如何解决?
让链接成为:
"itms-apps://itunes.apple.com/app/idxxxxxxxxxx"