从Google帐户注销后,即使使用其他帐户登录,通知也会发送到移动设备



我正在使用FCM为我的移动应用程序生成notification。 它工作得很好,但是当我从帐户注销并使用另一个帐户登录时,我注意到发送了与第一个帐户相关的通知。 我该如何解决这个障碍? 我正在使用谷歌登录 发送到主题 消息传递服务

public class FirebaseMessagingService extends 
com.google.firebase.messaging.FirebaseMessagingService {
public static final String TOKEN_BROADCAST = "mytokenbroadcast";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//____ID _____
int id = (int) System.currentTimeMillis();
//_____NOTIFICATION ID'S FROM FCF_____
String messageTitle = remoteMessage.getNotification().getTitle();
String messageBody = remoteMessage.getNotification().getBody();
String click_action = remoteMessage.getNotification().getClickAction();
String companyposition = remoteMessage.getData().get("id");
//String dataFrom=remoteMessage.getData().get("fromuserid");
NotificationCompat.Builder builder =
new NotificationCompat
.Builder(this, getString(R.string.default_notification_channel_id))
.setSmallIcon(R.drawable.m)
.setContentTitle(messageTitle).setContentText(messageBody);
Intent resultIntent = new Intent(click_action);
resultIntent.putExtra("CompanyPosition", companyposition);
// resultIntent.putExtra("fromuserid",dataFrom);
PendingIntent pendingIntent =
PendingIntent.getActivity(this, 0, resultIntent, 
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
//____FOR OREO AND HIGHER VERSIONS_____
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ) {
int importance = NotificationManager.IMPORTANCE_HIGH;
String channelID = BuildConfig.APPLICATION_ID;
NotificationChannel channel = new NotificationChannel
(getString(R.string.default_notification_channel_id), 
BuildConfig.APPLICATION_ID, importance);
channel.setDescription(channelID);
NotificationManager notificationManager = 
getSystemService(NotificationManager.class);
//assert notificationManager != null;
notificationManager.createNotificationChannel(channel);
}
NotificationManager notificationManager = (NotificationManager) 
getSystemService(NOTIFICATION_SERVICE);
assert notificationManager != null;
notificationManager.notify(id, builder.build());
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
FirebaseInstanceId.getInstance().getInstanceId()
.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult)
{
String newToken = instanceIdResult.getToken();
storeToken(newToken);
}
});
}
private void storeToken(String token) {
SharedPrefManager.getmInstance(getApplicationContext()).storeToken(token); 
}}

这是我的登录表单

当您将设备令牌从客户端发送到服务器时,它会标识硬件设备本身,而不是经过身份验证的用户。 这与主题消息类似 - 当您向主题发送消息时,设备决定是否接收这些消息,这与最终用户的登录状态无关。

如果要以用户为目标进行消息传递,而不是以设备为目标,则必须将所有设备令牌的映射存储到用户的 uid。 然后,如果用户想要注销,则必须取消设备令牌与该 UID 的关联,以便他们不再接收消息。

请遵循以下 2 个步骤来有效处理此情况

  1. 在注销时,进行 api 调用并清除本地服务器中的设备令牌,这样我就不会发送通知。仅根据设备令牌发送通知。
  2. 当新用户尝试登录到本地服务器中的应用程序标识时,设备令牌是否已经可用。如果可用,则将其设为NULL并插入与新登录用户对应的令牌

相关内容

  • 没有找到相关文章

最新更新