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

  • 已启动主要 Activity 。在这里,我们可以单击深层链接。
  • 通过单击深层链接打开LinkActivity,uri是正确的,referringParams json不为空(确定)。但是...
  • 当我们重播步骤2时:uri是正确的,但是引用参数为空:“{}”;所有其他尝试的结果相同。

  • 仅当我们暂停该应用程序(例如,切换到最近的应用程序菜单)然后返回该应用程序时,深层链接才能按预期工作,但仅在第一次尝试时才起作用。 session 关闭可能存在一些问题(但是在当前版本的sdk中,它可以自行控制 session 关闭)
    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>
    



    更新:
    即使使用LinkActivity steel的 android:launchMode =“singleInstance” 也可以复制(我认为情况并非如此)。

    Udpate2:
    Bhardwaj提到通过getAutoInstance初始化Branch时无需调用initSession。但是在这种情况下如何从uri获得reparingParams?

    Update3:
    从Branch.checkIntentForSessionRestart文档中:



    所以,我想要的行为就是与此描述匹配。但是如何强制 session 重新启动?

    最佳答案

    您可以尝试如下所述:

    Branch.getAutoInstance(this) -> Branch.getAutoInstance(this, true)
    Branch.getInstance(context) -> Branch.getInstance()
    Do not call initSession when you have getAutoInstance()
    

    09-28 02:45