4

ユーザーがFacebookまたはTwitterを使用してログインする必要があるAndroidアプリがあります。私はその両方を実装することができ、部分的に成功しました。Facebook のログインは、Facebook のこのチュートリアルを使用して実装されました。

Twitter ログインに関しては、webview ログインを実行する TwitterLoginActivity を開始するボタンを使用しました。成功した場合は、断片化に関して Facebook ログインと非常によく似た実装の TwitterHomeActivity を起動します。

したがって、ログイン実装全体の内訳は次のとおりです

FacebookHomeActivityには 3 つのフラグメントがあります

  • FacebookSplashFragment (fb または twitter でログインするためのオプション)
  • FacebookSelectionFragment (アプリ メニューを表示)
  • FacebookUserSettingsFragmen (ログアウト ユーザー)。

TwitterHomeActivityには 2 つのフラグメントがあります

  • TwitterSelectionFragment (アプリ メニューを表示)
  • TwitterUserSettingsFragment (ログアウトユーザー)

TwitterLoginActivity (ログイン用の Twitter ページにリダイレクトするサーバーを介して認証を実行するための webview が含まれています)

問題は、まだ見ていない場合は、Twitter アカウントからログアウトした場合、Facebook または Twitter にログインするためのオプションを表示するためだけに FacebookHomeActivity を開始する必要があることです。

これを行うことは非常にハックであり、悪いことです。だから私はそれをすべてフラグメントにすれば、私の問題を解決できるかもしれないと思った.

LoginActivity (すべてのログインのホスト) には以下が含まれます。

  • LoginSelectionFragment (facebook または twitter でのログインを選択)
  • TwitterLoginFragment (webview によるログイン ユーザー)
  • FacebookSelectionFragment (ユーザーの承認とメニューの表示)
  • TwitterSelectionFragment (メニューを表示)
  • FacebookUserSettingFragment (ログアウト fb ユーザー)
  • TwitterUserSettingFragment (Twitter ユーザーのログアウト)

これを利用して、さまざまなログイン状態で正しいフラグメントを表示します。

        @Override
protected void onResumeFragments() {
    super.onResumeFragments();

    Session session = Session.getActiveSession();

    if (session != null && session.isOpened()) {
        // if the session is already open,
        // try to show the selection fragment
        getSupportActionBar().show();
        showFragment(FACEBOOKSELECTION, false);
    }

    else if (Globals.loggedIn() && Globals.isTwitterUser()) {
        // otherwise present the splash screen
        // and ask the person to login.
        getSupportActionBar().show();
        showFragment(TWITTERSELECTION, false);

    } 
    else {
        // otherwise present the splash screen
        // and ask the person to login.
        Globals.logout();
        getSupportActionBar().hide();
        showFragment(LOGINSELECTION, false);
    }

}

すべてのログイン ロジックをフラグメントとして存在させることは、私には理にかなっているように思えますが、私が思い描いたようには動作しません。代わりに、基本的に各フラグメントの onStart() にあるすべてを実行するため、多数の progressDiaglogs がポップアップし、それ以外は何も起こらないと想像してください。バックスタックも台無しになり、表示されなかったフラグメントが表示されます。私がこれを間違って実装しているか、この問題にアプローチする完全に間違った方法です。

私の質問は、これが問題に対処する良い方法ではない場合、Facebook ログインと Twitter ログインの両方を実装するより良い方法は何でしょうか.

上記が理にかなっており、何も問題がない場合、私が間違っていると思いますか?

4

1 に答える 1