我正在尝试通过Google Cloud Messaging发送非崩溃消息。由于某种原因,新消息总是替换前一个消息。我试过使用不同的折叠键没有效果。省略折叠键也不起作用。可能是什么问题?
这是一个示例代码:
<?php
$ids[] = '<notification registration id of the test phone>';
sendNotification($ids, "test message 1", "key1");
sendNotification($ids, "test message 2", "key2");
function sendNotification($ids, $message, $collapseKey)
{
$apiKey = '<api key here>';
$url = 'https://android.googleapis.com/gcm/send';
$data['title'] = 'AppName';
$data['message'] = $message;
$post['registration_ids'] = $ids;
$post['data'] = $data;
if ($collapseKey) {
$post['collapse_key'] = $collapseKey;
}
$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $post ) );
$result = curl_exec( $ch );
if ( curl_errno( $ch ) )
{
echo 'GCM error: ' . curl_error( $ch );
}
curl_close( $ch );
echo $result;
}
?>
答案 0 :(得分:0)
从GCM collapse key documentation,省略折叠键应该可以防止替换旧邮件。除非您的某些邮件已过期或您的设备未连接。
此外,带有notify method call的NOTIFICATION_ID在您的客户端应用程序中实现,而不是您的服务端代码。因此,如果您使用HTTP服务器,那么它应该不重要。您可以在客户端应用程序的广播接收器中参考this documentation有关NOTIFICATION_ID的信息。另外this StackOverflow answer关于如何生成唯一的NOTIFICATION_ID。
答案 1 :(得分:0)
我将回答我自己的问题。
有两种情况:
例如:当手机离线时(无wifi,无数据,关闭),您会发送两条消息
背景/杀死的应用 - 我只收到一个通知,但实际上我收到了两条数据消息
前景 - 我收到了两个通知
请记住不要添加&#34; collapse_key&#34;参数。
希望这可以帮助其他人解决同样的问题。