我正在尝试使用Firebase来处理Facebook登录身份验证 . 我已经按照Firebase和Facebook网站上的文档创建了活动,并确保根据需要填充两个站点上的设置 .
我可以从我的应用程序登录到Facebook,但是当Firebase保存用户时,我收到一个错误:
signInWithCredential com.google.firebase.FirebaseException:发生内部错误 . [未配置访问权限 . 之前或已禁用Google Identity Toolkit API尚未在项目27973105972中使用 . 通过访问https启用它
在Firebase上我有登录提供商:Facebook启用了正确的应用程序ID和应用程序机密 .
在Facebook上,我已将Firebase的重定向URI添加到Valid OAuth重定向URI列表中 .
请注意,搜索Google Identity Toolkit API会引导我使用https://developers.google.com/identity/toolkit/来说明使用Firebase身份验证 . 所以不是一个非常有用的错误消息 .
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private CallbackManager mCallbackManager;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
// [START auth_state_listener]
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
Toast.makeText(MainActivity.this, "Authentication successful 2.",
Toast.LENGTH_SHORT).show();
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
Toast.makeText(MainActivity.this, "Authentication signed out.",
Toast.LENGTH_SHORT).show();
}
// ...
}
};
// [END auth_state_listener]
// Initialize Facebook Login button
mCallbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("email", "public_profile");
loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "facebook:onSuccess:" + loginResult);
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "facebook:onCancel");
Toast.makeText(MainActivity.this, "facebook onCancel",
Toast.LENGTH_SHORT).show();
// ...
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "facebook:onError", error);
Toast.makeText(MainActivity.this, "facebook onError",
Toast.LENGTH_SHORT).show();
// ...
}
});
// [END initialize_fblogin]
}
@Override
public void onStart() {
super.onStart();
// [START on_start_add_listener]
mAuth.addAuthStateListener(mAuthListener);
}
@Override
public void onStop() {
super.onStop();
// [START on_stop_remove_listener]
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Pass the activity result back to the Facebook SDK
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
// [START auth_with_facebook]
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
// If sign in fails, display a message to the user. If sign in succeeds
// the auth state listener will be notified and logic to handle the
// signed in user can be handled in the listener.
if (!task.isSuccessful()) {
Log.w(TAG, "signInWithCredential", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Authentication successful.",
Toast.LENGTH_SHORT).show();
}
// ...
}
});
}
}
1 回答
我希望你的查询现在已经解决了 .
在我的情况下,question做了伎俩 . 您所要做的就是确保已启用相应的登录方法 .
转到Firebase控制台
选择所选的应用程序
(截至此日期)
点击身份验证(左侧)
选择登录方式
启用所需方法
检查此tutorial以获取Java代码的完整详细信息
你的代码对我来说似乎很合理 .