Android Branch.io returns“;“会话初始化已发生”;错误消息

Android Branch.io returns“;“会话初始化已发生”;错误消息,android,android-layout,branch.io,Android,Android Layout,Branch.io,我检查了git上报告的问题,很多人都报告了,但那个里并没有合适的解决方案 如果我的应用程序被终止,并且内存中不存在应用程序的进程,那么一切都可以正常工作 但我的用例是从推送通知获取分支链接 我还将splashActivity设置为SingleTask android:launchMode=“singleTask” 我收到以下错误消息 分支机构:警告。会话初始化已发生。强迫 新会话,将intent extra“分支强制新会话”设置为true 下面是我的代码,它检查分支是否有任何数据,并将详细信息传

我检查了git上报告的问题,很多人都报告了,但那个里并没有合适的解决方案

如果我的应用程序被终止,并且内存中不存在应用程序的进程,那么一切都可以正常工作

但我的用例是从推送通知获取分支链接

我还将splashActivity设置为
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()
}