Firebase/Facebook身份验证-OAuthException-代码190 [英] Firebase/Facebook Authentication - OAuthException - Code 190
问题描述
我一直在我的Android应用中实施Firebase身份验证,并使其轻松运行&成功为其他身份验证提供程序(例如Google)(在调试中签名),但Facebook不会发挥作用.
I've been implementing Firebase authentication in my Android app and have got it working easily & successfully (signed in debug) for different authentication providers such as Google, however Facebook will not play ball.
在尝试通过Facebook进行身份验证时,我始终会收到com.google.firebase.FirebaseException.我使用的是github上的 firebase/quickstart 身份验证应用程序中的示例.从下面的输出中可以看到,Facebook身份验证成功并且是一个有效的访问令牌.但是,当我将令牌传递给Firebase进行身份验证时,会抛出上述异常.
I'm consistently receiving a com.google.firebase.FirebaseException when trying to authenticate with Facebook. I'm using the example from the firebase/quickstart auth app on github. As you can see from the output below, the Facebook authentication is successful and a valid access token. however when I pass the token to Firebase to authenticate, the aforementioned exception is thrown.
06-14 00:42:24.704 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: facebook:onSuccess:com.facebook.login.LoginResult@427332f8
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Access token details: {AccessToken token:ACCESS_TOKEN_REMOVED permissions:[user_friends, email, public_profile]}
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Token: EAADk2AXUei8BAESARAsZAOCQoZBo1KoLD6GDMDiNUX7U6o92sRZAG5hJN4426JqOYz5p4mYb8yavpTrHlJpoXp7mkCyZCLZAxYy4uSwBC4tK8wbrjccZBkOOS5tgoAbbq0IZBvXVwMV5OUdW1LHMj8PbCMznSzlLageUbpW96Dpa5wk7zVVwFVnsXJZA6flmV98l669VWIkizUpd6OYpeMc4d82JUexPSrYZD
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Acc ID: 107700652990130
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: App ID: 251616461879855
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Expires: Sat Aug 13 00:19:00 BST 2016
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Last Refresh: Tue Jun 14 00:42:24 BST 2016
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: Permissions: [user_friends, email, public_profile]
06-14 00:42:24.714 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: handleFacebookAccessToken:EAADk2AXUei8BAESARAsZAOCQoZBo1KoLD6GDMDiNUX7U6o92sRZAG5hJN4426JqOYz5p4mYb8yavpTrHlJpoXp7mkCyZCLZAxYy4uSwBC4tK8wbrjccZBkOOS5tgoAbbq0IZBvXVwMV5OUdW1LHMj8PbCMznSzlLageUbpW96Dpa5wk7zVVwFVnsXJZA6flmV98l669VWIkizUpd6OYpeMc4d82JUexPSrYZD
06-14 00:42:25.344 13275-13275/com.cmpdhoug.logintesting I/FacebookLogin: signInWithCredential:onComplete:false
06-14 00:42:25.344 13275-13275/com.cmpdhoug.logintesting W/FacebookLogin: signInWithCredential
com.google.firebase.FirebaseException: An internal error has occured. [ Unsuccessful debug_token response from Facebook: {"error":{"message":"Invalid OAuth access token signature.","type":"OAuthException","code":190,"fbtrace_id":"Euly77Ri59w"}} ]
at com.google.android.gms.internal.zzacq.zzbN(Unknown Source)
at com.google.android.gms.internal.zzacn$zzg.zza(Unknown Source)
at com.google.android.gms.internal.zzacy.zzbO(Unknown Source)
at com.google.android.gms.internal.zzacy$zza.onFailure(Unknown Source)
at com.google.android.gms.internal.zzact$zza.onTransact(Unknown Source)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)
Facebook 错误页面会建议访问令牌或登录状态出现问题,但是输出确认登录成功并且访问令牌正常.我还使用Facebook访问令牌调试器确认了令牌的有效性,输入了令牌在输出中.
The Facebook errors page would suggest a problem with the Access Token or Login Status, however the output confirms Log in is successful and the Access Token is fine. I've also confirmed the tokens validity using the Facebook Access Token debugger, entering the token in the output.
我正在尝试的所有方法都碰到了砖墙,我进行了彻底的搜索,并尝试了许多不同的解决方案,谷歌搜索了几个小时,但是却一无所获.
I'm hitting brick walls with everything I try, i searched SO thoroughly and tried a lot of different solutions, Googled for hours but not getting anywhere.
FacebookLoginActivity是从MainActivity中的一个意图启动的. FacebookLoginActivity的Android代码:
FacebookLoginActivity is launched from an intent within MainActivity. Android code for FacebookLoginActivity:
package com.cmpdhoug.logintesting;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.LoginManager;
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.FirebaseException;
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;
/**
* Demonstrate Firebase Authentication using a Facebook access token.
*/
public class FacebookLoginActivity extends BaseActivity implements
View.OnClickListener {
private static final String TAG = "FacebookLogin";
private TextView mStatusTextView;
private TextView mDetailTextView;
// [START declare_auth]
private FirebaseAuth mAuth;
// [END declare_auth]
// [START declare_auth_listener]
private FirebaseAuth.AuthStateListener mAuthListener;
// [END declare_auth_listener]
private CallbackManager mCallbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(this);
setContentView(R.layout.activity_facebook);
// Views
mStatusTextView = (TextView) findViewById(R.id.status);
mDetailTextView = (TextView) findViewById(R.id.detail);
findViewById(R.id.button_facebook_signout).setOnClickListener(this);
// [START initialize_auth]
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
// [END initialize_auth]
// [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.i(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
} else {
// User is signed out
Log.i(TAG, "onAuthStateChanged:signed_out");
}
// [START_EXCLUDE]
updateUI(user);
// [END_EXCLUDE]
}
};
// [END auth_state_listener]
// [START initialize_fblogin]
// Initialize Facebook Login button
mCallbackManager = CallbackManager.Factory.create();
LoginButton loginButton = (LoginButton) findViewById(R.id.button_facebook_login);
loginButton.setReadPermissions("email", "public_profile");
loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.i(TAG, "facebook:onSuccess:" + loginResult);
Log.i(TAG, "Access token details: " + loginResult.getAccessToken().toString());
Log.i(TAG,"Token: " + AccessToken.getCurrentAccessToken().getToken());
Log.i(TAG,"Acc ID: " + AccessToken.getCurrentAccessToken().getUserId());
Log.i(TAG,"App ID: " + AccessToken.getCurrentAccessToken().getApplicationId());
Log.i(TAG,"Expires: " + AccessToken.getCurrentAccessToken().getExpires());
Log.i(TAG,"Last Refresh: " + AccessToken.getCurrentAccessToken().getLastRefresh());
Log.i(TAG,"Permissions: " + AccessToken.getCurrentAccessToken().getPermissions());
AccessToken.setCurrentAccessToken(loginResult.getAccessToken());
handleFacebookAccessToken(AccessToken.getCurrentAccessToken());
}
@Override
public void onCancel() {
Log.i(TAG, "facebook:onCancel");
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
@Override
public void onError(FacebookException error) {
Log.i(TAG, "facebook:onError", error);
// [START_EXCLUDE]
updateUI(null);
// [END_EXCLUDE]
}
});
// [END initialize_fblogin]
}
// [START on_start_add_listener]
@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
// [END on_start_add_listener]
// [START on_stop_remove_listener]
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}
// [END on_stop_remove_listener]
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
// [START auth_with_facebook]
private void handleFacebookAccessToken(AccessToken token) {
Log.i(TAG, "handleFacebookAccessToken:" + token);
// [START_EXCLUDE silent]
showProgressDialog();
// [END_EXCLUDE]
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.i(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(FacebookLoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
}
// [START_EXCLUDE]
hideProgressDialog();
// [END_EXCLUDE]
}
});
}
// [END auth_with_facebook]
public void signOut() {
mAuth.signOut();
LoginManager.getInstance().logOut();
updateUI(null);
}
private void updateUI(FirebaseUser user) {
hideProgressDialog();
if (user != null) {
mStatusTextView.setText(getString(R.string.facebook_status_fmt, user.getDisplayName()));
mDetailTextView.setText(getString(R.string.firebase_status_fmt, user.getUid()));
findViewById(R.id.button_facebook_login).setVisibility(View.GONE);
findViewById(R.id.button_facebook_signout).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
mDetailTextView.setText(null);
findViewById(R.id.button_facebook_login).setVisibility(View.VISIBLE);
findViewById(R.id.button_facebook_signout).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_facebook_signout:
signOut();
break;
}
}
}
Android清单:
Android manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cmpdhoug.logintesting">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
<activity android:name=".EmailPassword">
</activity>
<activity android:name=".GoogleSignIn">
</activity>
<activity android:name=".FacebookLogin">
</activity>
<activity android:name=".FacebookLoginActivity">
</activity>
</application>
</manifest>
任何帮助表示赞赏.
推荐答案
您可以检查您的Facebook App ID& Firebase控制台中的机密设置正确吗?如果是这样,请在 https://firebase.google.com上提交Firebase身份验证错误. /support/contact/bugs-features/
Can you check your Facebook App ID & Secret settings in Firebase Console are correct? If so, please file a bug for Firebase Authentication at https://firebase.google.com/support/contact/bugs-features/
这篇关于Firebase/Facebook身份验证-OAuthException-代码190的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!