离子推送安卓推送通知返回"undefined"消息



我已经尝试让Android推送通知在我的应用程序上工作了一段时间了(iOS已经完成了),除了让通知在Android设备上显示之外,我已经把所有事情都整理好了。

注册设备id,并推送到GCM服务器似乎都工作得很好,但是当我测试从GCM返回的响应中的消息返回时,我一直得到undefined

将消息推送到GCM时的所有响应都是成功,正确的设备id,与其相关联的消息id等。有人能给我指个方向吗?下面您将看到代码片段,其中只有一个示例"alert"用于显示返回的内容,该内容最终将被用作"推送"中的通知。

这个警报

alert('message = ' + e.message + ' payload message: ' + e.payload.message +
       ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

似乎没有得到任何返回来显示推送。

function onDeviceReady() {
    console.log('deviceready');
    try {
        pushNotification = window.plugins.pushNotification;
        if (device.platform == 'android' || device.platform == 'Android' || device.platform == 'amazon-fireos') {
            console.log('PN register');
            pushNotification.register(successHandler, errorHandler, {
                "senderID": "177718756870",
                "ecb": "onNotification"
            });     // required!
            console.log('after PN register');
        } else {
            console.log('PN register');
            pushNotification.register(tokenHandler, errorHandler, {
                "badge": "true",
                "sound": "true",
                "alert": "true",
                "ecb": "onNotificationAPN"
            }); // required!
            console.log('after PN register');
        }
    }
    catch (err) {
        txt = "There was an error on this page.nn";
        txt += "Error description: " + err.message + "nn";
        console.log("ERROR", txt);
    }
}
var pushNotification;
// handle GCM notifications for Android
window.onNotification = function(e) {
    console.log('EVENT RECEIVED ' + e.event)
    console.log("regID BEFORE CHECKS = " + e.regid);
    switch( e.event )
    {
        case 'registered':
            if ( e.regid.length > 0)
            {
                console.log("regID = " + e.regid);
                var data =
                {
                    'device_id': e.regid,
                    'platform': device.platform,
                    'os_version': device.version,
                    'app_version': lawnmowerConfig.versionString,
                    'device_model': device.model
                };
                localStorage.setItem('push_data', JSON.stringify(data));
            }
            break;
       case 'message':
           console.log('Inside case message: ' + e.regid)
           if (e.foreground)
           {
               // Add something to play a sound once working
           }
           else
           {    
                if (e.coldstart) {
                    console.log("coldstart");
                }
                else {
                    console.log("not coldstart");
                }
           }
           alert('message = ' + e.message + ' payload message: ' + e.payload.message + ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);
           break;
           case 'error':
                alert('GCM error = ' + e.msg);
           break;
           default:
                // Testing using these alerts instead
                alert('An unknown GCM event has occurred');
           break;
    }
};
function tokenHandler (result) {
    console.log('push token handler');
    console.log(result);
    var data =
    {
        'device_id': result,
        'platform': device.platform,
        'os_version': device.version,
        'app_version': lawnmowerConfig.versionString,
        'device_model': device.model
    };
    localStorage.setItem('push_data', JSON.stringify(data));
}
function successHandler (result) {
    console.log('success handler push success');
    console.log("result: " + result);
}
function errorHandler (error) {
    console.log('push error');
}
document.addEventListener('deviceready', onDeviceReady, true);

注册设备id,并推送到GCM服务器似乎都工作得很好,但是当我测试从GCM返回的响应中的消息返回时,我一直得到undefined

这意味着当你在测试"什么消息....。是"您正在引用一个尚未定义的变量"。这一行:

alert('message = ' + e.message + ' payload message: ' + e.payload.message +
      ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

不存在变量e.message。您从服务器发送的数据附加到e.payload,并且将e.event的值设置为message。我认为你的问题可以解决,如果你删除e.message。比如:

alert('event = ' + e.event + ' payload message: ' + e.payload.message +
      ' e payload msgcnt: ' + e.payload.msgcnt + ' e.msg: ' + e.msg);

注意要检测变量问题(作用域和/或声明),一次调试一个变量。这将帮助您准确地识别问题并追踪到问题的根源。

我建议你用

alert("Payload message: " + e.payload.message);

相关内容

最新更新