私のソリューションでした:
- 最初に起動した場合、パラメータを渡すアプリケーションに支店パラメータを渡し、
- ない最初の起動するとスプラッシュ活動におけるパラメータを待ちます処理するすべてのリスナーに送信します。リスナーがない場合は、スプラッシュアクティビティで処理したり、後で保存したりすることができます。
これは良い習慣であるかどうかはわかりませんが、イベントバスライブラリを追加するより簡単になると思いました。いくつかのフィードバックを聞いてうれしいです。
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);
}
}
これが最初のインストール時にはありません。これは、インストール後にアプリをうまく開くたびにいつでも可能です。私の 'SplashActivity'は、そのタスクを完了し、ブランチリスナーが返される前に' MainActivity'を開くことを開始します。 – duane
@duaneメインアクティビティのコンテンツ/ビューをリンクパラメータに基づいて変更していますか?そうでない場合は、メインアクティビティでBranchをいつでも初期化できます。コールバックが完了するまでにネットワーク遅延が発生します。メインアクティビティで支店を初期化することで、この遅延をスプラッシュアクティビティで回避できます。メインアクティビティのインテントを定義するためにマニフェストを適切に更新してください。 –
私はインストールを行い、最初の起動の時間をテストし、2回目の起動のためにアプリケーションを終了して再度開きます。 – duane