斜杠和主要活动之间的分支init

时间:2017-08-18 02:10:23

标签: android branch.io

我的应用启动SplashActivity后跟MainActivity。我在branch.initSession中运行SplashActivity但是它需要大约1.5秒才能返回到监听器,这会延迟MainActivity的启动。我想减少这个时间。

我的想法是:

  1. 改为branch.initSession中的MainActivity
  2. branch.initSession中运行SplashActivity,启动MainActivity,然后使用eventbus将分支传递给MainActivity进行处理。
  3. 有没有人就如何解决这个问题提出任何建议?

    干杯,杜安。

2 个答案:

答案 0 :(得分:1)

来自Branch的Amruta。

默认情况下,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);
  }
}

答案 1 :(得分:0)

我的解决方案是:

  1. 如果首次启动,请等待“启动活动”中的参数
  2. 如果没有首次启动,请将Branch参数传递给Application,它将参数传递给任何要处理的侦听器。如果没有监听器,那么它可以尝试在Splash Activity中处理它或保存它以供以后使用。
  3. 我不确定这是不是很好的做法,但我认为它比添加Event Bus库更简单。很高兴听到一些反馈。

    应用程序类:

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