是否存在java.lang.IllegalArgumentException异常尝试发送gcm消息??

是否存在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

当试图从我的应用服务器向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;

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?