Android 推送通知电话间隔

Android 推送通知电话间隔,android,push-notification,google-cloud-messaging,phonegap-pushplugin,Android,Push Notification,Google Cloud Messaging,Phonegap Pushplugin,我正在开发一个应用程序来接收推送通知,但是我有一些问题 我正在使用PhoneGap开发我的应用程序和此插件- 我已经使用PhoneGap成功安装了插件,它列在我已安装的插件中,并且在我的手机上安装我的应用程序时,我也拥有所需的权限 我已经为GCM服务注册了我的应用程序,并获得了我的项目编号、API密钥等。我遵循了此处的步骤- 当应用程序第一次启动时,我显然需要为我的设备Android设备获取注册ID,但是我无法让它运行整个注册代码 在插件的文档中,它说一旦设备准备好就需要调用代码——我已经这样做

我正在开发一个应用程序来接收推送通知,但是我有一些问题

我正在使用PhoneGap开发我的应用程序和此插件- 我已经使用PhoneGap成功安装了插件,它列在我已安装的插件中,并且在我的手机上安装我的应用程序时,我也拥有所需的权限

我已经为GCM服务注册了我的应用程序,并获得了我的项目编号、API密钥等。我遵循了此处的步骤-

当应用程序第一次启动时,我显然需要为我的设备Android设备获取注册ID,但是我无法让它运行整个注册代码

在插件的文档中,它说一旦设备准备好就需要调用代码——我已经这样做了

var pushNotification;

document.addEventListener("deviceready", function(){
    pushNotification = window.plugins.pushNotification;

    $("#app-status-ul").append('<li>registering ' + device.platform + '</li>');
if ( device.platform == 'android' || device.platform == 'Android' || device.platform == "amazon-fireos" ){
    pushNotification.register(
    successHandler,
    errorHandler,
    {
        "senderID":"sender_ID",
        "ecb":"onNotification"
    });
} 

});



// result contains any message sent from the plugin call
function successHandler (result) {
    alert('result = ' + result);
}

// result contains any error description text returned from the plugin call
function errorHandler (error) {
    alert('error = ' + error);
}

// Android and Amazon Fire OS
function onNotification(e) {
    $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');

    switch( e.event )
    {
    case 'registered':
        if ( e.regid.length > 0 )
        {
            $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");
            // Your GCM push server needs to know the regID before it can push to this device
            // here is where you might want to send it the regID for later use.
            console.log("regID = " + e.regid);
        }
    break;

    case 'message':
        // if this flag is set, this notification happened while we were in the foreground.
        // you might want to play a sound to get the user's attention, throw up a dialog, etc.
        if ( e.foreground )
        {
            $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');

            // on Android soundname is outside the payload.
            // On Amazon FireOS all custom attributes are contained within payload
            var soundfile = e.soundname || e.payload.sound;
            // if the notification contains a soundname, play it.
            var my_media = new Media("/android_asset/www/"+ soundfile);
            my_media.play();
        }
        else
        {  // otherwise we were launched because the user touched a notification in the notification tray.
            if ( e.coldstart )
            {
                $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>');
            }
            else
            {
                $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>');
            }
        }

       $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
           //Only works for GCM
       $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
       //Only works on Amazon Fire OS
       $status.append('<li>MESSAGE -> TIME: ' + e.payload.timeStamp + '</li>');
    break;

    case 'error':
        $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
    break;

    default:
        $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
    break;
  }
}
成功时,它应该运行成功处理程序,如果失败,则运行错误处理程序。然而,我两者都得不到

我一直在缩小代码的范围,看看它是否在某一行上崩溃,使用警报。如下图所示:

alert('Start of push');
document.addEventListener("deviceready", function(){
var pushNotification;
    pushNotification = window.plugins.pushNotification;
    alert('past pushNotification');

    alert(device.platform);

    $("#app-status-ul").append('<li>registering ' + device.platform + '</li>'); //crashing on this line

    alert('registering');
if( device.platform == 'android' || device.platform == 'Android'){
    alert('pushreg');
    pushNotification.register(
    successHandler,
    errorHandler,
    {
        "senderID":"sender_ID_here",
        "ecb":"onNotification"
    });
} 
alert('register complete');    
});




// result contains any message sent from the plugin call
function successHandler (result) {
    alert('result = ' + result);
}

// result contains any error description text returned from the plugin call
function errorHandler (error) {
    alert('error = ' + error);
}

// Android and Amazon Fire OS
function onNotification(e) {
    $("#app-status-ul").append('<li>EVENT -> RECEIVED:' + e.event + '</li>');

    switch( e.event )
    {
    case 'registered':
        if ( e.regid.length > 0 )
        {
            $("#app-status-ul").append('<li>REGISTERED -> REGID:' + e.regid + "</li>");
            // Your GCM push server needs to know the regID before it can push to this device
            // here is where you might want to send it the regID for later use.
            console.log("regID = " + e.regid);
        }
    break;

    case 'message':
        // if this flag is set, this notification happened while we were in the foreground.
        // you might want to play a sound to get the user's attention, throw up a dialog, etc.
        if ( e.foreground )
        {
            $("#app-status-ul").append('<li>--INLINE NOTIFICATION--' + '</li>');

            // on Android soundname is outside the payload.
            // On Amazon FireOS all custom attributes are contained within payload
            var soundfile = e.soundname || e.payload.sound;
            // if the notification contains a soundname, play it.
            var my_media = new Media("/android_asset/www/"+ soundfile);
            my_media.play();
        }
        else
        {  // otherwise we were launched because the user touched a notification in the notification tray.
            if ( e.coldstart )
            {
                $("#app-status-ul").append('<li>--COLDSTART NOTIFICATION--' + '</li>');
            }
            else
            {
                $("#app-status-ul").append('<li>--BACKGROUND NOTIFICATION--' + '</li>');
            }
        }

       $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
           //Only works for GCM
       $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
       //Only works on Amazon Fire OS
       $status.append('<li>MESSAGE -> TIME: ' + e.payload.timeStamp + '</li>');
    break;

    case 'error':
        $("#app-status-ul").append('<li>ERROR -> MSG:' + e.msg + '</li>');
    break;

    default:
        $("#app-status-ul").append('<li>EVENT -> Unknown, an event was received and we do not know what it is</li>');
    break;
  }
}
alert('end of push');
显然,它能够运行推送的第一个警报开始以及过去的推送通知警报。我检查了一下以确保device.platform没有崩溃,并用相同的代码输入了一个警报——在我的设备上返回Android。然而,在那之后,我似乎再也没有得到任何东西,这让我相信这是对$app status ul.append'registing'+device.platform+的崩溃

如果有人能帮我解决这个问题那将是一个很大的帮助


谢谢。

要获得设备平台,应在Phonegap/Cordova应用程序上安装设备插件

您可以像这样从命令行向应用程序添加插件

cordova plugin add org.apache.cordova.device
列出你的插件

cordova plugin ls
如果您的列表中有['org.apache.cordova.device'],则表示您的插件未安装

删除插件

cordova plugin rm org.apache.cordova.device

以下是构建推送通知应用程序所需遵循的步骤:

*使用CLI安装cordova并运行以下命令refer

1创建科尔多瓦项目

cordova create hello com.example.hello HelloWorld
2添加平台

cordova platform add android
3建设项目

cordova build android
cordova build android
4添加插件

cordova plugin add org.apache.cordova.device
cordova plugin add org.apache.cordova.media
cordova plugin add https://github.com/phonegap-build/PushPlugin.git
5建设项目

cordova build android
cordova build android
6在Eclipse中导入创建的项目

7从位置使用所需代码来设计index.html

8从中复制PushNotification.js

ProjectFolderPath\plugins\com.phonegap.plugins.PushPlugin\www

ProjectFolderPath—使用CLI创建的项目的路径

到您的eclipse项目资产/www/文件夹

9还要在assets/www文件夹中添加jquery.js文件和声音文件。您可以从示例文件夹下载并复制它

10在index.html中,不要忘记更改GCM项目的senderID,即ProjectId


11在实际设备上运行应用程序。它可能无法在Emulator上运行。

您好,我已经安装了所有依赖的插件。设备和媒体。请尝试删除设备插件,然后重新安装。如果问题仍然存在,请尝试从应用程序中卸载推送插件,然后重新安装。