2017-01-17 6 views
0

branch.io documentationsでは、ブランチSDKはディープリンクデータをActivityに送信するように設定することしかできないことに気付きました。これらのメソッドは、セットアップ分岐SDKに呼び出さなければなりません。ブランチSDKがアクティビティではなくIntentServiceにデータを送信する方法

@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に送信する必要があります。私は何かを逃していますか、ブランチはそれを行う方法を提供していますか?そうでない場合は、どのように機能を提供できますか?私は目に見えない活動を開始し、それを介してデータをIntentServiceに渡すことができることを知っていますが、起動が遅くなることを読んだことがあります。助言がありますか?

答えて

1

インテントサービスにパラメータを直接送信するためにSDKに焼き付けられたものはありません。あるアクティビティでこれらのパラメータを取得して他の場所に渡すことは、すべてのアプローチがinit呼び出しを必要とするため、他のアプローチより時間がかかりません。

+0

SDKは方法を提供します。私はそれがちょうど誤用かそれの特徴かどうかわかりません。私はそれを試して、それは働いた。アクティビティを追加する必要はありません。 –

+1

こんにちはMelika。インテントサービスの動作が、私たちのアプローチをサポートすることを意味するものではなく、常に確実に機能するという理由だけで、安全にデータを返すアクティビティライフサイクルの方法に依存しています。私はあなたが何かを調理してうれしいですが、ちょうど頭が上がっています、それは私たちが現在サポートしているものではありません:)。 – Evan

+0

ああ、私はあなたがブランチの貢献者の1人であることに気づいた。それはちょうど誤用です。返信してくれてありがとう。 –

1

私は支店のソースコードを読んで、入力としてActivityを取得していないいくつかのオーバーロードされた方法があることが分かりました。実際にはinitSessionActivitynullと設定しています。

/** 
* <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の。私はそれをテストし、それは働いた。彼らがそれを文書化したなら、それはいいことだろう。

UPDATE

それはちょうど誤用です。信頼できるサポートされたアプローチではありません。不可視のActivityを作成し、そのデータをIntentServiceに送信する方が良いでしょう。

関連する問題