10

У меня возникла проблема, так как некоторые из моих устройств, на которых я тестирую свое приложение, не получают их уведомлений и не создают исключения.Некоторые устройства не получают уведомления FCM

Уведомления поступают из FCM, и я использую настраиваемую службу, чтобы показать их.

MyFirebaseMessaginService.java

static int count = 0; 
@Override 
public void onMessageReceived(final RemoteMessage remoteMessage) { 

    Log.i("remoteMessage",remoteMessage.toString()); 
    switch(remoteMessage.getData().get("tipo")){ 
     case "normal": 
      notificacionNormal(remoteMessage); 
      break; 
     case "imagen": 
      notificacionImagen(remoteMessage); 
      break; 
     case "imagen+url": 
      notificacionImagenUrl(remoteMessage); 
      break; 
    } 
    count++; 
    //Log.d("prueba",remoteMessage.getData().get("imagen")); 
} 

private void notificacionImagenUrl(RemoteMessage remoteMessage) { 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    i.setData(Uri.parse(remoteMessage.getData().get("url"))); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, i, PendingIntent.FLAG_ONE_SHOT); 

    NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notif = new Notification.Builder(this) 
      .setContentIntent(pendingIntent) 
      .setContentTitle(remoteMessage.getNotification().getTitle()) 
      .setContentText(remoteMessage.getNotification().getBody()) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) 
      .setStyle(new Notification.BigPictureStyle().bigPicture(getImagae(remoteMessage.getData().get("imagen")))) 
      .build(); 
    notif.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(count, notif); 

} 

На данный момент это происходит только в корневое устройство с андроид 6.0.1 надежды и может помочь мне :)

EDIT: запрос уведомления HTTP Посылаю :

"to": "/topics/general", 
     "notification" : { 
      "title": "title", 
      "body": "body", 
     }, 
     "data": { 
      "tipo": "normal", 
     } 
+0

Можете ли вы разместить свой образец полезной нагрузки? Кроме того, случается ли это только с некоторыми конкретными устройствами или их случайными на всех ваших тестовых устройствах? –

+0

@intj только на одном тестовом устройстве, и он не получает аниме (он даже не дошел до первого журнала), а игровые сервисы установлены на устройстве. Wath вы имеете в виду с playload? –

+0

Вы уверены, что 'registrationToken', соответствующий этому устройству, является получателем? Я имел в виду полезную нагрузку на уведомление. Или вы отправляете уведомления через консоль Firebase? –

ответ

1

Одна из возможных причин этого может заключаться в том, что некоторые из устройств, на которых вы тестируете, не имеют google play services или обновленную версию. В своей деятельности попробуйте проверить сервисы Google Play. Вы можете использовать функцию ответил here:

protected boolean checkPlayServices() { 
final int resultCode = 

GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity()); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, activity(), 
        PLAY_SERVICES_RESOLUTION_REQUEST); 
      if (dialog != null) { 
       dialog.show(); 
       dialog.setOnDismissListener(new OnDismissListener() { 
        public void onDismiss(DialogInterface dialog) { 
         if (ConnectionResult.SERVICE_INVALID == resultCode) activity().finish(); 
        } 
       }); 
       return false; 
      } 
     } 
     new CSAlertDialog(this).show("Google Play Services Error", 
       "This device is not supported for required Goole Play Services", "OK", new Call() { 
        public void onCall(Object value) { 
         activity().finish(); 
        } 
       }); 
     return false; 
    } 
    return true; 
} 
+0

Я уже проверил его, и это, похоже, проблема, но почему-то это выглядит так, что не находит функцию fcm : S –

0

это бывает на низких конечных устройств. Одним из решений является очистка данных приложения и кеша приложения Google Play Services. Эта работа для меня.

0

Я не знаю, работает ли это, но ваше сырое тело JSON ошибочно. Вы забыли {} снаружи как объект JSON. Ниже должно быть отправлено ваше сообщение.

{ 
    "to": "/topics/general", 
    "notification" : { 
     "title": "title", 
     "body": "body", 
    }, 
    "data": { 
     "tipo": "normal", 
    } 
} 
Смежные вопросы