是否存在java.lang.IllegalArgumentException异常尝试发送gcm消息??
当试图从我的应用服务器向GCM服务器发送消息时,我收到java.lang.IllegalArgumentException异常。在客户端注册成功是否存在java.lang.IllegalArgumentException异常尝试发送gcm消息??,java,android,google-cloud-messaging,Java,Android,Google Cloud Messaging,当试图从我的应用服务器向GCM服务器发送消息时,我收到java.lang.IllegalArgumentException异常。在客户端注册成功 import java.util.ArrayList; import com.google.android.gcm.server.Message; import com.google.android.gcm.server.MulticastResult; import com.google.android.gcm.server.Sender; cl
import java.util.ArrayList;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Sender;
class Notify {
public static void main(String args[]) {
try {
Sender sender = new Sender(
"AIzaSyCd9HdSlq51nLzoqxMaFLsxWaoxxIz6-bU");
ArrayList<String> devicesList = new ArrayList<String>();
devicesList.add("APA91bFzbdNTf5CVsnSpkPJxMTCUCnjruluaerQcONQq9f20aaHw1CMNcVFgBsnLd6gUQT5TxrV2WY5WBw9U9u4Paj3dAXgRbaATc9a2Gp0voF3h5elX3Be0r3xw3Kun2HZT1m3D8L6IwCkXtTiILIfVasiKd2uN3w");
devicesList.add("APA91bFzbdNTf5CVsnSpkPJxMTCUCnjruluaerQcONQq9f20aaHw1CMNcVFgBsnLd6gUQT5TxrV2WY5WBw9U9u4Paj3dAXgRbaATc9a2Gp0voF3h5elX3Be0r3xw3Kun2HZT1m3D8L6IwCkXtTiILIfVasiKd2uN3w");
// use this line to send message with payload data
Message message = new Message.Builder()
.collapseKey("1")
.timeToLive(3)
.delayWhileIdle(true)
.addData("message",
"this text will be seen in notification bar!!")
.build();
// Use this for multicast messages
MulticastResult result = sender.send(message, devicesList, 1);
sender.send(message, devicesList, 1);
System.out.println(result.toString());
if (result.getResults() != null) {
int canonicalRegId = result.getCanonicalIds();
if (canonicalRegId != 0) {
}
} else {
int error = result.getFailure();
System.out.println(error);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
这就是我的问题,你的AIzaSyCd9HdSlq51nLzoqxMaFLsxWaoxxIz6 bU的问题-使用另一个。你的AIzaSyCd9HdSlq51nLzoqxMaFLsxWaoxxIz6 bU的问题-使用另一个。阅读响应部分有问题。应该是这样的:
MulticastResult multiResult = sender.send(message, devicesList, 1);
List<Result> results = multiResult.getResults();
for (int i = 0; i < results.size(); i++) {
Result result = results.get(i);
if (result.getMessageId() != null) {
// Success
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// same device has more than one registration id.Update it
}
} else {
// Error occurred
String error = result.getErrorCodeName();
}
}
阅读响应部分存在问题。应该是这样的:
MulticastResult multiResult = sender.send(message, devicesList, 1);
List<Result> results = multiResult.getResults();
for (int i = 0; i < results.size(); i++) {
Result result = results.get(i);
if (result.getMessageId() != null) {
// Success
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// same device has more than one registration id.Update it
}
} else {
// Error occurred
String error = result.getErrorCodeName();
}
}
虽然上面的答案被选中了,但我相信这就是原因
master解决了这个问题,但SDK中的jar已经过时。虽然选择了上面的答案,但我相信这就是原因所在
该问题在master中已修复,但SDK中的jar已过期。GCM服务器返回一个类似401 Unauthorized的错误,但GCM代码中存在一个错误,它抛出此IllegalArgumentException,而不是预期的InvalidRequestException。您需要附加源代码,然后在com.google.android.gcm.server.Sender中的代码处设置断点,以查看实际的HTTP错误
int status = conn.getResponseCode();
String responseBody;
if (status != 200) {
responseBody = getString(conn.getErrorStream());
logger.finest("JSON error response: " + responseBody);
throw new InvalidRequestException(status, responseBody);
}
基本上,conn.getErrorStream在这里返回null,因此您永远不会看到InvalidRequestException
以上代码来自最新的1.0.2版本。最新的GCM GIT存储库中有一个相关的修复程序,但从他们对它所做的更改来看,这似乎仍然是一个问题。GCM服务器返回了一个错误,如401 Unauthorized,但GCM代码中有一个错误,它抛出了这个非法的argumentException,而不是预期的InvalidRequestException。您需要附加源代码,然后在com.google.android.gcm.server.Sender中的代码处设置断点,以查看实际的HTTP错误
int status = conn.getResponseCode();
String responseBody;
if (status != 200) {
responseBody = getString(conn.getErrorStream());
logger.finest("JSON error response: " + responseBody);
throw new InvalidRequestException(status, responseBody);
}
基本上,conn.getErrorStream在这里返回null,因此您永远不会看到InvalidRequestException
以上代码来自最新的1.0.2版本。最新的GCM GIT存储库中有一个相关的修复程序,但从他们对它所做的更改来看,这似乎仍然是一个问题。我的问题还没有解决。ı尝试另一个api密钥,但没有任何更改仍然是同一个错误。我将我的api密钥放在了您的代码中-以及它的工作情况。尝试另一个onerefresh几次。您在服务中打开Android的谷歌云消息传递?这并没有解决我的问题。ı尝试另一个api密钥,但没有任何更改仍然是同一个错误。我将我的api密钥放在了您的代码中-以及它的工作状态。尝试另一个onerefresh几次。您在服务中打开了Android的谷歌云消息传递?那么,似乎api密钥或设备ID有问题。你从哪里得到这些设备ID的?这些应该在客户端生成。还有,为什么要添加两次相同的设备id?那么,似乎apiKey或设备id有问题。你从哪里得到这些设备ID的?这些应该在客户端生成。还有,为什么要两次添加相同的设备id?