Пользовательский интерфейс Firebase - Facebook, Google и адрес электронной почты не работают - PullRequest
0 голосов
/ 09 марта 2019

Я использую Firebase UI в моем приложении для входа в систему. все работает нормально, когда я запускаю его в режиме отладки - никаких ошибок вообще. Я запускаю его через свой мобильный телефон, и он отлично работает!

Моя проблема начинается, когда я загружаю свое приложение в игровой магазин. Когда пользователь пытается войти через Facebook, он сообщает, что ключ хеша не соответствует ни одному из сохраненных хэшей. Я проверил несколько раз в Facebook Developers и в моей Android Studio и тот же хеш-ключ.

У меня также появляется «Ошибка разработчика» при попытке войти в систему с помощью Google. Понятия не имею, почему ...

А также Ошибка входа в систему с помощью «Электронной почты и пароля» - пользователь вводит свою электронную почту и пароль, и ничего не происходит. Просто оставайся на той же активности.

Я не уверен, что мне делать, если я создам релиз SHA-1? или что-то еще, что я здесь упускаю.

Вот мой логин

        public void startSignIn(){
    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER)
                    .setPermissions(Arrays.asList(Scopes.PROFILE,Scopes.EMAIL)).build(),
            new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
            new AuthUI.IdpConfig.Builder(AuthUI.FACEBOOK_PROVIDER).build());
    Intent intent = AuthUI.getInstance()
            .createSignInIntentBuilder()
            .setAvailableProviders(providers).build();
    startActivityForResult(intent,RC_SIGN_IN);
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RC_SIGN_IN){
        IdpResponse idpResponse = IdpResponse.fromResultIntent(data);
        if(idpResponse != null && resultCode == RESULT_OK){
            currentUser = FirebaseAuth.getInstance().getCurrentUser();

            //check if the user is exists by userUID. if he is, it jumps to main activity
            refToUsers.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.hasChild(currentUser.getUid())){

                        Intent mainActivity = new Intent(getApplicationContext(), MainActivity.class);
                        mainActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(mainActivity);
                    }else{
                        //if the user is not exists it will move to register activity
                        Intent registerActivity = new Intent(getApplicationContext(), RegisterActivity.class);
                        registerActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(registerActivity);
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d(TAG,databaseError.getMessage());
                }
            });



        }else if (idpResponse.getErrorCode() == ErrorCodes.NO_NETWORK) {
            errorToast("No internet connection");

        }else if (idpResponse.getErrorCode() == ErrorCodes.UNKNOWN_ERROR) {
            errorToast("Unknown Error");
        }
    }

Простой код, но по какой-то причине не работает ...

1 Ответ

0 голосов
/ 09 марта 2019

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

Если вы успешно опубликовали свое приложение в магазине Play, значит, вы уже сгенерировали требуемый отпечаток сертификата SHA-1. И да, это ключ подписи релиза, который требуется для опубликованных приложений.

Вот как получить требуемый ключ подписи из вашей консоли Google Play :

  1. Войдите в консоль Google Play.
  2. Выберите ваше приложение из списка.
  3. В левом меню выберите «Управление выпуском» со значком ракеты.
  4. Выберите «Подписание приложения» в расширенном меню «Управление выпусками».
  5. В разделе «Сертификат подписи приложения» вы увидите отпечатки сертификатов SHA1, SHA256 и MD5. Скопируйте тот, который вам нужен, и используйте его.

Вам также необходимо добавить этот отпечаток SHA1 на консоль Firebase :

  1. Войдите в консоль Firebase.
  2. Выберите проект Firebase.
  3. Перейдите в «Настройки проекта» значок шестеренки рядом с кнопкой «Обзор проекта» в меню слева.
  4. На вкладке Общие прокрутите вниз до раздела «Ваши приложения», в котором перечислены детали проекта. Вы должны были загрузить отсюда google-services.json ранее.
  5. Добавьте сюда свой отпечаток SHA1.
  6. Загрузите свежую копию файла google-services.json .
  7. Используйте этот новый файл json с вашим проектом вместо старого, так как вы изменили конфигурацию Firebase и должны будете перекомпилировать приложение.

Надеюсь, это поможет.

Полезные ссылки:

https://developer.android.com/studio/publish/app-signing

Как включить Google Play App Signing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...