我在 Android 中使用 FirebaseUI Auth 进行用户身份验证。
我的应用程序 build.gradle 中用于 Facebook 登录的依赖项:
compile 'com.google.firebase:firebase-auth:11.0.0'
compile 'com.firebaseui:firebase-ui-auth:2.0.0'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
我的项目 build.gradle 中的类路径依赖项:
classpath 'com.google.gms:google-services:3.1.0'
我的 Activity onCreate() 中的 FirebaseUI 身份验证代码:
final AuthUI.IdpConfig facebookIdp = new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER)
.setPermissions(Arrays.asList("email", "public_profile"))
.build();
mAuthChangeListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
onSignedInInitialize(firebaseUser.getDisplayName());
} else {
onSignedOutCleanUp();
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setLogo(R.drawable.logo)
.setTheme(R.style.LoginTheme)
.setIsSmartLockEnabled(false)
.setAvailableProviders(
Arrays.asList(
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build(),
facebookIdp,
new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build()))
.build(),
RC_SIGN_IN);
}
}
};
我在同一个活动中的回调方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
if (resultCode == RESULT_OK) {
Toast.makeText(MainActivity.this, "Signed In!", Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(MainActivity.this, "Signing cancelled!", Toast.LENGTH_SHORT).show();
finish();
}
}
}
还有我的 strings.xml:
<string name="facebook_app_id">xxxxxxxxxxxxxxx</string>
<string name="fb_login_protocol_scheme">fbxxxxxxxxxxxxxxx</string>
当然,我已经在 Firebase 开发者控制台和 Facebook 开发者控制台中添加了所有必要的详细信息。
但是当我点击使用 Facebook 登录按钮,带有 facebook 图标的加载程序会显示几秒钟,但什么也没有发生。它仍然在同一屏幕中。
我的 logcat 详细信息:
06-13 15:59:23.298 23599-26149/com.google.firebase.udacity.friendlychat D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=48262, firebase_screen_class(_sc)=AuthMethodPickerActivity, firebase_screen_id(_si)=-3048364835412835803}]
06-13 15:59:23.352 23599-26149/com.google.firebase.udacity.friendlychat D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=AuthMethodPickerActivity, firebase_previous_id(_pi)=-3048364835412835803, firebase_screen_class(_sc)=FacebookActivity, firebase_screen_id(_si)=-3048364835412835801}]
06-13 15:59:23.381 23599-26149/com.google.firebase.udacity.friendlychat D/FA: Connected to remote service
06-13 15:59:24.171 23599-23599/com.google.firebase.udacity.friendlychat E/FacebookProvider: Error logging in with Facebook. SERVER_ERROR: [code] 1675030 [message]: Error performing query. [extra]: Errors while executing operation "ProxyAuthAppLoginStartQuery": At Query.proxy_auth_app_login_start: Failed to resolve field.
06-13 15:59:24.194 23599-26149/com.google.firebase.udacity.friendlychat D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=FacebookActivity, firebase_previous_id(_pi)=-3048364835412835801, firebase_screen_class(_sc)=AuthMethodPickerActivity, firebase_screen_id(_si)=-3048364835412835803}]
我的应用程序的屏幕截图:
登录屏幕 https://i.stack.imgur.com/kUScH.png
单击“使用 Facebook 登录”时,加载并消失 https://i.stack.imgur.com/5oaM7.png
回调也不会被触发。
Solution
(1) 权限中应添加“user_friends”。
(2)最重要的是,<string name="facebook_application_id" translatable="false">APPID</string>
应该是语法而不是<string name="facebook_app_id">APPID</string>
。在developers.facebook.com中,变量名称被指定为“facebook_app_id”,这是不起作用的。正确的变量应该是“facebook_application_id”。
这两个改变就解决了这个问题。