当我单击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
)来分隔代码。然后,将静态成员添加到类型为Authentication
的FacebookLogin
中。这不是拆分一段代码的好方法。它造成的一个问题是系统将不会在onActivityResult()
中回调到FacebookLogin
。相反,任何活动结果都将传递到活动Authentication
的实例。因为它不再具有onActivityResult()
的覆盖,所以您的代码无法处理它。