アプリがカスタム URL から起動/インストールされたときに、Branch を使用してユーザーにカスタム エクスペリエンスを提供します。このカスタム エクスペリエンスは、新規ユーザー (アプリをダウンロードして初めてサインアップするユーザー) と、既にアプリをインストールしているサインイン ユーザーが利用できる必要があります。
このカスタム体験は私たちにとって必須です。ユーザーがこの URL をクリックすると、正しくプロンプトが表示される必要があります。
2 つの活動があります。
アクティビティ Aはランチャー アクティビティです。これは、ルーティング アクティビティとして機能します。つまり、ユーザーがログインしている場合、または従来のサインインとサインアップのボタンでユーザーにプロンプトを表示した場合、ローカルで表示されます。
アクティビティ Bはホーム アクティビティです。これは、次の場合にアクティビティ A によって起動されます。 - ユーザーが既にログインしている - ユーザーがサインインしている - ユーザーがサインアップしている ここで、「カスタム」エクスペリエンスが発生します (ユーザーが URL をクリックしてアプリにアクセスするたびに、ダイアログが表示されます)。 .
アクティビティ Aでは、次のメソッドを使用して、onStart() で Branch 提供の情報を取得します。
branch.initSession(new Branch.BranchReferralInitListener()
{
@Override
public void onInitFinished(JSONObject referringParams, BranchError error)
{
// Searches through the JSONObject for key/value pairs...
}
};
並行して、コールバックのトリガーに時間がかかりすぎる場合 (つまり、ネットワークが非常に遅い場合) にタイムアウトとして機能する Handler/Runnable ペアを起動します。これにより、何か問題が発生した場合にスプラッシュ画面が数分間表示されるのを防ぎます。
しかし、これを行うことによって、私は物事を良い方法で行っているとは感じません。
スプラッシュスクリーンのタイムアウトが 10 秒に設定され、コールバックが 15 秒後にのみ呼び出されると仮定しましょう。ユーザーがすでにログインしている場合、アクティビティ Aで 10 秒が経過するとすぐにアクティビティ Bにリダイレクトされます。したがって、ホーム画面のダイアログでプロンプトが表示されることはありません。
ルーティングが n 秒間続く可能性のある非同期作業に依存している場合、アクティビティ ルーティングを処理する正しい方法は何ですか?