码农家园

关闭
导航

关于 android:使用 Facebook 登录 Firebase 时出现错误 100


androidfacebook-loginfirebasefirebase-authentication

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)'
相关讨论

  • 您是否在 Authentication 的 SIGN-IN 方法中启用了 facebook?
  • 当然。添加了应用程序 ID 和密码。我完成了 facebook 和 firebase 导师的所有步骤
  • 试试这个 - stackoverflow.com/a/37522695/3774906
  • @rushank 我注意到我已经尝试过了。就在日志之后。是的,我也知道如何使用搜索
  • 行。然后继续搜索。您可以在这里提出您的问题 - github.com/firebase/FirebaseUI-Android/issues
  • 这是遗留项目的链接,在这里提出不正确,代码库已更改
  • @DimaRostopira FirebaseUI 已针对 Firebase 3.x 进行了更新,并且得到了非常积极的维护。但仅使用该存储库来提出有关 FirebaseUI 库的问题,而不是有关 Firebase 本身的问题。否则他们只会被关闭。


最后,我发现我使用的是客户端代码而不是应用程序密码 :D 对不起,对不起

相关讨论

  • 我得到了同样的错误,你在哪里更改了代码?
  • Firebase 控制台中的@bikash
  • 这个问题花了我一整天的时间!谢谢


您的 Facebook 应用很可能仍设置为开发模式,这意味着您必须明确添加有权访问它的用户。

  • 去 developer.facebook.com
  • 选择您的应用
  • 单击左侧菜单中的 Roles
  • 在 Testers 下添加您希望能够登录的用户的 Facebook ID
  • 或者,您可以将应用程序公开:

  • 去 developer.facebook.com
  • 选择您的应用
  • 点击左侧菜单中的 App Review
  • 将 Make Holla public? 下的滑块设置为 Yes
  • 相关讨论

    • 我已经将它设置为公开,没有任何改变,不幸的是
    • 不管怎样,我是在账户上测试的,那是设置为管理员


    Copyright ©  码农家园 联系:[email protected]