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。

原生安卓代码:

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部分的字符串。

String js = "javascript:displayTextMessage('" + date.toString() + " - " + msg.replace("\n", "") + "');" ; 发送Javascript(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 回答