Branch.io和Instant Apps

时间:2017-10-07 08:57:35

标签: android deep-linking branch.io android-instant-apps

我有一个使用Branch.io的应用,我正在更新它以支持Instant Apps。此更改的一部分将需要使用应用程序链接从应用程序的一个部分导航到另一个部分。

我正在打开的活动配置为使用Branch.io(例如,使用https://dev.branch.io/marketing-channels/android-instant-apps/guide/中的说明),并在其onStart()方法中包含以下内容。但是我没有看到我在referringParams中的深层链接中包含的参数。

Branch.getInstance().initSession(new Branch.BranchReferralInitListener() {
    @Override
    public void onInitFinished(JSONObject referringParams, BranchError error) {
        Log.d("Branch", "onInitFinished() with deep link data: " + referringParams);
    }
});

我是否需要从Android代码中以特定方式触发分支链接的打开才能生效?

上面的BTW referringParams确实显示+clicked_branch_linkfalse

更新

只是为了澄清一些事情。我正在尝试使用应用程序深层链接从ActivityB启动ActivityAActivityB包括<intent-filter>,例如https://dev.branch.io/marketing-channels/android-instant-apps/guide/中所述。在ActivityA我正在尝试按如下方式打开/创建Branch.io链接(也已直接形成链接,例如在android-instant-apps示例中使用,但这不被视为“分支链接” “)

    HashMap<String, String> metadata = new HashMap<>();
    metadata.put(PARAM, param);

    BranchUniversalObject branchUniversalObject = new BranchUniversalObject().addContentMetadata(metadata);
    LinkProperties linkProperties = new LinkProperties();
    branchUniversalObject.generateShortUrl(context, linkProperties, (url, error) -> {
        if (error == null) {
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            context.startActivity(intent);
        }
    });

如果我尝试直接在设备上打开生成的网址(generateShortUrl)(例如点击链接),则会启动ActivityB,我会看到initSession中包含的参数打回来。如果我尝试使用上面的代码打开它(在ActivityAActivityB之间导航,则会ActivityB启动,但不会获得参数(而+clicked_branch_link是{{1} })

2 个答案:

答案 0 :(得分:1)

Sojan来自分公司 如果您尝试深入链接到另一个即时应用的新功能,则不幸的是,Branch现在不支持此功能。

如果您尝试在已安装应用中的其他功能的活动A的新功能中打开活动B时获得深层链接参数,则可以通过以下方式实现。

ActivityA.java

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("yourBranchLink"));
intent.putExtra("branch","yourBranchLink");
intent.putExtra("branch_force_new_session",true);

希望这有帮助

答案 1 :(得分:0)

要使用支持Instant App的Android应用配置Branch SDK,您可以按照以下步骤操作:

<强> 1。初始化Branch SDK 在Application类的onCreate()方法中初始化Branch SDK。如果您计划在安装后从Android Instant App深层链接到完整的Android应用,则需要添加行enablePlayStoreReferrer。这会使初始化延迟等待Google Play推荐人,这可能需要一秒钟。

public void onCreate() {
  super.onCreate();
  // This is needed to deferred deep link from an Android Instant App to a full app
  // It tells the Branch initialization to wait for the Google Play Referrer before proceeding.
  Branch.enablePlayStoreReferrer(1000L);

  // Initialize the Branch SDK
  Branch.getAutoInstance(this);
}

<强> 2。添加分支键并注册Install Referrer

Instant Apps可能相当混乱,因为有许多不同的清单,但您希望找到包含应用程序标记的清单。确保在此处定义了Application类名,然后在application元素中指定Branch键。

<application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:supportsRtl="true"
        android:name=".MyApplication">

<!-- Set to true to use Branch_Test_Key -->
  <meta-data android:name="io.branch.sdk.TestMode" android:value="false" />
  <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_app_live_key" />
  <meta-data android:name="io.branch.sdk.BranchKey.test" android:value="key_test_app_test_key" />

  <receiver android:name="io.branch.referral.InstallListener" android:exported="true">
    <intent-filter>
       <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
  </receiver>

</application>

第3。将分支链接配置为Android App Links

假设您已为Android应用配置了针对Android应用链接的分支,则下一步是在应用标记中添加针对应用链接支持的意图过滤器。请务必使用您的链接域替换xxxx。 (如果您尚未将完整原生应用配置为使用分支机构作为Android应用链接,则可以按照herehere提及的步骤进行操作。)

<application
  ......

  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" android:host="xxxx.app.link" />
      <data android:scheme="https" android:host="xxxx-alternate.app.link" />
  </intent-filter>

</application>

<强> 4。检索分支深层链接数据

在配置为从链接点击打开的活动中添加分支initSession,以便接收深层链接参数。这将从引用链接返回深层链接数据。

protected void onStart() {
  super.onStart();
  Branch.getInstance().initSession(new Branch.BranchReferralInitListener() {
    @Override
    public void onInitFinished(JSONObject referringParams, BranchError error) {
      Log.d("Branch","onInitFinished() with deep link data: " + referringParams);
    }
  });
}

<强> 5。配置从即时应用程序到完整应用程序的深层链接

要将刚抵达Instant App的用户转换为完整的原生应用,Branch SDK提供了检查应用类型和完整应用转换的便捷方法。这消除了对Google IA支持SDK的依赖性(&#39; com.google.android.instantapp&#39;)。以下是一些方法:

Branch.isInstantApp()

此便捷方法会检查当前运行的应用版本是Instant App还是Full Android App

Branch.showInstallPrompt()

此方法显示完整Android应用的安装提示,允许您通过安装过程轻松地将分支引导深度数据传递给完整应用。