我将使用Google Cloud Messaging和XMPP来实现下行和上行消息的传输。仅在客户端,我通过以下方式在线程中生成一个令牌:
我将这个令牌发送到接收方服务器,然后可以使用该令牌向客户端发送消息。
然后,我可以在客户端使用以下内容发送上行消息:
在客户端发送的上行消息中,有一个名为
让我感到困惑的是
前18个字符左右是相同的,但之后它们非常不同。因此,是否有一种好的方法来识别哪个设备发送了什么消息?
我可以将每次由Instance ID生成的令牌存储在Bundle中,但我想知道是否有任何方法使上行消息的
编辑:使用已弃用的
但是使用InstanceID有没有办法做到这一点呢?
InstanceID instanceID = InstanceID.getInstance(this);
try {
String token = instanceID.getToken(getString(R.string.gcm_senderID), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
send_token(token, getString(R.string.gcm_senderID));
} catch (IOException e) {
e.printStackTrace();
}
我将这个令牌发送到接收方服务器,然后可以使用该令牌向客户端发送消息。
然后,我可以在客户端使用以下内容发送上行消息:
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
String msg;
Bundle data = new Bundle();
data.putString("message", message);
try {
messenger.send(getString(R.string.gcm_senderID) + "@gcm.googleapis.com", messageId.addAndGet(1) + "", data);
} catch (IOException e) {
e.printStackTrace();
}
msg = "Sent message";
return msg;
}
}.execute(null, null, null);
在客户端发送的上行消息中,有一个名为
from
的字段,看起来也是一个令牌。如果我从服务器端向此处发送一条消息,则我的手机也会收到该消息。让我感到困惑的是
from
字段中的令牌与InstanceID服务生成的令牌不相等。前18个字符左右是相同的,但之后它们非常不同。因此,是否有一种好的方法来识别哪个设备发送了什么消息?
我可以将每次由Instance ID生成的令牌存储在Bundle中,但我想知道是否有任何方法使上行消息的
from
字段与生成的ID一致。编辑:使用已弃用的
register
函数,我能够获得一致的注册ID。String token = GoogleCloudMessaging.getInstance().register(getString(R.string.gcm_senderID));
但是使用InstanceID有没有办法做到这一点呢?
register
函数了 :( - Clark