2017-08-18 8 views
0

私のアプリはSplashActivityに続いてMainActivityを起動します。 SplashActivitybranch.initSessionを実行しますが、リスナに戻るには約1.5秒かかるので、MainActivityの起動が遅れます。私はこの時間を短縮したいと思います。スラッシュとメインアクティビティの間のブランチ初期化

私のアイデアがあります:

  1. 実行branch.initSession代わりMainActivityに。
  2. branch.initSessionSplashActivityに起動し、MainActivityを起動し、処理のためにイベントバスを使用してMainActivityにブランチを渡します。

誰もこの問題の解決方法に関する推奨事項はありますか?

乾杯、デュアン。

答えて

1

アムルタfrom Branchここに。

デフォルトでは、ブランチはインストールコールを最大1.5秒だけ遅延させます。 Google Playで渡されたインストールリファラー文字列を取得するためにインストールコールを遅らせることで、帰属と遅延の深いリンクの精度が向上します。私たちは他の呼び出しを遅らせることはありません。インストールコールは、ユーザーが初めてアプリケーションを開くときにのみ発生します。

リファラ文字列が1.5秒前に受信された場合、直ちに呼び出しが行われます。つまり、この遅延は最大1.5秒ですが、それを長く取ることはできません。

最初のインストールコールを最適化する場合は、Applicationクラスに次のコードを貼り付けるだけで、最初のインストールコールを遅らせることはありません。

public final class CustomApplicationClass { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     // initialize the Branch object 
     Branch.setPlayStoreReferrerCheckTimeout(0); 
     Branch.getAutoInstance(this); 
    } 
} 
+0

これが最初のインストール時にはありません。これは、インストール後にアプリをうまく開くたびにいつでも可能です。私の 'SplashActivity'は、そのタスクを完了し、ブランチリスナーが返される前に' MainActivity'を開くことを開始します。 – duane

+0

@duaneメインアクティビティのコンテンツ/ビューをリンクパラメータに基づいて変更していますか?そうでない場合は、メインアクティビティでBranchをいつでも初期化できます。コールバックが完了するまでにネットワーク遅延が発生します。メインアクティビティで支店を初期化することで、この遅延をスプラッシュアクティビティで回避できます。メインアクティビティのインテントを定義するためにマニフェストを適切に更新してください。 –

+0

私はインストールを行い、最初の起動の時間をテストし、2回目の起動のためにアプリケーションを終了して再度開きます。 – duane

0

私のソリューションでした:

  1. 最初に起動した場合、パラメータを渡すアプリケーションに支店パラメータを渡し、
  2. ない最初の起動するとスプラッシュ活動におけるパラメータを待ちます処理するすべてのリスナーに送信します。リスナーがない場合は、スプラッシュアクティビティで処理したり、後で保存したりすることができます。

これは良い習慣であるかどうかはわかりませんが、イベントバスライブラリを追加するより簡単になると思いました。いくつかのフィードバックを聞いてうれしいです。

Applicationクラス:スプラッシュ活動に

public class MyApp extends Application { 
    private Listener branchListener = null; 

    public interface Listener { 
     void onBranchLinkReceived(JSONObject params, BranchError error); 
    } 

    public void registerBranchListener(Listener listener) { 
     branchListener = listener; 
    } 

    public void unregisterBranchListener() { 
     branchListener = null; 
    } 

    public boolean branchLinkReceived(JSONObject params, BranchError error) { 
     if (branchListener != null) { 
      branchListener.onBranchLinkReceived(params, error); 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public void onCreate() { 
     Branch.getAutoInstance(this); 
     ... 
    } 
} 

public class SplashActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 

     Branch branch = Branch.getInstance(); 
     branch.initSession(new Branch.BranchReferralInitListener(){ 
      @Override 
      public void onInitFinished(JSONObject params, BranchError error) { 

       if (error == null) { 
        if (firstLaunch) { 
         processParamsInSplashActivity(params); 
        } else { 
         boolean isProcessed = ((MyApp) getApplication()).branchLinkReceived(params, error); 
        } 
       } 
      }, this.getIntent().getData(), this); 
     } 
    } 
} 

そしてMainActivityで:

public class MainActivity extends AppCompatActivity implements MyApp.Listener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ((MyApp) getApplication()).registerBranchListener(this); 
     ... 
    } 


    @Override 
    protected void onDestroy() { 
     ((MyApp) getApplication()).unregisterBranchListener(); 
     super.onDestroy(); 
    } 

    @Override 
    public void onBranchLinkReceived(JSONObject params, BranchError error) { 
     Log.d("MainActivity", "Branch link received: " + params); 
    } 
} 
関連する問題