GCM不可折叠消息始终替换先前的消息

时间:2014-12-30 22:42:31

标签: android google-cloud-messaging

我正在尝试通过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;
}
?>

2 个答案:

答案 0 :(得分:0)

GCM collapse key documentation,省略折叠键应该可以防止替换旧邮件。除非您的某些邮件已过期或您的设备未连接。

此外,带有notify method call的NOTIFICATION_ID在您的客户端应用程序中实现,而不是您的服务端代码。因此,如果您使用HTTP服务器,那么它应该不重要。您可以在客户端应用程序的广播接收器中参考this documentation有关NOTIFICATION_ID的信息。另外this StackOverflow answer关于如何生成唯一的NOTIFICATION_ID。

答案 1 :(得分:0)

我将回答我自己的问题。

有两种情况:

例如:当手机离线时(无wifi,无数据,关闭),您会发送两条消息

  1. 背景/杀死的应用 - 我只收到一个通知,但实际上我收到了两条数据消息

  2. 前景 - 我收到了两个通知

  3. 请记住不要添加&#34; collapse_key&#34;参数。

    希望这可以帮助其他人解决同样的问题。