Уведомление отправляется на мобильный после выхода из учетной записи Google, даже если вход в другой аккаунт - PullRequest
0 голосов
/ 06 сентября 2018

Я использую FCM для генерации notification для моего мобильного приложения. это работает хорошо, но когда я выхожу из учетной записи и захожу с другой учетной записью, я заметил, что отправлено уведомление, относящееся к первой учетной записи. Как я могу решить это препятствие ?? Я использую Google Войти sendTotopic Служба сообщений

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

это моя форма входа

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Выполните следующие 2 шага для эффективного рассмотрения этого дела

  1. Во время выхода из системы сделайте вызов API и очистите Токен устройства на локальном сервере, чтобы я не отправлял уведомление. Уведомления отправляются только на основе Токена устройства.
  2. Когда новый пользователь, пытающийся войти в приложение, идентифицирует на локальном сервере, доступен ли токен устройства или нет. Если он доступен, укажите его как NULL и вставьте токен, соответствующий новому зарегистрированному пользователю
0 голосов
/ 06 сентября 2018

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

Если вы хотите настроить таргетинг на пользователя для обмена сообщениями, а не на целевое устройство, вам необходимо сохранить сопоставление всех токенов устройства в uid пользователя. Затем, если пользователь захочет выйти из системы, вам нужно будет отсоединить токен устройства от этого UID, чтобы они больше не получали сообщения.

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