2

アプリで GCM プッシュ通知を機能させようとしているため、このプロジェクト ( https://github.com/marknutter/GCM-Cordova ) を例として使用しています。

サンプル コードを実行するとすべて正常に動作しますが、必要なファイルをすべて転送し、コードを編集して自分のアプリで動作させると、動作しなくなります。次のプラグイン(https://github.com/phonegap-build/PushPlugin)も試しましたが、自動的にインストールした後、まったく同じエラーが発生します。

アプリはクラッシュしませんが、登録関数を呼び出すと、コールバック関数「onNotificationGCM」がメッセージを受信しません。

登録機能:

window.plugins.GCM.register("my_gcm_id", "onNotificationGCM", successHandler, errorHandler );

いくつかのデバッグの後、ネイティブ Android コードが電話を登録でき、実際に GCM サーバーから ID メッセージを取得できることがわかりましたが、これを私の JavaScript に送信することはできません。

ネイティブ Android コード:

public static void sendJavascript( JSONObject _json )
{
  String _d =  "javascript:"+gECB+"(" + _json.toString() + ")";
      Log.v(ME + ":sendJavascript", _d);

      if (gECB != null ) {
        gwebView.sendJavascript( _d );
      }
}

LogCat は、次の「失敗」メッセージを表示します。

03-24 17:05:21.844: V/GCMPlugin:sendJavascript(31782): javascript:onNotificationGCM({"regid":"APA91bHX...31ASD","event":"registered"})

03-24 17:05:22.834: D/CordovaLog(31782): processMessage failed: Message: Jjavascript:onNotificationGCM({"regid":"APA91bHX...31ASD","event":"registered"})

メッセージの前の大文字のJは奇妙で、おそらくそれが問題の原因ですが、Cordova 2.5.0 コードのどこかで発生しているようです。

これを解決する方法を知っている人はいますか?

4

4 に答える 4

3

追加してみる

window.onNotificationGCM = onNotificationGCM;

関数のコンテキストを変更するには

それは私のために問題を解決します

于 2014-02-06T14:33:35.403 に答える
1

私も同じ問題を抱えていました。私が理解したようにデバッグした後、文字列の最後に不要な改行文字 "\n" がありましたが、これは私には責任がありませんでした。電話のギャップが文字を追加したようです。だから私がしたこと.replace("\n", "")は、コードの Java 部分の文字列に対してでした。

文字列 js = "javascript:displayTextMessage('" + date.toString() + " - " + msg.replace("\n", "") + "');" ; sendJavascript(js);

于 2013-11-10T08:24:44.857 に答える
0

これは Cordova 2.5.0 のバグではありません。「CORDOVA_GCM_script.js」の例からコピーして貼り付けると、次のようになります。

case 'registered':
    // the definition of the e variable is json return defined in GCMReceiver.java
    // In my case on registered I have EVENT and REGID defined
    gApp.gcmregid = e.regid;
    if ( gApp.gcmregid.length > 0 )
    {
      $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");


      // ==============================================================================
      // ==============================================================================
      // ==============================================================================
      //
      // This is where you would code to send the REGID to your server for this device
      //
      // ==============================================================================
      // ==============================================================================
      // ==============================================================================

    }

    break

「gApp」配列と「gcmregedit」変数がスクリプトで宣言されていることを確認するか、イベントハンドラーでそれらを使用しないでください。そうしないと、以前に「未定義」エラーが発生したため、「processMessage failed」メッセージが表示されます。

于 2013-04-05T12:31:33.773 に答える
0

コードに不正な JSON.parse がないか確認してください...これらの「不正アクセス」などのエラーメッセージは、JSON.parse(not_a_json_string) が発生したときにスローされるようです。

于 2013-06-20T17:59:35.110 に答える