Firebase Auth SignOut 在卸载时不起作用



我正在使用"使用 Google 登录"方法在我的应用中登录用户。

问题 -更新

  1. 如果我卸载应用程序(在注销或不注销后(并重新安装该应用程序,FirebaseAuth.getInstance((.getCurrentUser(( 将变为非空值。因此,用户可以访问该帐户。

  2. 我什至尝试清除应用程序数据,问题仍然存在。

在添加"FirebaseInstanceIdService"和"FirebaseMessagingService"服务之前,该应用程序运行良好。意味着,它在卸载后自动注销。

清单.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);
}
}

登录帐户方法

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();
}

你不是唯一一个为此苦苦挣扎的人。我有类似的问题。重新安装(或更新(应用程序后,在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:allowBackupandroid:fullBackupContent设置为假。因此,当我重新安装(或更新它(时,Firebase 当前用户null

相关内容

  • 没有找到相关文章