当我单击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:对不起,我英语不好

最佳答案

您说将代码分为两类时代码停止工作。您通过创建FacebookLogin(扩展了Authentication,它是AppCompatActivity)来分隔代码。然后,将静态成员添加到类型为AuthenticationFacebookLogin中。这不是拆分一段代码的好方法。它造成的一个问题是系统将不会在onActivityResult()中回调到FacebookLogin。相反,任何活动结果都将传递到活动Authentication的实例。因为它不再具有onActivityResult()的覆盖,所以您的代码无法处理它。

10-08 14:52