Branch.io initSession返回空的referParams json

Sin*_*ami 8 android branch.io

前提条件1.应用程序以LinkActivity开头,此时我们没有深层链接意图,没关系.

  1. 主要活动已启动.在那里,我们可以点击深层链接.
  2. 通过单击深层链接打开LinkActivity,uri是正确的,referParams json不为空(ok).但...
  3. 当我们重播第2步时:uri是正确的,但是reffering params是空的:"{}"; 所有其他尝试都具有相同的结果.

只有当我们暂停应用程序(例如切换到最近的应用程序菜单)然后返回到应用程序时 - 深层链接才能按预期工作,但只有在第一次尝试时才有效.可能是会话关闭的一些问题(但在当前版本的sdk中它自我控制会话关闭)

public class LinkActivity extends AppCompatActivity {

        private static final String TAG = LinkActivity.class.getSimpleName();

        @Override
        protected void onNewIntent(Intent intent) {
            setIntent(intent);
        }

        @Override
        protected void onStart() {
            super.onStart();

            Uri uri = getIntent().getData();

            Log.w(TAG, "uri: " + uri);

            Branch.getInstance().initSession(new Branch.BranchReferralInitListener() {
                @Override
                public void onInitFinished(JSONObject referringParams, BranchError error) {
                    Log.w(TAG, "json: " + referringParams);
                    startActivity(new Intent(LinkActivity.this, MainActivity.class));
                }
            }, uri, this);
        }
    }

    public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }

    public class BranchApplication extends Application {

        @Override
        public void onCreate() {
            super.onCreate();
            Branch.enableLogging();
            Branch.getAutoInstance(this);
        }
    }

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.test.myapp">

        <uses-permission android:name="android.permission.INTERNET"/>

        <application
            android:name=".BranchApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

            <activity android:name=".LinkActivity">

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

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>

                <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:host="myapp.link"
                        android:scheme="https" />
                </intent-filter>
            </activity>

            <activity android:name=".MainActivity"/>

            <meta-data
                android:name="io.branch.sdk.BranchKey"
                android:value="@string/branch_io_live_key" />

            <meta-data
                android:name="io.branch.sdk.BranchKey.test"
                android:value="@string/branch_io_test_key" />

            <meta-data
                android:name="io.branch.sdk.TestMode"
                android:value="false" />
        </application>
    </manifest>
Run Code Online (Sandbox Code Playgroud)

实施"io.branch.sdk.android:library:2.14.3"

更新: 即使使用android:launchMode ="singleInstance",LinkActivity钢也会重现(我不认为是这种情况).

Udpate2: Bhardwaj提到在我们通过getAutoInstance启动Branch时不需要调用initSession.但是在这种情况下如何从uri那里得到反击法呢?

Update3: 来自Branch.checkIntentForSessionRestart doc:

检查强制会话重启.如果传入的intent将branch_force_new_session设置为true,则重新启动Branch会话.这是为了支持在app已经在前台运行时打开深层链接路径.例如在前台app时单击推送通知.

所以,我希望的行为与此描述相符.但是如何强制会话重启?

cla*_*s94 0

这可能是由您的清单配置引起的。在您的<activity>标签中,您应该包含android:launchMode="singleTask". 请参阅我们文档的这一部分。这可以解释为什么您第一次收到参数,但在重新打开时没有收到它们。