如何让 Branch SDK 将数据发送到 IntentService 而不是 Activity?

How to make Branch SDK send data to an IntentService instead of an Activity?

我在 branch.io documentations 中注意到分支 SDK 只能配置为将深度链接数据发送到 Activity。必须调用这些方法来设置分支 SDK:

@Override
public void onStart()
{
    super.onStart();
    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 ...
            }
            else
            {
                Log.i("MyApp", error.getMessage());
            }
        }
    }, this.getIntent().getData(), this);
}

@Override
public void onNewIntent(Intent intent)
{
    this.setIntent(intent);
}

如您所见,方法 initSession() 只接受 Activity 作为第三个输入。但我希望将深层链接数据发送到 IntentService。我是否遗漏了什么,分支提供了一种方法来做到这一点?或者,如果没有,我该如何提供该功能?我知道我可以启动一个不可见的 activity 并将数据通过它传递给 IntentService 但我读到它会使启动变慢。有什么建议吗?

我们没有将任何内容嵌入到 SDK 中以将参数直接发送到 Intent 服务。在 activity 中自己捕获这些参数并将它们传递到别处不会比任何其他方法花费更多的时间,因为所有方法都需要 init 调用,而这就是可以忽略不计的延迟存在的地方。

我阅读了 Branch 的源代码,发现有一些重载方法没有将 Activity 作为输入。实际上他们正在调用 initSession 并将 Activity 设置为 null.

/**
 * <p>Initialises a session with the Branch API.</p>
 *
 * @param callback A {@link BranchReferralInitListener} instance that will be called
 *                 following successful (or unsuccessful) initialisation of the session
 *                 with the Branch API.
 * @param data     A {@link  Uri} variable containing the details of the source link that
 *                 led to this initialisation action.
 * @return A {@link Boolean} value that will return <i>false</i> if the supplied
 * <i>data</i> parameter cannot be handled successfully - i.e. is not of a
 * valid URI format.
 */
public boolean initSession(BranchReferralInitListener callback, @NonNull Uri data) {
    return initSession(callback, data, null);
}

我使用上面声明的方法并在 manifest 中的 IntentService 声明中定义了所有需要的意图过滤器,而不是 activity。我测试了它并且它起作用了。如果他们记录下来就好了。

更新

这只是误用。不是可靠且受支持的方法。最好创建一个不可见的 Activity 并通过它发送数据到 IntentService.