Phonegap:“processMessage failed”无法发送javascript函数(Cordova 2.5.0)

时间:2013-03-24 20:07:40

标签: android cordova phonegap-plugins google-cloud-messaging

我正在尝试让GCM推送通知在我的应用中运行,因此我使用此项目(https://github.com/marknutter/GCM-Cordova)作为示例。

当我运行示例代码时,一切正常,但是当我传输所有必需的文件并编辑我的代码以使其在我自己的应用程序中工作时,它不再起作用。 我还尝试了以下插件(https://github.com/phonegap-build/PushPlugin),并在自动安装后,它会给出完全相同的错误。

应用程序没有崩溃,但是当我调用注册函数时,我的回调函数“onNotificationGCM”没有收到任何消息。

注册功能:

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

经过一些调试后,我发现本机安卓代码能够注册手机并且确实从GCM服务器获得了一条身份证,但它无法将此信息发送给我的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 个答案:

答案 0 :(得分:3)

尝试添加

window.onNotificationGCM = onNotificationGCM;

更改功能的上下文

它解决了我的问题

答案 1 :(得分:1)

我遇到了同样的问题。经过一些调试后,据我所知,我的字符串末尾有一个不需要的新行字符“\ n”,我不负责,似乎手机间隙添加了字符。所以我所做的是.replace("\n", "")代码的Java部分上的字符串。

  

String js =“javascript:displayTextMessage('”+ date.toString()+“ - ”+ msg.replace(“\ n”,“”)+“');” ;           sendJavascript(JS);

答案 2 :(得分:0)

这不是Cordova 2.5.0 Bug!如果您从“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”-Message,因为之前发生了“未定义” - 错误。

答案 3 :(得分:0)

检查您的代码是否有任何错误的JSON.parse ...这些“非法访问”等。当JSON.parse(not_a_json_string)发生时,似乎会抛出错误消息。