Ошибка ветки Предупреждение. Инициализация сеанса уже произошла. (-118)

У меня есть пусковая установка Activity, которая настроена на получение глубоких намерений Branch.

Если в заднем стеке нет никаких Activity, onInitFinished(JSONObject, BranchError) выдает это BranchError, а jSONProject имеет значение null:

Предупреждение. Инициализация сеанса уже произошла. Чтобы принудительно запустить новый сеанс, установите для параметра intent extra, branch_force_new_session, значение true.

AndroidManifest.xml:

    <activity
        android:name="LauncherActivity"
        android:launchMode="singleTask">

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="myscheme" />
        </intent-filter>

        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />

            <data
                android:host="my.domain.com"
                android:scheme="https" />
        </intent-filter>
    </activity>

Мероприятия:

class LauncherActivity : Branch.BranchReferralInitListener {

    override fun onStart() {
        super.onStart()

        Branch.sessionBuilder(this).withCallback(this).withData(parseIntent().data).init()

        if (BuildConfig.DEBUG) {
            IntegrationValidator.validate(this)
        }
    }

    private fun parseIntent(): Intent {
        var newIntent = Intent()
        newIntent = newIntent.putExtra("branch_force_new_session", true)
        newIntent = newIntent.putExtra("branch", intent.dataString)
        return newIntent
    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        this.intent = intent

        Branch.sessionBuilder(this).withCallback(this).withData(parseIntent().data).reInit()
    }

    override fun onInitFinished(referringParams: JSONObject?, error: BranchError?) {
        if (error != null) {
            // Getting error only when app is not backgrounded
        } else if (referringParams != null) {
            // When app is backgrounded, it works
        }
    }
}

Когда получено намерение и приложение работает, все работает. Когда приложение запускается из-за намерения ветки, я получаю сообщение об ошибке, а параметр referringParams имеет значение null. Я тоже пробовал отложить инициализацию.

Любые идеи?


person tango whiskey double    schedule 02.09.2020    source источник
comment
Я вижу, что вы инициализируете SDK в своей DeepLinkActivity. Хотя в Manifest у вас есть LauncherActivity. Можете ли вы подтвердить, какое действие запускается через глубокую ссылку, а затем инициализировать SDK в этом действии?   -  person Kartik Shandilya    schedule 02.09.2020
comment
Спасибо, что указали на это, я изменил имя Activity при публикации, но не обновил класс Activity. Инициализация определенно выполняется в действии Launcher   -  person tango whiskey double    schedule 02.09.2020


Ответы (1)


Похоже, что эта проблема уже решена командой Branch. На данный момент исправления нет, но вы можете попробовать обходной путь, который они рекомендовали здесь.

if else (error.getErrorCode() === BranchError.ERR_BRANCH_ALREADY_INITIALIZED) {
  
branchReferringPramas_ = Branch.getLatestReferringParams();

}

person Justin    schedule 10.09.2020
comment
Это должно быть branchReferringPramas_ = Branch.getInstance (). GetLatestReferringParams () - person Pritesh Patel; 08.07.2021