10

Ho riscontrato un problema poiché alcuni dei miei dispositivi su cui sto testando la mia app non ricevono le loro notifiche e non generano eccezioni.Alcuni dispositivi non ricevono notifiche FCM

Le notifiche provengono da FCM e sto utilizzando un servizio personalizzato per mostrarle.

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

} 

Al momento succede solo in un dispositivo radicata con Android 6.0.1 Speranza u mi può aiutare :)

EDIT: La richiesta di notifica HTTP mando :

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

Puoi pubblicare il tuo payload campione? Inoltre, sta succedendo solo su alcuni dispositivi specifici o è casuale su tutti i tuoi dispositivi di test? –

+0

@intj sta accadendo solo su un dispositivo di test e non sta ottenendo anithing (non ha nemmeno raggiunto il primo log) e i servizi di riproduzione sono installati sul dispositivo. Cosa vuoi dire con un gioco? –

+0

Sei sicuro che il 'registrationToken' corrispondente a quel dispositivo sia un destinatario? Mi riferivo al carico utile della notifica. O stai inviando notifiche tramite la console di Firebase? –

risposta

1

una delle possibili ragioni di questo potrebbe essere che alcuni dei dispositivi su cui si sta testando non hanno google play services o la versione aggiornata di esso. Nella tua attività, prova a cercare i servizi di riproduzione di Google. È possibile utilizzare la funzione come risposta 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

L'ho già controllato e sembra che non sia il problema, ma in qualche modo sembra che non trovi il servizio fcm :S –

0

capita a volte su dispositivi di fascia bassa. Una soluzione consiste nel cancellare i dati dell'app e la cache dell'app Google Play Services. Questo lavoro per me.

0

Non so se questo funziona, ma il tuo corpo JSON non funzionante è sbagliato. Hai dimenticato il {} all'esterno come un oggetto JSON. Di seguito dovrebbe essere il tuo messaggio da inviare.

{ 
    "to": "/topics/general", 
    "notification" : { 
     "title": "title", 
     "body": "body", 
    }, 
    "data": { 
     "tipo": "normal", 
    } 
} 
Problemi correlati