2016-04-21 7 views
1

ich auf eine Chat-Anwendung am arbeiten und versuchen, Google Cloud Messaging nach diesem Tutorial zu verwenden:Android GCM-Nachrichten wiederholt

http://hmkcode.com/android-google-cloud-messaging-tutorial/

Es funktioniert gut, aber die Benachrichtigungen werden mehr als einmal geliefert , ie: wenn ich "Hallo" sende, wird es wie sechs Benachrichtigungen sein, die "Hallo" sagen !! Das Minimum sind 2 Benachrichtigungen.

onHandleIntent Methode:

protected void onHandleIntent(Intent intent) { 
    Bundle extras = intent.getExtras(); 

GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 

String messageType = gcm.getMessageType(intent); 

mes = extras.getString("content"); 

if(mes==null) 
    return; 

db=new AppDatabase(this); 

boolean isforeground = isForeground("packageName"); 

MessageData data = new MessageData(); 
data.setTitle(extras.getString("title")); 
data.setContent(extras.getString("content")); 

data.setSend_user_name(extras.getString("send_user_name")); 


SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
String currentDateandTime = sdf.format(new Date()); 

data.setDate(currentDateandTime); 


if (isforeground) { 

    String activity_group_id = Integer 
      .toString(MessageActivity.group_id); 

    if (extras.getString("group_id").equals(activity_group_id)) { 

     MessageHandler.messageView.addMsg(data); 
    } else { 
     showToast(data); 
    } 

} else { 
    showToast(data); 
} 

Log.i("GCM", 
     "Received : (" + messageType + ") " 
       + extras.getString("title")); 

GcmBroadcastReceiver.completeWakefulIntent(intent); 

}

hier ist der Code von isForeground Methode

public boolean isForeground(String myPackage) { 
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager 
      .getRunningTasks(1); 
    ComponentName componentInfo = runningTaskInfo.get(0).topActivity; 

    return componentInfo.getClassName().equals(myPackage); 
} 
+0

Bitte Postleitzahl der GcmListener Service Klasse. – Dhruv

+0

können Sie zwei Empfänger haben. – inkedTechie

+0

ok Ich schließe die App eines anderen Entwicklers ab, also bin ich nicht sehr gut bei GCM meinst du GCM-Handler-Klasse? – Radwa

Antwort

0

Nicht berechtigt Kommentar hat so diese in einer Antwort zu schreiben. Es ist gut, dass Sie versuchen, den GCM-Server zu verwenden, anstatt einen eigenen Server zu verwenden. Aber wenn Sie Zeit haben, schauen Sie sich die socket.io-Bibliothek für Android an. Sie müssten node.js auch dafür verstehen. Nur ein Vorschlag für eine bessere App.

+0

leider habe ich keine Zeit aber trotzdem danke – Radwa

1

Überprüfen Sie den folgenden offiziellen GCM-Thread, der definiert, dass ein Fehler von der Google-Seite vorliegt.

https://groups.google.com/forum/#!topic/android-gcm/EHZUTEJMeyw

Vorerst als Lösung, was Sie tun können, ist, dass vom Server zusammen mit der GCM Antwort, einige zufällige eindeutige ID übergeben und die GCM Nachricht verarbeitet nur, wenn ID eindeutig ist, da diese id würde auch doppelte ID sein, dass die GCM-Nachricht dupliziert wird.

+0

es wäre keine große Sache, wenn es nur einmal am meisten dupliziert mal sende es trotzdem sechs benachrichtigungen danke ich werde deine lösung ausprobieren – Radwa