2017-08-18 29 views
0

我的應用程序啓動了一個SplashActivity後跟一個MainActivity。我在SplashActivity中運行branch.initSession,但大約需要1.5秒才能返回給延遲啓動MainActivity的聽衆。我想縮短這個時間。斜槓和主要活動之間的分支初始化

我的想法是:

  1. 運行在MainActivity代替branch.initSession
  2. 運行branch.initSessionSplashActivity,啓動MainActivity,然後使用事件總線將分支傳遞給MainActivity進行處理。

有沒有人有任何建議如何解決這個問題?

乾杯,杜安。

回答

1

Amruta從Branch這裏。

默認情況下,Branch會延遲安裝調用,最多隻能延遲1.5秒。我們推遲安裝電話以捕獲通過Google Play傳遞的安裝推薦鏈接字符串,這會增加歸因並延緩深度鏈接的準確性。我們不會延遲其他任何通話,並且只有在用戶第一次打開您的應用時纔會發出安裝通話。

如果我們在1.5秒之前收到引薦人字符串,我們會立即開始接聽電話,這意味着延遲時間長達1.5秒,但不能保證持續這麼長時間。

如果您想優化第一次安裝調用,只需將以下代碼粘貼到您的應用程序類中,並且我們不會延遲第一次安裝調用。

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您是否根據鏈接參數更改主活動中的內容/視圖?如果沒有,您可以隨時在主要活動中初始化分支。回調完成後會有一些網絡延遲。您可以通過初始化主活動中的分支來避免Splash Activity中的滯後現象。確保適當更新您的Manifest以定義主要活動中的意圖。 –

+0

我做了一些測試,我會安裝,測試第一次啓動的時間,退出並重新打開第二次啓動應用程序。 – duane

0

我的解決辦法是:

  1. 如果第一次發射,等待在飛濺活動的參數
  2. 如果不是第一個推出,傳給這將傳遞參數的應用程序的分公司參數到任何聽衆進行處理。如果沒有偵聽器,那麼它可以嘗試在Splash Activity中處理它,或者保存它以備後用。

我不確定這是否是好的做法,但我認爲這會比添加事件總線庫更簡單。很高興聽到一些反饋。

的應用類:

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); 
    } 
}