2016-04-21 3 views
1

Я работаю над приложением чата и пытаюсь использовать Google Cloud Messaging после этого урока:Android GCM сообщение повторено

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

Он отлично работает, но уведомления доставляются более чем один раз , ie: если я отправлю «привет», то будет шесть уведомлений, говорящих «привет» !! Минимум - 2 уведомления.

метод onHandleIntent:

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

}

здесь код метода isForeground

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

Пожалуйста, отправьте код класса обслуживания GcmListener. – Dhruv

+0

Возможно, у вас есть два приемника. – inkedTechie

+0

ok Я дополняю приложение другого разработчика, так что я не очень хорошо разбираюсь в GCM Вы имеете в виду класс обработчика GCM? – Radwa

ответ

0

не имеют права комментировать так должен размещать это в ответе. Хорошо, что вы пытаетесь использовать сервер GCM вместо того, чтобы ваш собственный сервер выполнял эту работу. Но если у вас есть время, проверьте библиотеку socket.io для Android. Вам также нужно понять node.js. Просто предложение для создания лучшего приложения.

+0

К сожалению, у меня нет времени, но спасибо в любом случае – Radwa

1

Пожалуйста, проверьте следующий официальный поток GCM, который определяет, что есть некоторая ошибка со стороны Google.

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

На данный момент в качестве решения, что вы можете сделать, что наряду с ответом GCM с сервера, пройти некоторый случайный уникальный идентификатор и обработать сообщение GCM только если ID является уникальным, так как этот идентификатор также будет дублировать идентификатор, который дублирует сообщение GCM.

+0

, это было бы неважно, если он только дублируется, как только большая часть так как он отправил шесть уведомлений в любом случае, спасибо, я попробую ваше решение – Radwa

Смежные вопросы