Branch.io initSession 返回空的引用参数 json
Posted
技术标签:
【中文标题】Branch.io initSession 返回空的引用参数 json【英文标题】:Branch.io initSession returns empty referringParams json 【发布时间】:2018-01-18 15:55:15 【问题描述】:先决条件 1. App以LinkActivity启动,此时我们没有deep link intent,没关系。
-
主要活动已启动。在那里我们可以点击深层链接。
通过点击深层链接打开LinkActivity,uri是正确的,referringParams json不为空(ok)。但是...
当我们重播第 2 步时:uri 正确,但引用参数为空:“”;所有其他尝试都具有相同的结果。
仅当我们暂停应用程序(例如切换到最近的应用程序菜单)然后返回应用程序时 - 深层链接按预期工作,但仅在第一次尝试时。会话关闭可能存在一些问题(但在当前版本的 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>
实现“io.branch.sdk.android:library:2.14.3”
更新: 即使使用 android:launchMode="singleInstance" 进行 LinkActivity 钢再现(我认为不是这种情况)。
更新2: Bhardwaj 提到我们通过 getAutoInstance 初始化 Branch 时不需要调用 initSession。但是在这种情况下如何从 uri 中获取 refferingParams 呢?
更新3: 来自 Branch.checkIntentForSessionRestart 文档:
检查强制会话重启。分支会话重新启动,如果 传入意图将 branch_force_new_session 设置为 true。这是 用于支持在应用程序已经运行时打开深层链接路径 在前台。例如在应用程序中单击推送通知 前景。
所以,我想要的行为符合这个描述。但是如何强制会话重启?
【问题讨论】:
【参考方案1】:你可以尝试如下:-
Branch.getAutoInstance(this) -> Branch.getAutoInstance(this, true)
Branch.getInstance(context) -> Branch.getInstance()
Do not call initSession when you have getAutoInstance()
【讨论】:
如何在没有initSession的情况下检索分支链接数据(referringParams)?【参考方案2】: if(!initiatedBranchDeepLinks)
// Configure Branch.io
initiatedBranchDeepLinks = true;
Branch branch = Branch.getInstance();
branch.initSession(new Branch.BranchReferralInitListener()
@Override
public void onInitFinished(JSONObject referringParams, BranchError error)
if (error == null)
// params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
// params will be empty if no data found
// ... insert custom logic here ...
String message = "Branch.io onInitFinished. Params: " + referringParams.toString();
Log.d(TAG, message);
else
Log.i(TAG, error.getMessage());
, this.getIntent().getData(), this);
这是 Branch Test Bed 应用程序: https://github.com/BranchMetrics/android-branch-deep-linking/tree/master/Branch-SDK-TestBed
你可以以此为参考,看看你做错了什么。
【讨论】:
【参考方案3】:这可能是由您的清单配置引起的。在您的<activity>
标签中,您应该包含android:launchMode="singleTask"
。请参阅我们docs 的这一部分。这可以解释为什么您第一次收到参数,但重新打开时没有收到。
【讨论】:
以上是关于Branch.io initSession 返回空的引用参数 json的主要内容,如果未能解决你的问题,请参考以下文章
Branch.io 使用时返回 Branch.getInstance().setIdentity("your_user_id");