无法从GCM获取registrationID

时间:2015-08-22 04:05:18

标签: cordova google-cloud-messaging phonegap-pushplugin

尽管所有尝试并在SO上回顾了之前的问题和解决方案,但我无法从GCM获得注册ID。

我正在使用pushplugin,并尝试使用Cordova为Android构建。应用程序已成功构建,但似乎从未调用onNotificationGCM函数。成功处理程序被调用。我使用Genymotion Android模拟器。

在github问题上有人说将onNotification函数附加到window对象。但我也无法做到这一点。有一般问题吗?有没有人成功使用这个插件?

可能是什么原因? 此处的试用使用了与上述不同的另一个cordova插件。虽然我在上面插件的github repo中尝试了这个例子,但它没有用。

index.js:

var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicity call 'app.receivedEvent(...);'
    // "senderID":"273794328096"
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        console.log('Received Event: ' + id);
        if (device.platform == 'android' || device.platform == 'Android') {
            alert("Register called");
            window.GcmPushPlugin.register(app.successHandler, app.errorHandler, {
                "senderId":"273794328096",
                "jsCallback":"onNotificationGCM"
            });
        }
        else {
            alert("Register called");
            pushNotification.register(this.successHandler,this.errorHandler,{"badge":"true","sound":"true","alert":"true","ecb":"onNotificationAPN"});
        }
    },
    // result contains any message sent from the plugin call
    successHandler: function(result) {
        alert('Callback Success! Result = '+ result.gcm)
    },
    errorHandler:function(error) {
        alert("Error:" + error);
    },
};

function onNotificationGCM(notification) {
  console.log("Event Received: " + notification); // { "extra": {"url" : "someurl.js" } } 
}

的index.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <title>Hello World</title>
    </head>
    <body>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
        <script type="text/javascript">
            app.initialize();
        </script>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

示例代码

var Project = {};

var app = {
    initialize: function() {
        this.bindEvents();
    },

    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },

    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },

    receivedEvent: function(id) {
        app.registerDevice();
    },

    registerDevice: function(){
        if (window.cordova && window.cordova.platformId=='android'){
            try{
                var pushNotification = window.plugins.pushNotification;
                pushNotification.register(
                    app.successPN,
                    app.errorPN,
                    {
                        "senderID": "727700427600",
                        "ecb": "Project.Notification"
                    }
                );
            }
            catch (ex){
                // window.alert('Error (message): ' + ex.message);
                // window.alert('Error (stack): ' + ex.stack);
            }
            console.log("regID = " + localStorage['pioneer.device.regid']);
        }
    },
    successPN: function (result){
        // window.alert('PN Success: ' + result);
    },
    errorPN: function (result){
        // window.alert('PN Error: ' + result);
    }
};

app.initialize();

<强> Project.Notification

Project.Notification = function(e){
    // Pioneer.alert(JSON.stringify(e), 'alert');
    switch( e.event )
    {
        case 'registered':
            // process reg id
            break;                
        case 'message':
            // print message
            break;
        case 'error':
            // window.alert("Notification error: " + e.msg);
            break;
        default:
            // window.alert("Notification - Unknown event");
            break;
    }
};