ユーザーが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 ログインの両方を実装するより良い方法は何でしょうか.
上記が理にかなっており、何も問題がない場合、私が間違っていると思いますか?