2015-09-29 2 views
1

Я пользуюсь codeigniter-gcm библиотекой поверх codeigniter для отправки сообщений службе Google Cloud Messaging. Он отправляет сообщение, и сообщение принимается на мобильном устройстве, но если я отправляю несколько сообщений, на устройстве появляется только последнее сообщение (как если бы оно перекрывало предыдущие сообщения).Push-уведомление отменяет предыдущие уведомления

Я вижу, что мне может понадобиться создать уникальный идентификатор уведомления, но я не вижу, как это делается где-либо в документации codeigniter-gcm или документации Google для последующих сообщений.

Любая идея, как это сделать?

Вот мой код в контроллере codeigniter. Стоит отметить, что реакция Google содержит различные MESSAGE_ID для каждого времени я посылаю толчок ...

public function index() { 
    $this->load->library("gcm"); 
    $this->gcm->setMessage("Test message sent on " . date("d.m.Y H:i:s")); 
    $this->gcm->addRecepient("*****************"); 
    $this->gcm->setData(array(
     'title' => 'my title', 
     'some_key' => 'some_val' 
    )); 
    $this->gcm->setTtl(false); 
    $this->gcm->setGroup(false); 
    if ($this->gcm->send()) 
     echo 'Success for all messages'; 
    else 
     echo 'Some messages have errors'; 

    print_r($this->gcm->status); 
    print_r($this->gcm->messagesStatuses); 
} 
+0

В PHP-коде нет проблемы. но его от андроида, насколько я знаю. в android есть один целочисленный параметр при генерации уведомления. этот параметр должен быть разным все время, когда вам нужно создать новый notificaiton –

+0

Hi Aiyaz, спасибо за ответ. Я подозревал, что мне нужно создать уникальное значение где-нибудь, но я не могу понять, где и не мог найти ссылки на документацию Google. Любая идея, какое имя параметра я должен добавить к объекту JSON? – yosi1984

+0

эй yosi просто проверьте это 'http: // stackoverflow.com/ questions/20856409/gcm-message-is-getting-overridden/20856525 # 20856525' –

ответ

1

Вам необходимо пройти уникальный идентификатор для каждого уведомления. После того как вы нажали на уведомление, вы используете этот идентификатор, чтобы удалить его.

... 
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID_A); 
... 

Но я уверен, что у вас не должно быть так много уведомлений для пользователя сразу. Вы должны показать одно уведомление, которое объединяет информацию о группе событий, например, как клиент Gmail. Для этой цели используйте Notification.Builder.

NotificationCompat.Builder b = new NotificationCompat.Builder(c); 
    b.setNumber(g_push.Counter) 
    .setLargeIcon(BitmapFactory.decodeResource(c.getResources(), R.drawable.list_avatar)) 
    .setSmallIcon(R.drawable.ic_stat_example) 
    .setAutoCancel(true) 
    .setContentTitle(pushCount > 1 ? c.getString(R.string.stat_messages_title) + pushCount : title) 
    .setContentText(pushCount > 1 ? push.ProfileID : mess) 
    .setWhen(g_push.Timestamp) 
    .setContentIntent(PendingIntent.getActivity(c, 0, it, PendingIntent.FLAG_UPDATE_CURRENT)) 
    .setDeleteIntent(PendingIntent.getBroadcast(c, 0, new Intent(ACTION_CLEAR_NOTIFICATION), PendingIntent.FLAG_CANCEL_CURRENT)) 
    .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE) 
    .setSound(Uri.parse(prefs.getString(
      SharedPreferencesID.PREFERENCE_ID_PUSH_SOUND_URI, 
      "android.resource://ru.mail.mailapp/raw/new_message_bells"))); 
+0

1.Возможно, мне потребуется отправить 2-3 различных типа уведомлений за короткий промежуток времени, поэтому я не обязательно хочу группировать их вместе. 2. Как установить уникальный идентификатор объекта JSON, который я отправляю в GCM? Что такое имя параметра? 3. Я действительно пишу свой серверный код на PHP, поэтому Notification.Builder не будет работать для меня. Вы знаете какой-либо эквивалент PHP? – yosi1984

+0

Хорошо, но если ваша проблема - уведомление ovveride, это из-за ID. Вам просто нужно менять его каждый раз –

+0

Это именно то, что я пытаюсь понять, как это сделать ... Спасибо, Джакомо! – yosi1984

3

После трех изнурительных дней я нашел решение. Я размещаю его здесь в надежде сохранить чужие времена ...

Мне пришлось добавить параметр к объекту данных внутри большего объекта JSON с именем «notId» с уникальным целочисленным значением (которое я выбрал используйте случайное целое из широкого диапазона). Теперь почему Google не включил это в свои документы? Бьет меня ...

Вот как мой JSON выглядит теперь, когда он создает отдельные уведомления вместо переопределения:

{ 
    "data": { 
       "some_key":"some_val", 
       "title":"test title", 
       "message":"Test message from 30.09.2015 12:57:44", 
       "notId":14243 
      }, 
    "registration_ids":["*******"] 
} 
  • Edit: я теперь думаю, что параметр notId не действительно определяется Google, но плагин, который я использую на стороне мобильного приложения. Чтобы расширить свое окружение, мое мобильное приложение разработано с помощью Phonegap, поэтому для получения push-уведомления я использую phonegap-plugin-push, который теперь я вижу в своих документах, что имя параметра. Я как бы потерял сейчас, насколько объясняю ситуацию, но счастлив, что это уже не проблема для меня :-)
Смежные вопросы