1

Facebookボタンをクリックすると「アプリケーションがOauthクライアントフローを無効にしました」というメッセージが表示されます。開発者コンソール。Facebookのログインエラーが「Oauthクライアントフローが無効になっていますが、有効にしました」

2クラスに分けます。しかし、私が1クラスにマージすると、正常に動作します。

public class Authentication extends AppCompatActivity implements 
     View.OnClickListener{ 

    static protected FirebaseAuth auth; 
    private FirebaseAuth.AuthStateListener authStateListener; 

    static FacebookLogin facebookLogin; 
    static CallbackManager callbackManager; 

    String TAG = "LOGIN"; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.index); 

     findViewById(R.id.button_facebook_signout).setOnClickListener(this); 

     Button btnStudent = (Button)findViewById(R.id.student); 
     final LoginButton loginButton = (LoginButton) findViewById(R.id.button_facebook_login); 

     auth = FirebaseAuth.getInstance(); 
     authStateListener = new FirebaseAuth.AuthStateListener() { 

      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if(user != null) { 
        // User is signed in 
        Log.d(TAG, "User is signed in"); 

       } else { 
        // User is signed out 
        Log.d(TAG, "User is signed out"); 
       } 
      } 
     }; 

     btnStudent.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       loginButton.performClick(); 
       facebookLogin = new FacebookLogin(); 
       facebookLogin.initFacebookLogin(loginButton, getApplicationContext()); 
      } 
     }); 
    } 

FacebookLogin.java:

public class FacebookLogin extends Authentication{ 

    protected void initFacebookLogin(LoginButton loginButton, Context context) { 
     Log.d(TAG, "Facebook Login Class" + loginButton.getText()); 

     final Intent intent = new Intent(context, AddCourse.class); 

     callbackManager = CallbackManager.Factory.create(); 
     loginButton.setReadPermissions("public_profile", "email"); 
     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 

      @Override 
      public void onSuccess(LoginResult loginResult) { 
       handleFacebookAccessToken(loginResult.getAccessToken()); 
       Log.d(TAG, "Facebook success"); 

       startActivity(intent); 
      } 

      @Override 
      public void onCancel() { 
       Log.d(TAG, "Facebook cancel"); 
      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d(TAG, error.toString()); 
      } 
     }); 

    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // Pass the activity result back to the Facebook SDK 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    private void handleFacebookAccessToken(AccessToken token) { 
     AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken()); 
     auth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
      @Override 
      public void onComplete(@NonNull Task<AuthResult> task) { 
       Log.d(TAG, "facebook complete"); 
      } 
     }); 
    } 

PS:私の悪い英語

+0

クラスの分割中に行ったことは不条理です。 'FacebookLogin'は' Authentication'を拡張しますが、 'Authentication'クラス自体は' FacebookLogin'への 'static'参照を持っています。あなたがクラスを分割している間に達成したいことは何ですか?とにかくあなたの問題への答えはqbix – Dibzmania

答えて

0

申し訳ありませんあなたは二つのクラスにそれを分離する際のコードは動作を停止言います。 FacebookLoginAuthentication、つまりAppCompatActivity)を作成してコードを区切りました。次に、タイプFacebookLoginAuthenticationにスタティックメンバーを追加しました。それはコードのセクションを分解する良い方法ではありません。それが作成する1つの問題は、システムがonActivityResult()FacebookLoginにコールバックしないことです。代わりに、アクティビティ結果はアクティビティAuthenticationのインスタンスに渡されます。それはもはやonActivityResult()のオーバーライドを持っていないので、コードはそれを処理することができません。

+0

によって解決されました。それは私のせいです。しかし、私はまだFacebookLoginの静的なものを削除しました。それはまだ動作していません。 – eawarnong

関連する問題