5

Sto utilizzando il nuovo FCM per inviare messaggi dal mio server alla mia app Android.Push non ricevuto quando l'app viene uccisa

 
{ 
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
    "data" : { 
     "Nick" : "Mario", 
     "Room" : "PortugalVSDenmark" 
    } 
} 

io sono in grado di spingere i messaggi per la mia app utilizzando il nuovo FCM tuttavia, quando uccido l'applicazione (premere a lungo il pulsante home quindi far scorrere l'applicazione a sinistra), spingere i messaggi non vengono consegnati più.

Perché?

+1

Puoi pubblicare il tuo carico? –

+0

Cosa intendi con il nuovo FCM? Stai inviando i messaggi dal tuo server delle app o stai utilizzando il compositore Firebase per inviare i messaggi? –

+0

sì sto inviando dal mio server – redochka

risposta

2

Controllare il carico utile non elaborato, ciò che viene ricevuto dal server. I tasti body e title devono avere la chiave notification per ricevere la notifica push quando l'app viene chiusa. Anche se riceverai notifiche solo nella barra delle notifiche quando l'app viene chiusa. payload del campione:

{ 
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
    "notification" : { 
     "body" : "great match!", 
     "title" : "Portugal vs. Denmark", 
     "icon" : "myicon" 
    }, 
    "data" : { 
     "Nick" : "Mario", 
     "Room" : "PortugalVSDenmark" 
    } 
    } 
+0

Hai ragione! L'aggiunta dell'oggetto di notifica mostra la notifica se la barra delle notifiche anche quando l'app è chiusa. Tuttavia, volevo che la mia app riceva il payload senza che l'utente faccia clic sulla notifica. C'è un modo per ottenere questo? – redochka

+0

No, verrà visualizzato nella barra delle notifiche solo quando l'app è chiusa e toccando tale notifica è possibile visualizzare altre informazioni dal payload. – Avijit

+0

Ho notato che quando l'oggetto di notifica viene aggiunto al messaggio push, il payload non viene consegnato all'app anche quando è in esecuzione in background e richiede all'utente di toccare la notifica prima che il payload venga consegnato. Questo è un no-go. Questo è diverso da GCM. – redochka

0

La chiave di questo problema è che si deve creare esattamente lo stesso formato JSON:

{ 
    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...", 
    "notification" : { 
     "body" : "You have a new message", 
     "title" : "", 
     "icon" : "myicon" // Here you can put your app icon name 
    } 
} 

io uso per perdere il tag "icona", che mi fa posso che avere la notifica quando l'app è in background. Una volta che hai il corretto formato JSON, sarai in grado di ricevere la notifica quando l'app viene uccisa.

+0

Non sto cercando di ottenere la notifica nella barra delle applicazioni. Voglio che il carico utile venga consegnato all'app in background. – redochka

+0

Ancora non ricevo la notifica quando l'app viene uccisa, usando lo stesso json. – WISHY

1

Ho notato che ottengo un comportamento diverso a seconda di come è stata lanciata l'app prima di chiuderla, per quanto bizzarra possa sembrare.

Se lancio l'applicazione con un debugger e lo faccio scorrere, non ricevo più notifiche FCM. Se quindi avvio l'app dall'icona di avvio, ricevo le notifiche FCM e, se faccio scorrere l'app "avviata dal programma di avvio", continuo a ricevere le notifiche FCM. Ho questo comportamento su un Galaxy S4 e un Sony Xperia Z2.

Dato che il modo più semplice per me per ottenere l'ultima versione del app sul telefono sul app è quello di colpire il debug, questo è qualcosa che devo continuare a ricordare:

Quando si strisciare chiuso, lanciarlo nuovamente dall'icona di avvio e scorrere di nuovo. (Almeno se stai testando il comportamento di notifica di FCM quando l'app non è in esecuzione).

Tratto da: https://github.com/firebase/quickstart-android/issues/41

0

tuo JSON notifica dovrebbe includere

"notification" : { 
     "body" : "great match!", 
     "title" : "Portugal vs. Denmark", 
     "icon" : "myicon" 
    }, 

per mostrare un messaggio nella barra delle notifiche utilizzando la funzionalità di default di Firebase quando l'applicazione è chiusa. Scopri this per ulteriori informazioni

alternativa

onMessageReceived dovrebbe far scattare in tutti i casi, in modo da poter generare la notifica utilizzando

private void sendNotification(String messageBody) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("FCM Message") 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    }