Firebase Auth SignOut не работает при удалении - PullRequest
0 голосов
/ 09 мая 2018

Я использую метод входа с помощью метода Google для входа пользователя в мое приложение.

Проблемы - Обновление :

  1. Если я удаляю приложение (после выхода из системы или без выхода из системы) и переустанавливаю приложение, FirebaseAuth.getInstance (). GetCurrentUser () становится ненулевым. Итак, пользователь получает доступ к учетной записи.

  2. Я даже пытался очистить данные приложения, проблема все еще существует.

Приложение работало нормально до добавления служб FirebaseInstanceIdService и FirebaseMessagingService. Значит, это был автоматический выход после удаления.

Manifest.xml

    <meta-data   
android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id"/>
    <meta-data android:name="firebase_messaging_auto_init_enabled"
        android:value="false" />
    <meta-data android:name="firebase_analytics_collection_enabled"
        android:value="false" />

....

<service
        android:name=".services.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

    <service
        android:name=".services.MyFirebaseInstanceIDService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

....

MyFirebaseMessagingService.class

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MessagingService";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    Log.e(TAG, String.valueOf(remoteMessage));
}
}

MyFirebaseInstanceIDService.class

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

private static final String TAG = "InstanceIdService";

@Override
public void onTokenRefresh() {
    super.onTokenRefresh();

    if (FirebaseAuth.getInstance().getCurrentUser() == null){
        return;
    }

    String tokenId = FirebaseInstanceId.getInstance().getToken();

    saveTokenIdToDatabase(tokenId);
}
}

метод signOutAccount

private void signOutAccount(){

FirebaseAuth.getInstance.signOut();

            Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finishAffinity();
}

1 Ответ

0 голосов
/ 14 июня 2018

Вы не единственный, кто борется с этим. У меня была похожая проблема. После переустановки (или обновления) приложения в BaseActivity я проверил, вошел ли пользователь в систему. И он .. FirebaseAuth.getInstance().getCurrentUser() вернул ненулевое значение. Поэтому, когда я использовал uid для получения данных из базы данных Firebase, я получил беспорядок - некоторые случайные предметы.

Также обратите внимание, что я мог воспроизводить его только на некоторых устройствах . Например, я получил ненулевое значение на Nexus 5x , но не на Oneplue 3t (8.0.0).

После некоторого расследования я обнаружил несколько интересных фактов.

Факт № 1 ( документы )

В некоторых случаях getCurrentUser возвращает ненулевое значение FirebaseUser, но базовый токен недействителен.

На самом деле, когда getCurrentUser() != null, вы не можете быть уверены, что пользователь действительно вошел в систему. Я пришел к выводу, что я не могу полагаться на getCurrentUser, и мне следует пересмотреть способ проверки, вошел ли пользователь в систему ( как опция ).

Факт № 2

Приложение Android иногда запоминает свои данные после переустановки приложения из-за автоматическое резервное копирование. Подробнее смотрите в сообщении .

Решение

<application
  android:allowBackup="false"
  android:fullBackupContent="false"
  ...>

Я установил android:allowBackup и android:fullBackupContent в false. Поэтому, когда я переустанавливаю приложение (или обновляю его), текущим пользователем firebase является null.

...