2017-12-06 3 views
1

Ich sende eine Benachrichtigung an Android durch PHP, und es wird normal auf Android.android Benachrichtigung Firebase

Aber wenn ich mehr als eins sende, wird nur das letzte angezeigt, und ich wollte, dass es alle anzeigt.

ist es möglich?

Wie kann ich das tun?

PHP

$msg = array 
      (
     'nome' => $comando, 
     ); 
    $fields = array 
      (
       'to' => $token, 
       'data' => $msg 
      ); 


    $headers = array 
      ( 
       'Content-Type: application/json', 
       'Authorization: key= KEY'    
      ); 

#Send Reponse To FireBase Server  
     $ch = curl_init(); 
     curl_setopt($ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
     curl_setopt($ch,CURLOPT_POST, true); 
     curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields)); 
     $result = curl_exec($ch); 
     curl_close($ch); 

#Echo Result Of FireBase Server 
echo $result; 

android

Intent intent = new Intent(this, MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       PendingIntent pendingIntent = PendingIntent.getActivity(this, 1410, 
         intent, PendingIntent.FLAG_UPDATE_CURRENT); 

       Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
       alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
       NotificationCompat.Builder notificationBuilder = new 
         NotificationCompat.Builder(this) 
         .setSmallIcon(R.mipmap.ic_launcher) 
         .setSound(alert) 
         .setContentTitle("teste") 
         .setContentText("teste "+msg+"!") 
         .setAutoCancel(true) 
         .setOnlyAlertOnce(true) 
         .setPriority(2) 
         .setContentIntent(pendingIntent); 

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

       notificationManager.notify(1410, notificationBuilder.build()); 

Antwort

2

Es ist einfach:

notificationManager.notify(1410, notificationBuilder.build()); 

Sie '1410' geschrieben haben, statt dass Unique_Integer_number jedes Mal vergeben.

einzigartig nicht jedes Mal erhalten:

Random random = new Random(); 
int m = random.nextInt(9999 - 1000) + 1000; 
1

alle Meldungen abbrechen, bevor die neue Benachrichtigung ..

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

notificationManager.notify(1410, notificationBuilder.build()); 
2

1410 aus dieser Zeile entfernen und auch PendingIntent Linie ändern .

PendingIntent pendingIntent = PendingIntent.getActivity(this, 1410, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 
notificationManager.notify(1410, notificationBuilder.build()); 

Fügen Sie diese Zeile hinzu, um eine eindeutige ID zu generieren, und verwenden Sie sie zur Benachrichtigung.

int id = (int) System.currentTimeMillis(); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
       notificationIntent, 0); 
notificationManager.notify(id, notificationBuilder.build()); 
+0

Wenn diese Antwort Ihnen hilft, dann können Sie es als richtige Antwort akzeptieren, indem Sie das Häkchen markieren. – Dharmishtha

1

Das Problem ist in dieser Zeile

notificationManager.notify(1410, notificationBuilder.build()); 

der erste Parameter id sollte für jede Meldung unterschiedlich sein. Andernfalls überschreibt es die vorherige.

Ein einfacher Weg ist, SharedPreference zu verwenden, um die ID zu erhalten und zu speichern. Und jedes Mal verwenden Sie eine inkrementierte. Siehe das Beispiel unten.

private int getNotificationId(){ 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); 
    int lastId=sp.getInt("notify_id",0); 
    sp.edit().putInt("notify_id",lastId+1).commit(); 
    return lastId; 
} 

notificationManager.notify(getNotificationId(), notificationBuilder.build()); 
1

In android Code, den Sie nur eine Benachrichtigung-ID verwenden, um es zu dynamisch ändern, und Sie werden alle Benachrichtigungen sehen. folgende Zeile

Änderung:

notificationManager.notify(getUniqueId(), notificationBuilder.build()); 

... 
private int getUniqueId() { 
    return (int) (System.currentTimeMillis()/1000); 
} 
1

Sie verwenden PendingIntent.FLAG_UPDATE_CURRENT und keine eindeutige ID für jeden Notification. Verwenden Sie dies für die Anzeige Notification -

Verwandte Themen