我正在使用gcm将通知推送到一个或多个设备,但我经常收到错误消息:"发件人ID不匹配"。
这是我的代码:
rasdial "MYVPNNAMEHERE" "MYUSERNAME" "MYPASSWORD" /DOMAIN:MYNETWORK
此外,当我使用public static void post(String apiKey){
try{
// prepare JSON
JSONObject jGcmData = new JSONObject();
JSONObject jData = new JSONObject();
jData.put("message", "{good luck}");
jGcmData.put("to","token ID");
jGcmData.put("data", jData);
// 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=" + apiKey);
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);
} catch (IOException e) {
System.out.println("Unable to send GCM message. "+e);
}
}
代替jGcmData.put("to","/topics/foo-bar");
时,可以成功发送通知。但我想要的是将通知推送到选定的设备。
答案 0 :(得分:0)
对于不匹配的发件人ID :
尝试卸载应用并再次运行。这将清除应用的任何已创建的密钥。
注册令牌与某组发件人绑定。当客户端应用程序注册GCM时,它必须指定允许哪些发件人发送消息。在向客户端应用程序发送消息时,您应该使用其中一个发件人ID。如果您切换到其他发件人,现有的注册令牌将无效。
根据此SO answer,“”mismatchSenderId发生,因为同一设备中的应用已使用不同的密钥记录。“”
有关主题订阅/主题发送
这可能与此Subscribe to topics suddenly throws "java.io.IOException: InternalServerError"有关,它表示“我们发现我们支持的问题在过去24小时内影响了一小部分主题订阅。此问题已得到修复,订阅应该可以在所有设备上正常运行。“
我希望这会对你有所帮助。