Android:使用 Firebase 的 Facebook 身份验证未启动
Android: Facebook authentication using Firebase doesn't start
我对 Firebase 和 Facebook 登录还很陌生,所以我学习了很多关于如何在我的实时数据库上使用 Facebook 登录的教程。问题是,当您单击 LoginButton 时,activity 似乎开始了,但之后它立即关闭。我实现了 Google 登录,一切正常,我真的找不到问题。
这是我的做法
mCallbackManager = CallbackManager.Factory.create();
facebookButton.setReadPermissions("email", "public_profile");
facebookButton.setFragment(this);
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG,"XD1");
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "cancel");
}
@Override
public void onError(FacebookException error) {
Log.e(TAG, "error connecting to fb", error);
}
});
private void handleFacebookAccessToken(AccessToken token){
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
getFragmentManager().beginTransaction().replace(R.id.frameLayout, PhoneFragment.newInstance(mAuth.getCurrentUser().getUid())).commit();
} else {
// If sign in fails, display a message to the user.
Log.w("errore", "signInWithCredential:failure", task.getException());
Toast.makeText(getContext(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_GOOGLE) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onResult di google");
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try{
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e){
Log.e("errore", "errore, avvisare l'utente");
}
} else {
Log.d(TAG, "onActivityResult di facebook richiamato");
// Pass the activity result back to the Facebook SDK
mCallbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
}
logcat 向我显示的错误是 SERVER_ERROR:[code] 1675030 [message]:执行查询时出错。 [额外]:执行操作时出错"ProxyAuthAppLoginStartQuery":在Query.proxy_auth_app_login_start:字段实现引发异常。检查您的服务器日志以获取更多信息。
我以为是因为测试用户,但添加他们并没有改变
按照Facebook的教程将sdk添加到您的应用程序。很可能你的 sdk 没有正确设置,所以当你启动 Facebook 身份验证时,sdk 由于缺少客户端 ID 而失败。您还必须在 firebase 项目控制台中设置 Facebook,以便 Firebase 可以完成身份验证并获取必要的信息
问题出在清单中的标记元数据。我无法在应用程序中添加元数据,因为 CacheMeOutside 在这里回答 因为该标签已经在合并的清单中(我想是因为 Firebase),所以我所要做的就是在我的字符串资源文件中更改字符串名称 "facebook_app_id" 到 "facebook_application_id" 并且一切正常。希望这可能对某人有所帮助
我对 Firebase 和 Facebook 登录还很陌生,所以我学习了很多关于如何在我的实时数据库上使用 Facebook 登录的教程。问题是,当您单击 LoginButton 时,activity 似乎开始了,但之后它立即关闭。我实现了 Google 登录,一切正常,我真的找不到问题。
这是我的做法
mCallbackManager = CallbackManager.Factory.create();
facebookButton.setReadPermissions("email", "public_profile");
facebookButton.setFragment(this);
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG,"XD1");
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "cancel");
}
@Override
public void onError(FacebookException error) {
Log.e(TAG, "error connecting to fb", error);
}
});
private void handleFacebookAccessToken(AccessToken token){
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
getFragmentManager().beginTransaction().replace(R.id.frameLayout, PhoneFragment.newInstance(mAuth.getCurrentUser().getUid())).commit();
} else {
// If sign in fails, display a message to the user.
Log.w("errore", "signInWithCredential:failure", task.getException());
Toast.makeText(getContext(), "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUEST_GOOGLE) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onResult di google");
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
try{
GoogleSignInAccount account = task.getResult(ApiException.class);
firebaseAuthWithGoogle(account);
} catch (ApiException e){
Log.e("errore", "errore, avvisare l'utente");
}
} else {
Log.d(TAG, "onActivityResult di facebook richiamato");
// Pass the activity result back to the Facebook SDK
mCallbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
}
logcat 向我显示的错误是 SERVER_ERROR:[code] 1675030 [message]:执行查询时出错。 [额外]:执行操作时出错"ProxyAuthAppLoginStartQuery":在Query.proxy_auth_app_login_start:字段实现引发异常。检查您的服务器日志以获取更多信息。
我以为是因为测试用户,但添加他们并没有改变
按照Facebook的教程将sdk添加到您的应用程序。很可能你的 sdk 没有正确设置,所以当你启动 Facebook 身份验证时,sdk 由于缺少客户端 ID 而失败。您还必须在 firebase 项目控制台中设置 Facebook,以便 Firebase 可以完成身份验证并获取必要的信息
问题出在清单中的标记元数据。我无法在应用程序中添加元数据,因为 CacheMeOutside 在这里回答