Error 100 while logging with Facebook into Firebase
我正在尝试使用 facebook 登录到 firebase。 Facebook 登录有效,但 firebase 抛出错误。顺便说一句,Google 登录效果很好(我删除了 GSI 代码以使其更短),所以我非常怀疑问题出在 Firebase 上。
这是日志
1 2 3 4 5 6 7 8 | 08-30 11:43:43.091 25460-25460/com.kid.gl W/StartActivity: signInWithCredential com.google.firebase.FirebaseException: An internal error has occured. [ Unsuccessful debug_token response from Facebook: {"error":{"message":"(#100) You must provide an app access token or a user access token that is an owner or developer of the app","type":"OAuthException","code":100,"fbtrace_id":"GLp5H2ygSPb"}} ] at com.google.android.gms.internal.zzafd.zzes(Unknown Source) at com.google.android.gms.internal.zzafa$zzg.zza(Unknown Source) at com.google.android.gms.internal.zzafl.zzet(Unknown Source) at com.google.android.gms.internal.zzafl$zza.onFailure(Unknown Source) at com.google.android.gms.internal.zzafg$zza.onTransact(Unknown Source) at android.os.Binder.execTransact(Binder.java:446) |
我在这个错误中搜索了大约 3 个小时,但到处都只找到了一个解决方案 - 在 Facebook 控制台设置中关闭"秘密嵌入客户端"。这根本没有效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | public class StartActivity extends AppCompatActivity implements View.OnClickListener, FacebookCallback<LoginResult> { private static final String TAG ="StartActivity"; private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener mAuthListener; private CallbackManager callbackManager; @SuppressWarnings("ConstantConditions") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_start); mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) afterLogin(); else logOut(); } }; //Facebook login callbackManager = CallbackManager.Factory.create(); LoginButton facebookButton = (LoginButton) findViewById(R.id.facebook_login); facebookButton.setReadPermissions("public_profile","email"); facebookButton.registerCallback(callbackManager, this); LoginManager.getInstance().registerCallback(callbackManager,this); } @Override public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); } @Override public void onStop() { super.onStop(); if (mAuthListener != null) mAuth.removeAuthStateListener(mAuthListener); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { try { callbackManager.onActivityResult(requestCode, resultCode, data); } catch (Exception e) { e.printStackTrace(); } } //Facebook login methods @Override public void onSuccess(LoginResult loginResult) { //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile")); AuthCredential credential = FacebookAuthProvider.getCredential(loginResult.getAccessToken().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 (!task.isSuccessful()) { Log.w(TAG,"signInWithCredential", task.getException()); //Exception is here Toast.makeText(StartActivity.this,"Authentication failed.", Toast.LENGTH_SHORT).show(); } }}); } @Override public void onCancel() {} @Override public void onError(FacebookException error) { Toast.makeText(this, error.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } } |
P.S.:使用 gradle 添加的 Facebook SDK,可能是导致问题的原因吗? build.gradle 的一部分:
1 2 | compile 'com.google.firebase:firebase-auth:9.4.0' compile 'com.facebook.android:facebook-android-sdk:[4,5)' |
最后,我发现我使用的是客户端代码而不是应用程序密码 :D 对不起,对不起
您的 Facebook 应用很可能仍设置为开发模式,这意味着您必须明确添加有权访问它的用户。
或者,您可以将应用程序公开: