google.message_id的格式在GCM中的含义是什么?

时间:2016-09-12 05:15:59

标签: android push-notification google-cloud-messaging

我需要实现一个功能,我的应用服务器可以获得有关Android客户端收到GCM推送通知消息的回复。所以我编写了一个XMPP应用服务器来连接GCM以实现推送通知功能。 首先,我使用http连接到GCM的POST消息:

        // Create connection to send GCM Message request.
        URL url = new URL("https://android.googleapis.com/gcm/send");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Authorization", "key=" + API_KEY);
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);

        // Send GCM message content.
        OutputStream outputStream = conn.getOutputStream();
        outputStream.write(jGcmData.toString().getBytes());

        // Read GCM response.
        InputStream inputStream = conn.getInputStream();
        String resp = IOUtils.toString(inputStream);
        System.out.println(resp);

我得到了成功回应:

  

{" MESSAGE_ID":5112490523075894883}

然后我的应用收到通知:

public class MyGcmListenerService extends GcmListenerService {

private static final String TAG = "MyGcmListenerService";

@Override
public void onMessageReceived(String from, Bundle data) {
    String message = data.getString("message");
    Log.d(TAG, "From: " + from);
    Log.d(TAG, "Message: " + message);

    String messageId = data.getString("google.message_id");
    Log.d(TAG, "Message id : " + messageId);
    .....
   }
    ....
 }

我收到了resposne日志:

  

消息ID:0:1473650899594799%744ab298f9fd7ecd

我的XMPP服务器从GCM获取上游消息:

private void sendAck(String to, String msg_id) {
JsonObject jPayload = new JsonObject();
jPayload.addProperty("to", to);
jPayload.addProperty("message_id", msg_id);
jPayload.addProperty("message_type", "ack");

Gson gson = new GsonBuilder().setPrettyPrinting().create();
final String payload = gson.toJson(jPayload);
Stanza stanza = new Stanza() {
  @Override
  public CharSequence toXML() {
    return wrapWithXML(payload);
  }
};

logger.info("sending ack: " + stanza);
smackCcsClient.sendStanza(stanza);
}

当然,我的XMPP服务器收到了响应。

<code>
    sending ack: <message><gcm xmlns="google:mobile:data">{
    "to": "eE3z_9KSnME:APA91bG36ijVaoKBXi-  H2Pi4cieFp2_HYmXsAZ5M2pkHLqS2Xxyr1LwfIPfbO_ZfcVSEO_y9r2H76y-V1Ql3x9jGZ_apvTkZUTPEWD9972gDHBFI0Glb04ajRliULbc19LHiiPaOWZ_2",
   "message_id": "0:1473650899594799%744ab298f9fd7ecd",
   "message_type": "ack"}</gcm></message>
</code>

我发现XMPP服务器和客户端应用程序中的消息ID是相同的。但格式&#34; 0:1473650899594799%744ab298f9fd7ecd&#34; 是什么意思?什么是&strong>&#34; 0:1473650899594799%744ab298f9fd7ecd&#34; 和&#34; 5112490523075894883&#34; 之间的关系?

我想知道在将消息发送给GCM之后,这两个响应的消息是什么,以及http呼叫和XMPP服务器之间的一对一对应。

我尝试了很多次:

  1.   

    服务器接收消息ID:5242809308476536544
      客户端收到消息ID:0:1473670928604617%744ab298f9fd7ecd

  2.   

    服务器接收消息ID:9216122830970130711
      客户端收到消息ID:0:1473671350517288%744ab298f9fd7ecd

  3.   

    服务器接收消息ID:5133661789983197332
      客户端收到消息ID:0:1473671927731592%744ab298f9fd7ecd

  4. 我确实需要你的帮助才能找出这种关系。非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

据我所知,这些消息ID之间没有任何关系,因为HTTP和XMPP是两个不同的连接服务器。

正如Implementing GCM Server中所述,您可以决定使用哪些GCM连接服务器来实施您的应用服务器。

此外,如文档中所述,message_id是唯一标识HTTP或XMPP连接的关联消息的字符串。

有关详细信息,您还可以查看以下参考资料: