分支深度链接无法打开应用程序

27
我一直在尝试(不成功地)使用Branch将深度链接实现到我们的iOS应用程序中。Branch URL 直接重定向到App Store,从未尝试打开应用程序。我一定是忽略了某些东西。 我所做的:
  1. 包含Branch SDK (CocoaPods),将branch_key添加到应用程序的plist中

  2. 在应用程序的plist中添加URL Scheme到URL Types

  3. 在项目和开发者控制台的App ID中启用关联域名(Associated Domains)

  4. 确保授权文件包含在构建中。

  5. 在AppDelegate中注册深度链接处理程序

仪表板:设置->链接设置:

  1. 勾选“始终尝试打开应用程序”

  2. 将“IOS URI Scheme”设置为应用程序的自定义URI scheme。

  3. 勾选“启用通用链接(Enable Universal Links)”

  4. Bundle标识符和Apple App前缀都正确设置。

    在Branch仪表板下,“营销”选项卡中,我创建了一个单一链接。我将此链接发送到我的电子邮件,并在设备上(Mail.app)打开它。Safari打开,然后打开App Store,好像应用程序未安装。

AppDelegate方法:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    let branch: Branch = Branch.getInstance()
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in
        if (error == nil) {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            // ... insert custom logic here ...
            NSLog("params: %@", params.description)
        }
    })
    return true
}

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    // pass the url to the handle deep link call
    
    return Branch.getInstance().continueUserActivity(userActivity)
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    // pass the url to the handle deep link call
    Branch.getInstance().handleDeepLink(url);
    
    // do other deep link routing for the Facebook SDK, Pinterest SDK, etc
    return true
}

我是否忽略了某个配置步骤?这是因为应用程序是通过Xcode调试安装而不是通过应用商店安装吗?我期望看到应用程序委托方法被调用,但它们没有被调用。


我在AppDelegate类中的以下代码行中遇到了BAD EXCESS错误: let branch: Branch = Branch.getInstance() 您能否给出建议?我也在使用Swift。 - Anilkumar iOS - ReactNative
@Nick:你找到解决方案了吗? - Meet Doshi
4个回答

14

看起来应用程序必须通过App Store/Test Flight/Ad Hoc安装,否则该应用程序将不被视为已安装。

我使用Ad Hoc分发将应用程序安装到我的设备上,并且一切都正常工作。


我目前也遇到了同样的问题。它们在大约2.5个月前还能正常工作,现在却立刻跳转到Safari。你所说的“临时安装”是什么意思?如果你正在通过Xcode运行设备,它们将无法工作。 - Phil Andrews
@spacemonkey,我发现我无法在使用XCode调试模式运行应用程序时测试深层链接。该应用程序需要通过Ad Hoc部署或通过App Store安装到设备上。我的假设是,当通过XCode调试部署时,iOS没有报告应用程序“已安装”。在这里了解Ad Hoc分发:https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/TestingYouriOSApp/TestingYouriOSApp.html - Nick
感谢您的帮助。我可以确认,我使用Fabric进行的分发以调试深层链接,一切都在那些已经按照此方式安装的设备上正常运行。 - Phil Andrews
2
@Nick:我的动态和市场链接在一个月前几乎都能正常工作,但是从昨天开始这些链接会将我重定向到Safari,然后跳转到应用商店而不是我的应用程序。我已经三次检查了所有设置,并且在从Safari移动到我的应用程序后,我会通过branch io方法获得回调参数。 - nikhil84
5
来自 Branch.io 的 Alex:这 不是 准确的。当应用程序通过 Xcode 安装时,Branch 链接可以正常工作——这肯定是由于其他配置问题造成的。 - Alex Bauer
显示剩余7条评论

12
对我而言,即使我安装的是不带Adhoc分发的有线连接,该链接也有效。但有一天它突然无法使用了。那是因为我点击了应用内部的bnc前向链接。
修复方法很简单——长按链接,会出现一个选项“在应用中打开”。点击此选项,链接将由应用处理。从下一次开始,链接将像预期的那样工作,即使没有长按,因为Safari记住了这个默认行为。

@kdeo,你有没有集成Swift?如果是这样,我需要一些帮助。我在Swift中尝试了以下代码,但是其中的方法无法执行。 let branch: Branch = Branch.getInstance() branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in if (error == nil) { // params是与用户点击的链接相关联的深度链接参数->重定向到此应用程序的参数 NSLog("params: %@", params.description) } }) - Anilkumar iOS - ReactNative

2
我有同样的问题-这里的一些答案已经过时了,所以我会尝试提供更新:
解决方法很简单-只需长按链接。一个选项显示“在应用程序中打开”。
我认为这在iOS 11中消失了,所以除非你在iOS 10中进行测试,否则这不是一个选项。
似乎必须通过App Store/Test Flight/Ad Hoc安装应用程序,否则应用程序将不被视为已安装。
正如Alex在评论中指出的那样,这是不准确的。当应用程序通过Xcode安装时,Branch链接可以正常工作。
对我来说,问题是我的设备上的某种缓存问题。我有多个方案Debug&Release,每个方案都有自己的分支密钥和链接。它们以某种方式混淆了,链接在一个方案中无法打开。我能够通过强制重启设备来解决这个问题。

那正是我的问题。重新启动设备并从Xcode重新安装应用程序解决了这个问题!谢谢! - Serzhas

1
我也遇到了同样的问题,但我的解决方案与你的不同。
注意:我们可以在调试模式下打开应用程序(正如上面评论部分中Alex Bauer所指出的那样)。
在.plist文件中,我添加了两个不同的键,一个是“live”,另一个是“test”(同时),以及上述配置设置。
我使用的深度链接域名是。 我向Branch Io支持团队发送了电子邮件,然后得到以下回复'
你遇到问题的原因是你仍在使用我们的传统bnc.lt链接域。这个链接域在过去一年中已经逐渐被淘汰。开发和功能已经停止了相当长的时间,以支持我们的新链接域(app.link)。 为了解决你的问题并使你的AASA验证器正常工作,你需要在Branch Dashboard (https://dashboard.branch.io/settings/link)上将你的链接域从bnc.lt更改为app.link。一旦你进行了这个更改,你将需要更新你的应用程序,接受新的app.link链接域以及旧的bnc.lt链接域。https://gist.github.com/ethanneff/a2a70d1b3518c638701c28b1bd374e80。 请访问上面的链接,它非常有帮助。 希望它能解决你的问题,祝你使用Branch愉快 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接