Cordova Push插件:onNotificationGMC未被触发且无法获取regID

时间:2014-09-04 12:00:55

标签: android ios cordova push-notification google-cloud-messaging

大家好我开发了一款需要Android和iOS推送通知服务的cordova Hybrid应用程序,因此我已经安装了cordova插件" PushPlugin&#34 ;

这是我的代码

document.addEventListener(" deviceready",deviceready,false);

function deviceready() {
    try {
        pushNotification = window.plugins.pushNotification;
        pushNotification.unregister(successHandler, errorHandler);
        pushNotification.register(
            successHandler,
            errorHandler, {
                "senderID": "7645XXXXXXXX",
                "ecb": "onNotificationGCM"
            });

        function successHandler(data) {
            alert("SUCCESS: " + JSON.stringify(data));
        };

        function errorHandler(e) {
            alert("ERROR" + e);
        }


        function onNotificationGCM(e) {
            alert("Done")
        }

    } catch (e) {
        alert(e);
    }
}

当我运行我的应用程序时,我希望有两个警告:succesHandler一个和onNotificationGCM一个,但它只触发succesHandler一个说:" OK" ...有了这个问题,我可以'甚至可以访问将存储在我的服务器中的regID参数...

有人可以解释一下如何获得regID ..我的所有工作都依赖于此

我正在使用Android 4.4.2在Galaxy S4 Mini上测试此应用。

3 个答案:

答案 0 :(得分:3)

固定

我将onNotificationGCM移动到一个空的脚本标记中,如下所示:

<script>
function onNotificationGCM(result) {
    alert(result.regid);
}
</script>

现在它给你了regID:)

答案 1 :(得分:0)

我遇到了同样的问题。如果您使用的是AngularJS + IonicFramework,则不必执行此操作:

使用onDeviceReady函数创建工厂后,创建onNotificationGCM函数。像这样:

app.factory(&#39; PushProcessingService&#39;,function(){ ..

});

function onNotificationGCM(e){ }

我在工厂内创建了onNotificationGCM。这解决了我的问题。我希望它可以帮助你。

答案 2 :(得分:0)

在离子框架中,您有一个现成的插件:http://ngcordova.com/docs/plugins/pushNotifications/

这是一个Android设备工作代码示例:

module.run(function($cordovaPush) {

var androidConfig = {
    "senderID": "replace_with_sender_id",
    "ecb": "replace_with_the_name_of_function that will return you the regid"
};

document.addEventListener("deviceready", function(){
$cordovaPush.register(config).then(function(result) {
  // Success
}, function(err) {
  // Error
})

window.function replace_with_ecb(notification) { //notification.regid
  switch(notification.event) {
    case 'registered':
      if (notification.regid.length > 0 ) {
        alert('registration ID = ' + notification.regid);
      }
      break;

    case 'message':
      // this is the actual push notification. its format depends on the data model from the push server
      alert('message = ' + notification.message + ' msgCount = ' + notification.msgcnt);
      break;

    case 'error':
      alert('GCM error = ' + notification.msg);
      break;

    default:
      alert('An unknown GCM event has occurred');
      break;
  }
};

}, false);
});

此代码仅适用于真实设备(不是模拟器)