使用Branch.io将数据从子域传递到应用程序的问题

时间:2017-11-30 16:46:40

标签: ios swift deep-linking branch.io ios-universal-links

我们有一个iOS应用程序并使用Branch SDK来实现邀请。我们在通用链接中作为参数传输的所有必需数据。 我们的问题是,当用户在设备上已安装应用程序时点击链接时,它可以正常工作,但是当用户必须从Testflight或AppStore之间安装应用程序时,它无法在随机情况下传递数据。它有时会起作用,有时却不起作用。同一个链接现在可以正常工作,但在几分钟后就失败了。在“失败”下,我的意思是参数不会传递给应用程序。

这是我们的配置:

我们为登台和制作环境设置了Info.plist文件,如文档中所述:

  • branch_key 包含一个包含实时和测试密钥的字典。
  • branch_app_domain 包含特定环境的自定义域(比如说它是暂存它是test.domain.com,生产它是domain.com)。
  • branch_universal_link_domains 是一个字符串数组 - 包含两个应用域 - 例如test.domain.com和domain.com。

所有这些字段都出现在两个环境的.plist文件中。

另外,我们设置了.entitlements文件,我们放置了相关的域。它包含6个值:

  • applinks:domain.com
  • applinks:test.domain.com
  • applinks:XXXX-alternate.test-app.link
  • applinks:XXXX.test-app.link
  • applinks:XXXX-alternate.app.link
  • applinks:XXXX.app.link

并将此文件添加到暂存和生产目标。

在我的AppDelegate中,我设置了这样的分支:

    Branch.setUseTestBranchKey(Configuration.branchTestKeyEnabled)
    let branch: Branch = Branch.getInstance()

    branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in
        if error == nil {
            print("params: %@", params as? [String: AnyObject] ?? {})
        } else {
            print(error)
        }
    })

哪里

Configuration.branchTestKeyEnabled 

适用于staging,false适用于生产。

发布后,我尝试引用这样的参数:

 let branch = Branch.getInstance()
 let params = branch?.getLatestReferringParamsSynchronous() as? [String : Any]
 // Do something with parameters

以下是验证脚本的报告: Report

我认为我的配置可能有问题,但我不明白为什么它的行为如此不一致。

1 个答案:

答案 0 :(得分:0)

布莱恩来自分公司。<​​/ p>

由于您收到的数据不一致,可能会出现竞争情况。我们建议您在此处从侦听器方法中读取深层链接参数:

branch.initSession(launchOptions: launchOptions, andRegisterDeepLinkHandler: {params, error in
    if error == nil {
        print("params: %@", params as? [String: AnyObject] ?? {})
    } else {
        print(error)
    }
})

如果无法做到这一点,我们还建议您拨打getLatestReferringParams(),而不是getLatestReferringParamsSynchronous()

有关详细信息,请访问:https://docs.branch.io/pages/apps/ios/#read-deep-link