Android Branch.io和即时应用程序
我有一个应用程序正在使用Branch.io,我正在更新它以支持即时应用程序。此更改的一部分将需要使用应用程序链接从应用程序的一个部分导航到另一个部分 我正在打开的活动被配置为使用Branch.io(例如,在中使用说明),并在其Android Branch.io和即时应用程序,android,deep-linking,branch.io,android-instant-apps,Android,Deep Linking,Branch.io,Android Instant Apps,我有一个应用程序正在使用Branch.io,我正在更新它以支持即时应用程序。此更改的一部分将需要使用应用程序链接从应用程序的一个部分导航到另一个部分 我正在打开的活动被配置为使用Branch.io(例如,在中使用说明),并在其onStart()方法中包含以下内容。但是,我没有看到我在refereringparams的深层链接中包含的参数 Branch.getInstance().initSession(new Branch.BranchReferralInitListener() { @
onStart()方法中包含以下内容。但是,我没有看到我在refereringparams
的深层链接中包含的参数
Branch.getInstance().initSession(new Branch.BranchReferralInitListener() {
@Override
public void onInitFinished(JSONObject referringParams, BranchError error) {
Log.d("Branch", "onInitFinished() with deep link data: " + referringParams);
}
});
我需要从Android代码中以特定的方式触发分支链接的打开吗
顺便说一句,上面的refereringparams
确实显示+单击的分支链接为false
更新
我只是想澄清几件事。例如,我尝试使用app deep link从ActivityA
启动ActivityB
<代码>活动b
包括
,如中所述。在ActivityA
中,我目前正试图打开/创建Branch.io链接,如下所示(我也直接创建了链接,例如在android即时应用程序中使用的链接,但这不被视为“分支链接”)
HashMap metadata=newhashmap();
metadata.put(PARAM,PARAM);
BranchUniversalObject BranchUniversalObject=新建BranchUniversalObject().addContentMetadata(元数据);
LinkProperties LinkProperties=新的LinkProperties();
branchUniversalObject.generateShortUrl(上下文,链接属性,(url,错误)->{
如果(错误==null){
Intent Intent=newintent(Intent.ACTION_视图,Uri.parse(url));
背景。开始触觉(意图);
}
});
如果我试图直接在设备上打开生成的url(通过generateShortUrl
),则会启动ActivityB
,我会看到initSession
回调中包含的参数I。如果我尝试使用上面的代码打开它(在ActivityA
和ActivityB
之间导航,那么ActivityB
会启动,但不会获取参数(并且+单击的分支链接
是false
)要使用即时应用支持的Android应用配置Branch SDK,您可以按照以下步骤操作:
1.初始化分支SDK
在应用程序类的onCreate()方法中初始化Branch SDK。如果您计划在安装Android即时应用程序后从Android即时应用程序深度链接到完整的Android应用程序,则需要添加行EnablePlayStoreReferer。这会增加初始化延迟,以等待Google Play Referer,这可能需要长达一秒钟的时间
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.添加您的分支密钥并注册安装推荐人
即时应用可能会比较混乱,因为有许多不同的清单,但您希望找到包含应用程序标记的清单。请确保在此处定义了应用程序类名,然后在application元素内指定分支键
<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>
4.检索分支深度链接数据
在配置为通过单击链接打开的活动中添加分支初始化会话,以接收深度链接参数。这将从引用链接返回深度链接数据
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.配置从即时应用程序到完整应用程序的深度链接
要将刚进入即时应用程序的用户转换为完整的本机应用程序,Branch SDK提供了检查应用程序类型和完整应用程序转换的方便方法。这消除了对Google IA support SDK(“com.Google.android.instantapp”)的依赖。以下是一些方法:
Branch.isInstantApp()
这个方便的方法检查当前运行的应用程序版本是即时应用程序还是完整的Android应用程序
Branch.showInstallPrompt()
此方法显示完整Android应用程序的安装提示,允许您通过安装过程将Branch引用的深层数据传递给完整应用程序。Sojan from Branch here
如果您试图从另一个即时应用程序深入链接到新功能,apk分支现在不支持此功能
如果您试图从已安装应用程序的另一个功能中的活动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);
希望这有帮助当从应用程序的一个部分导航到另一个部分时,打开Branch.io应用程序链接的建议方式是什么?我想上面是直接从中获取的?如上所述,我已经按照这些说明进行了操作。@JohnO'Reilly您是否仍然得到+单击的分支链接:false。另外,您是否在sta中获得链接参数标准应用程序是否正确?@JohnO'Reilly您需要在应用程序标记中添加应用程序链接意图筛选器,而不是活动标记。据我所知,如果您的即时应用程序配置设置正确,则可以使用initSession()在ActivityB中,当您从包含ActivityA的instantApp路由时,请正确读取链接参数。我在说明中注意到了这一点,但认为这是一个错误。这不是
的有效位置(请参阅)事实上,Branch.io instant apps示例应用程序不使用此方法。键不匹配可能会导致+单击的分支链接
参数返回false
。请再次检查您是否设置了正确的测试/实时分支键(请参阅)。还要确保分支链接和密钥属于同一个分支应用程序。是否应该使用Branch.io密钥在打开应用程序链接的代码中播放?如果是,这是否意味着我们需要一些分支特定的代码来触发打开链接?要接收深链接数据,您需要注册一个深链接路由器函数(覆盖onNewIntent()
在调用initSession
)的活动中。然后通过调用branch.getLatestReferringParams
B检索会话参数
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);
}
});
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("yourBranchLink"));
intent.putExtra("branch","yourBranchLink");
intent.putExtra("branch_force_new_session",true);