0

プッシュ通知を受信するアプリを開発していますが、いくつか問題があります。

PhoneGap を使用してアプリとこのプラグインを開発しています - PushPlugin PhoneGap を使用してプラグインを正常にインストールし、インストールされたプラグインにリストされ、電話にアプリをインストールするときに必要な権限も持っています。

アプリを GCM サービスに登録し、プロジェクト番号、API キーなどを取得しました。Google Cloud Messagingの手順に従いました。

アプリが最初に起動するとき、明らかに自分のデバイス (ちなみに Android デバイス) の登録 ID を取得する必要がありますが、登録コード全体を実行するための 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('<li>registering ' + device.platform + '</li>');

誰かが私がこれを試して理解するのを手伝ってくれるなら、それは大きな助けになるでしょう.

ありがとう。

4

2 に答える 2

0

これは、プッシュ通知用のアプリを構築するために従う必要がある手順です。

* CLI を使用して cordova をインストールし、次のコマンドを実行します (リンクを参照)

1) コルドバ プロジェクトを作成します。

cordova create hello com.example.hello HelloWorld

2)プラットフォームを追加

cordova platform add android

3) プロジェクトのビルド

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

6)作成したプロジェクトをEclipseにインポートする

7)この場所から必要なコードを使用して、index.html を設計します。

PushNotification.js8 )コピー元

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

ProjectFolderPath - CLI を使用して作成されたプロジェクトのパス

あなたのEclipseプロジェクトassets/www/フォルダに

9) jquery .js ファイルとサウンド ファイルも assets/www フォルダーに追加します。( Github Example フォルダからダウンロードしてコピーできます)

10) index.html で、GCM プロジェクトの送信者 ID (つまり ProjectId) を変更することを忘れないでください。

11) 実際のデバイスでアプリを実行します。エミュレーターでは動作しない場合があります。

于 2015-01-07T12:51:34.543 に答える