【问题标题】:Android : FirebaseAuth - Unsuccessful debug_token response from FacebookAndroid:FirebaseAuth - Facebook 的 debug_token 响应不成功
【发布时间】:2018-07-21 21:49:52
【问题描述】:

我正在尝试使用 firebase 为我的应用创建 Facebook 登录方法。我设置了我的 Facebook 应用程序和 sdk。 登录 Facebook 工作正常.. 问题是当 Firebase 尝试 signInWithCredential 时,身份验证失败。我还没有找到任何可行的解决方案。所以这是我的 Logcat :

signInWithCredential:failure
                                                           com.google.firebase.FirebaseException: An internal error has occurred. [ 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":"CnaYlxG66lv"}} ]
                                                               at com.google.android.gms.internal.zzdxm.zzao(Unknown Source)
                                                               at com.google.android.gms.internal.zzdwn.zza(Unknown Source)
                                                               at com.google.android.gms.internal.zzdxx.zzap(Unknown Source)
                                                               at com.google.android.gms.internal.zzdya.onFailure(Unknown Source)
                                                               at com.google.android.gms.internal.zzdxo.onTransact(Unknown Source)
                                                               at android.os.Binder.execTransact(Binder.java:573)

这是我的代码:

  • Facebook 按钮和回调管理器

    mAuth = FirebaseAuth.getInstance();
    mCurrentUser = mAuth.getCurrentUser();
    mCallbackManager = CallbackManager.Factory.create();
    mFacebook.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mFacebook.setEnabled(false);
            LoginManager.getInstance().logInWithReadPermissions(SignUp.this, Arrays.asList("email", "public_profile"));
            LoginManager.getInstance().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(SignUp.this, "Facebook Login is Canceled",Toast.LENGTH_LONG).show();
                    // ...
                }
    
                @Override
                public void onError(FacebookException error) {
                    Log.d(TAG, "facebook:onError", error);
                    Toast.makeText(SignUp.this, "Facebook Login    Error",Toast.LENGTH_LONG).show();
                    // ...
                }
            });
        }
    });
    
  • OnActivityResult

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }
    
  • Firebase 处理FacebookAccessToken

    private void handleFacebookAccessToken(AccessToken token) {
    Log.d(TAG, "handleFacebookAccessToken:" + token);
    
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(SignUp.this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
    
                        Log.d(TAG, "signInWithCredential:success");
                        Toast.makeText(SignUp.this,"Logged in", Toast.LENGTH_LONG).show();
    
                    } else {
                                                    Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(SignUp.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
    
                    // ...
                }
            });
    }
    
  • Strings.xml:一切都是 Facebook 登录快速入门的副本

  • AndroidManifest:所有内容都是 Facebook 登录快速入门的副本。

  • Project Build.gradle

    buildscript {
    
    repositories {
    google()
    jcenter()
    mavenCentral()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath 'com.google.gms:google-services:3.2.0'
    }
    }
    
    allprojects {
    repositories {
    google()
    jcenter()
    mavenCentral()
    maven {
        url "https://maven.google.com" // Google's Maven repository
    }
    }
    }
    
    task clean(type: Delete) {
    delete rootProject.buildDir
    }
    
  • Firebase 控制台 Facebook 登录方法

  • Facebook 应用基本设置

  • Facebook 应用高级设置

  • 客户端 OAuth 设置

  • 密钥哈希

我认为这就是一切,如果还有其他问题,请指出我,我会更新我的答案,谢谢!

【问题讨论】:

    标签: java android facebook firebase-authentication facebook-login


    【解决方案1】:

    尝试更新 onClick 函数中的函数。我测试了下面的方法,它登录了。我对 firebase 有一个单独的问题(我相信)

    this.fbLoginManager.registerCallback(this.callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.v("Main", response.toString());
                        setProfileToView(object);
                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString(GraphRequest.FIELDS_PARAM, "id, name, email, gender, birthday, picture.type(large)");
                request.setParameters(parameters);
                request.executeAsync();
            }
    
    
    
            @Override
            public void onCancel() {
    
            }
    
            @Override
            public void onError(FacebookException error) {
                Toast.makeText(LoginActivity.this.getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
            }
    
        });
    

    【讨论】:

    • 我偶然设法解决了我的问题,由于某些原因我禁用了我的旧 Facebook 帐户,但我必须创建一个新的登录应用程序,所以我在新的 Facebook 帐户中做到了,我得到了我的应用程序登录过程中的密钥哈希,我确保一切都设置正确,所以是的,它现在可以工作了。谢谢你
    • 你得到了 +1 ;)
    猜你喜欢
    • 2020-10-12
    • 2017-09-07
    • 2023-01-29
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    相关资源
    最近更新 更多