gpt4 book ai didi

android - Branch.io initSession 返回空的 referringParams json

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:17 25 4
gpt4 key购买 nike

先决条件1. App以LinkActivity开始,此时我们没有深层链接 Intent ,没关系。

  1. 主要 Activity 已启动。在那里我们可以点击深层链接。
  2. 通过点击深层链接打开 LinkActivity,uri 正确,referringParams json 不为空 (ok)。但是……
  3. 当我们重放第 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>

implementation "io.branch.sdk.android:library:2.14.3"

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

更新2:Bhardwaj 提到当我们通过 getAutoInstance 初始化 Branch 时不需要调用 initSession。但是在那种情况下如何从 uri 获取 refferingParams 呢?

更新 3:来自 Branch.checkIntentForSessionRestart 文档:

Check for forced session restart. The Branch session is restarted if the incoming intent has branch_force_new_session set to true. This is for supporting opening a deep link path while app is already running in the foreground. Such as clicking push notification while app in foreground.

因此,我想要的行为与此描述相符。但是如何强制 session 重启呢?

最佳答案

您可以尝试如下所述:-

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

关于android - Branch.io initSession 返回空的 referringParams json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48325339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com