我在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);
}
答案 0 :(得分:3)
经过三天的疲惫,我找到了解决方案。我在这里发帖是为了拯救别人的时间......
我必须在更大的JSON对象中添加一个参数,名为" notId"具有唯一的整数值(我选择使用宽范围的随机整数)。现在为什么谷歌没有在他们的文档中包含这个?打败我...
以下是我的JSON现在的样子,当它创建单独的通知而不是覆盖时:
AtomicInteger
答案 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")));