Branch.io 返回“会话初始化已经发生”错误消息

Posted

技术标签:

【中文标题】Branch.io 返回“会话初始化已经发生”错误消息【英文标题】:Branch.io returns " Session initialization already happened" error message 【发布时间】:2020-04-14 18:23:59 【问题描述】:

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

如果我的应用程序被杀死并且内存中不存在应用程序进程,一切正常。

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

我还将 splashActivity 设置为SingleTask

android:launchMode="singleTask"

我收到以下错误消息。

BRANCH_SDK:警告。会话初始化已经发生。强迫 一个新会话,将 Intent extra “branch_force_new_session”设置为 true。

以下是我的代码,它检查是否有任何来自分支的数据,并将详细信息传递给 HomeActivity,HomeActivity 然后根据 id 加载特定的新闻项目。

我不知道在哪里传递branch_force_new_session 这个信息。如果我从 Splash Intent 传递它,它就是行不通的。

我正在使用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>

【问题讨论】:

请同时分享您的 Manifest.xml 文件。如果您使用 Branch.getInstance().getLatestReferringParams() 而不是从初始化回调中读取参数,问题是否仍然存在 @NovoLucas :我添加了 Manifest 文件。请检查。关于Branch.getInstance().getLatestReferringParams(),我需要在Branch.sessionBuilder之前检查吗? 这应该在 sessionBuilder 之后 【参考方案1】:

这里有个分店-

当应用已经在前台并且用户尝试通过深层链接打开应用时会发生这种情况。

这可以通过更新他们的 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().getLatestReferringParams(),而不是在最新版本的 SDK 中读取Branch.init 中收到的参数。

关于 SDK 的未来发展,我会不断更新这篇文章。

【讨论】:

你能更新这个分支 5.0 的答案吗?【参考方案2】:

如果应用在前台设置“branch_force_new_session”时发生这种情况

override fun onNewIntent(intent: Intent) 
   super.onNewIntent(intent)
   this.intent = intent
   intent?.putExtra("branch_force_new_session", true)
   Branch.sessionBuilder(this).withCallback(branchListener).reInit()

【讨论】:

【参考方案3】:

同样的事情发生在我身上,似乎没有任何帮助,然后我看到分支教程非常混乱 - 你需要在应用程序的 onCreate 上调用 Branch.getAutoInstance(this),而不是 Splash/其他分支接收活动。

【讨论】:

你找到解决办法了吗?

以上是关于Branch.io 返回“会话初始化已经发生”错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Branch.io initSession 返回空的引用参数 json

在branch.io中的redeemRewards函数调用时每次显示错误消息

iOS:使用 Branch.io 处理 noInternet 案例

在 Branch.io 中,如何在 facebook 中发布带有查询参数的深层链接

Branch.io 事件记录

Branch.io 通过安装传递自定义数据