0

提供されているサンプルアプリケーションでGCMCordovaプラグインを実行しようとしています。ソースをダウンロードし、Eclipseで既存のコードからプロジェクトを作成しました。

現在、このプロジェクトにはCORDOVA_GCM_script.jsというファイルがあり、送信者IDを自分のGCMサービス識別子(Googleプロジェクトから取得)と一致するように変更する必要があります。

window.plugins.GCM.register("my_sender_id", "GCM_Event", GCM_Success, GCM_Fail );

この投稿でHollySchinskyが説明したように、アプリケーションにメッセージを送信するには、このスクリプトでnode.jsを使用します。

var GCM = require('gcm').GCM;

var apiKey = 'someCharsRepresentingMyKey';
var gcm = new GCM(apiKey);

var message = {
    registration_id: 'myDeviceRegistrationId', // required
    collapse_key: 'demo', 
    'message': 'Yourturn',
    'title': 'My Game',
    'msgcnt': '1'
};

gcm.send(message, function(err, messageId){
    if (err) {
        console.log("Something has gone wrong!");
    } else {
        console.log("Sent with message ID: ", messageId);
    }
});

これで、デバイスでアプリケーションを実行すると、アプリケーションが起動して登録されますが、アプリケーションにメッセージを送信しようとすると、クラッシュして「残念ながら、GCMが停止しました」というメッセージが表示されます。

LogCatは私にこれを示しています:

03-05 20:15:39.897: E/AndroidRuntime(19007): FATAL EXCEPTION: IntentService[GCMIntentService-GCMIntentService-2]
03-05 20:15:39.897: E/AndroidRuntime(19007): java.lang.NullPointerException: println needs a message
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.util.Log.println_native(Native Method)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.util.Log.v(Log.java:117)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at com.cordova2.gcm.GCMIntentService.onMessage(GCMIntentService.java:63)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:179)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.os.Looper.loop(Looper.java:137)
03-05 20:15:39.897: E/AndroidRuntime(19007):    at android.os.HandlerThread.run(HandlerThread.java:60)

この投稿を見つけて提案されたアドバイスに従いましたが、アプリがクラッシュし続けます。

誰かが私にこれについて何かアドバイスを与えることができますか?

ありがとうございました。

4

2 に答える 2

1

StackTraceに示されているように、このエラーはにnullメッセージを渡すときに発生しますLog.v

messageIdnullの可能性がありますconsole.log("Sent with message ID: ", messageId);

に変更してみてください

 console.log("Sent with message ID: ", messageId + "");

これは、デバッグを目的とした簡単なソリューションです。

チェックできるもう1つのことは、Cordovaコードコードの75行目をコメント化することです。

Log.v(ME + ":onMessage ", json.toString());

于 2013-03-05T19:58:59.487 に答える
0

iTechから提供されたヒントのおかげで、問題は実際にはサーバーにあることに気づきました。特に、サーバーがデバイスにメッセージを送信する方法について。

ここで、node-gcmとこのスクリプトを使用してメッセージを送信します。

var gcm = require('/usr/local/lib/node_modules/node-gcm');
var message = new gcm.Message();
var sender = new gcm.Sender('charsRepresentingAPIKey');
var registrationIds = [];

message.addData('message', 'hello');
message.addData('msgcnt', '1');
message.collapseKey = 'demo';
message.delayWhileIdle = true;
message.timeToLive = 3;

registrationIds.push('charsRepresentingRegIDOfDevice');

sender.send(message, registrationIds, 4, function (err, result) {
        console.log(result);
});

以前のスクリプト(質問で確認できます)では、どういうわけかデータがメッセージに含まれていなかったため、含まれているデータの値をログに出力しようとするとアプリケーションがクラッシュしました。このスクリプトでは、これは発生しません。

于 2013-03-06T00:05:27.213 に答える