使用新的GoogleCloudMessaging
API实现上游消息时我很困惑:
public void onClick(final View view) {
if (view == findViewById(R.id.send)) {
new AsyncTask() {
@Override
protected String doInBackground(Void... params) {
String msg = "";
try {
Bundle data = new Bundle();
data.putString("hello", "World");
String id = Integer.toString(msgId.incrementAndGet());
gcm.send(SENDER_ID + "@gcm.googleapis.com", id, data);
msg = "Sent message";
} catch (IOException ex) {
msg = "Error :" + ex.getMessage();
}
return msg;
}
@Override
protected void onPostExecute(String msg) {
mDisplay.append(msg + "\n");
}
}.execute(null, null, null);
} else if (view == findViewById(R.id.clear)) {
mDisplay.setText("");
}
}
我们使用SENDER_ID ID将消息(XMPP)发送到GCM服务器,那么我的第三方服务器如何仅使用SENDER_ID识别我的设备?
gcm.send(SENDER_ID + "@gcm.googleapis.com", id, data);
答案 0 :(得分:2)
您发布的代码会将消息从您的设备发送到第三台服务器,而不是另一台设备。您的服务器应与Cloud Connection Server建立连接,并且由于建立该连接需要使用SENDER_ID + "@gcm.googleapis.com"
作为用户名,因此GCM服务器可以识别您的第三方服务器。
当您的第三方服务器向您的设备发送消息时,它会使用注册ID,该ID可识别特定设备上的应用。
编辑:
我可能误解了你的问题。如果您询问第三方服务器如何知道哪个设备向其发送了上游消息,则第三方服务器收到的消息中包含发件人的注册ID,如您所见:
<message id="">
<gcm xmlns="google:mobile:data">
{
"category":"com.example.yourapp", // to know which app sent it
"data":
{
"hello":"world",
},
"message_id":"m-123",
"from":"REGID"
}
</gcm>
</message>
即使您在呼叫gcm.send(...)
时未指定注册ID,GCM也知道哪个设备发送了该消息,因此(假设您的应用已注册到GCM并因此具有注册ID),他们可以添加注册消息的ID(我不确定他们是否在连接GCM服务器之前在客户端添加它,或者如果在GCM服务器上添加它,但它并不重要)。