Branch.io возвращает сообщение об ошибке «Инициализация сеанса уже произошла» - PullRequest
1 голос
/ 14 апреля 2020

Я проверил об этой проблеме, о которой сообщалось git, многие сообщали об этом, но там не было подходящего решения.

Все работает нормально, если приложение закрыто и в памяти нет приложения.

Но мой вариант использования - получить ссылку на ветвь из Pu sh Уведомление.

Я также установил splashActivity как SingleTask

android: launchMode = "singleTask"

Я получаю следующее сообщение об ошибке.

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

Следующий мой код проверяет, есть ли в нем какие-либо данные из ветви, и передает подробности в HomeActivity, HomeActivity затем загружает указанную c новость на основе идентификатора.

Я не знаю, куда передать branch_force_new_session эту информацию. Если я передаю его из Spla sh 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>

1 Ответ

1 голос
/ 20 апреля 2020

A Branchster здесь -

Это происходит, когда приложение уже находится на переднем плане, и пользователь пытается открыть приложение через глубокую ссылку.

Этого можно избежать, обновив метод переопределения 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() вместо чтения параметров, полученных в Branch.init в последней версии SDK.

Я буду держать этот пост обновленным относительно будущего развития SDK.

...