Android Branch.io returns“;“会话初始化已发生”;错误消息
我检查了git上报告的问题,很多人都报告了,但那个里并没有合适的解决方案 如果我的应用程序被终止,并且内存中不存在应用程序的进程,那么一切都可以正常工作 但我的用例是从推送通知获取分支链接 我还将splashActivity设置为Android Branch.io returns“;“会话初始化已发生”;错误消息,android,android-layout,branch.io,Android,Android Layout,Branch.io,我检查了git上报告的问题,很多人都报告了,但那个里并没有合适的解决方案 如果我的应用程序被终止,并且内存中不存在应用程序的进程,那么一切都可以正常工作 但我的用例是从推送通知获取分支链接 我还将splashActivity设置为SingleTask android:launchMode=“singleTask” 我收到以下错误消息 分支机构:警告。会话初始化已发生。强迫 新会话,将intent extra“分支强制新会话”设置为true 下面是我的代码,它检查分支是否有任何数据,并将详细信息传
SingleTask
android:launchMode=“singleTask”
我收到以下错误消息
分支机构:警告。会话初始化已发生。强迫
新会话,将intent extra“分支强制新会话”设置为true
下面是我的代码,它检查分支是否有任何数据,并将详细信息传递给HomeActivity,HomeActivity然后根据id加载特定的新闻项
我不知道在哪里传递此信息。如果我从Splash意图传递它,它就是不起作用
我正在使用branchSDK 5.0.1
class SplashActivity : AppCompatActivity(), , Branch.BranchReferralInitListener{
override fun onStart() {
super.onStart()
Branch.sessionBuilder(this).withCallback(this).withData(if (intent != null) intent.data else null).init()
Log.d("BRANCH_SDK_00_", "onStart")
}
override fun onInitFinished(referringParams: JSONObject?, error: BranchError?) {
if (error == null) {
if(referringParams?.has("news") ==true){
isNewsItemReceivedFromBranch = true
branchAggregatedFeedItemId = referringParams.getInt("news")
//StartHomeActivity()
}
initAppStartupProcesses()
} else {
Log.e("BRANCH_SDK", error.message)
initAppStartupProcesses()
}
}
}
清单
<activity
android:name=".activities.SplashActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Branch URI Scheme -->
<intent-filter>
<data android:scheme="aaa" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<!-- Branch URI Scheme -->
<!-- Branch App Links (optional) -->
<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="aaa.aa.aa" />
<data android:scheme="https" android:host="aaa.aaaa" />
</intent-filter>
</activity>
这里有一个分支-
当应用程序已经在前台并且用户试图通过deeplink打开应用程序时,就会发生这种情况
这可以通过更新他们的oNewIntent覆盖方法来避免,如下所示-
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
// if activity is in foreground (or in backstack but partially visible) launching the same
// activity will skip onStart, handle this case with reInitSession
private Branch.BranchUniversalReferralInitListener branchReferralInitListener = new Branch.BranchUniversalReferralInitListener() {
@Override public void onInitFinished(@Nullable BranchUniversalObject branchUniversalObject, @Nullable LinkProperties linkProperties, @Nullable BranchError error) {
// do something with branchUniversalObject/linkProperties..
}
}
如果这不起作用,您还可以尝试使用Branch.getInstance().getLateStrefiringParams()
,而不是在SDK的最新版本中读取在Branch.init
中接收的参数
关于SDK的未来开发,我将不断更新这篇文章。如果在应用程序处于前台时发生这种情况,请设置“分支力量新会话”
请同时共享Manifest.xml文件。如果使用
Branch.getInstance().getLateStrefringParams()
而不是从init读取参数,那么问题是否仍然存在callback@NovoLucas:我已添加清单文件。请查收。关于Branch.getInstance().getLateStrefiringParams()
,我是否需要在Branch.sessionBuilder
之前检查此问题?这应该在sessionBuilder之后进行。您可以为Branch 5.0更新此答案吗?
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
this.intent = intent
intent?.putExtra("branch_force_new_session", true)
Branch.sessionBuilder(this).withCallback(branchListener).reInit()
}