推送通知会覆盖以前的通知

时间:2015-09-29 13:32:51

标签: php android codeigniter google-cloud-messaging

我在codeigniter上使用codeigniter-gcm库向Google Cloud Messaging服务发送消息。它发送消息并在移动设备上接收消息,但如果我发送多条消息,则设备上只显示最新消息(就好像它覆盖了以前的消息一样)。

我发现我可能需要创建一个唯一的通知ID,但我在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);
}

2 个答案:

答案 0 :(得分:3)

经过三天的疲惫,我找到了解决方案。我在这里发帖是为了拯救别人的时间......

我必须在更大的JSON对象中添加一个参数,名为" notId"具有唯一的整数值(我选择使用宽范围的随机整数)。现在为什么谷歌没有在他们的文档中包含这个?打败我...

以下是我的JSON现在的样子,当它创建单独的通知而不是覆盖时:

AtomicInteger
  • 编辑: 我现在认为notId参数并非真正由Google确定,而是由我在移动应用端使用的插件确定。 为了进一步扩展我的环境,我的移动应用程序是使用Phonegap开发的,所以为了获得推送通知我使用phonegap-plugin-push,我现在在其文档中看到参数名称。 我有点儿'现在已经失去了解释情况 - 但很高兴它不再是我的问题: - )

答案 1 :(得分:1)

您需要为每个通知传递唯一ID。点击通知后,您可以使用该ID将其删除。

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