Ошибка 100 при входе через Facebook в Firebase

Я пытаюсь войти через facebook в firebase. Вход в Facebook работает, но firebase выдает ошибку. Кстати, вход в Google работает отлично (я удалил код GSI, чтобы сделать его короче), поэтому я очень сомневаюсь, что проблема в Firebase. Вот логи

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. Это никак не повлияло.

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.: Facebook SDK добавлен с помощью gradle, может быть, это причина проблемы? Часть build.gradle:

compile 'com.google.firebase:firebase-auth:9.4.0'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'

person Dima Rostopira    schedule 30.08.2016    source источник
comment
Вы включили facebook в методе SIGN-IN в аутентификации?   -  person rushank shah    schedule 30.08.2016
comment
Конечно. Добавлен идентификатор приложения и секрет. Я сделал все шаги из facebook и firebase tutor   -  person Dima Rostopira    schedule 30.08.2016
comment
попробуйте это - stackoverflow.com/a/37522695/3774906   -  person rushank shah    schedule 30.08.2016
comment
@rushank Я заметил, что пробовал это. Сразу после логов. Да, я тоже умею пользоваться поиском   -  person Dima Rostopira    schedule 30.08.2016
comment
В порядке. Затем продолжайте поиск. Вы можете поднять свою проблему здесь - github.com/firebase/FirebaseUI-Android/issues   -  person rushank shah    schedule 30.08.2016
comment
Это ссылка на устаревший проект, поднимать его здесь некорректно, изменена кодовая база   -  person Dima Rostopira    schedule 30.08.2016
comment
@DimaRostopira FirebaseUI обновляется для Firebase 3.x и очень активно поддерживается. Но используйте этот репозиторий только для поднятия вопросов о библиотеке FirebaseUI, а не о самой Firebase. Иначе их просто закроют.   -  person Frank van Puffelen    schedule 30.08.2016


Ответы (2)


Скорее всего, ваше приложение Facebook все еще находится в режиме разработки, что означает, что вы должны явно добавить пользователей, которые имеют к нему доступ.

  1. перейти на сайт разработчиков.facebook.com
  2. выберите свое приложение
  3. нажмите Роли в меню слева.
  4. в разделе Testers добавьте Facebook ID пользователя, которому вы хотите предоставить возможность входа в систему.

Кроме того, вы можете сделать приложение общедоступным:

  1. перейти на сайт разработчиков.facebook.com
  2. выберите свое приложение
  3. нажмите Обзор приложения в меню слева.
  4. установите ползунок в разделе Сделать Holla общедоступным? на Да
person Frank van Puffelen    schedule 30.08.2016
comment
Я уже сделал это общедоступным, ничего не изменилось, к сожалению - person Dima Rostopira; 30.08.2016
comment
Во всяком случае, я тестировал на учетной записи, установленной как администратор. - person Dima Rostopira; 30.08.2016

Наконец-то я узнал, что использовал код клиента вместо секрета приложения :D Плохо, извините

person Dima Rostopira    schedule 31.08.2016
comment
У меня такая же ошибка, где именно вы изменили код? - person Bikash; 20.10.2016
comment
@bikash в FirebaseConsole - person Dima Rostopira; 20.10.2016
comment
Эта проблема унесла из моей жизни целый день! Спасибо - person d4c0d312; 10.05.2020