我一直在努力让这个例子从下面运行:
https://developers.google.com/eclipse/docs/getting_started
我遇到的第一个问题是没有在Android SDK中安装“Google Cloud Messaging for Android Library”(显然我知道)。
但是现在我在Android项目的两个文件中遇到了自动生成代码的问题: GCMIntentService.java和RegisterActivity.java
错误是:
我在Ubuntu上使用Java SDK v1.7.0_15,但我也尝试使用Java SDK v1.6的Windows 7,并遇到了同样的问题。最新的Android平台4.2.2和Google App Engine 1.7.7。 Eclipse是Juno Service Release 2。
问题看起来他们正在做一些错误,因为在Deviceinfoendpoint内部有一个方法getDeviceInfo用于内部类DeviceInfoEndpoint(不同的capatilisations)。
我可以尝试修复它,但只是想知道我的设置中是否出现了问题?
任何帮助都将不胜感激。
答案 0 :(得分:3)
在GCMIntentService.java类中,在有错误的行中的端点对象之后添加.deviceInfoEndpoint(),如下所示:
DeviceInfo existingInfo = endpoint.getDeviceInfo(registration)
DeviceInfo existingInfo = endpoint.deviceInfoEndpoint().getDeviceInfo(registration)
在RegisterActivity.java中更改行
messageEndpoint.listMessages().setLimit(5).execute();
到
messageEndpoint.messageEndpoint().listMessages().setLimit(5).execute();
答案 1 :(得分:2)
我会确保您使用与JAR相同版本的GCM API。已经进行了不少修改。
我在gcm-server.jar中使用以下代码,以19718字节列出。
我成功用于将GCM消息发送到设备的代码是:
public void sendMessage() {
String notificationToken = mobileDevice.getPushNotificationCode();
String deviceType = mobileDevice.getDeviceType();
Sender sender = new Sender(BROWSER_API_KEY);
Message message = new Message.Builder().addData("message", "blah blah").build();
String device = "<the key for the device you are sending to goes here>";
try {
System.out.println("Sending message...");
Result result = sender.send(message, device, 5);
System.out.println("Done sending message");
if (result.getMessageId() != null) {
System.out.println("Got message ID: " + result.getMessageId());
System.out.println("Got error code name: " + result.getErrorCodeName());
System.out.println("result: " + result);
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// Database has more than one record for this device.
// Replace all of this device's records with this new id
System.out.println("Got new canonical reg id: " + canonicalRegId);
}
} else {
String error = result.getErrorCodeName();
if (error.equals(com.google.android.gcm.server.Constants.ERROR_NOT_REGISTERED)) {
// application has been removed from device - unregister from database
System.out.println("Got error: " + error);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}