4

プッシュ通知プラグインをセットアップして register メソッドを呼び出していますが、デバイス ID ではなく文字列 "OK" しか返されません。登録されたデバイス ID を取得するにはどうすればよいですか?

   $window.plugins.pushNotification.register(
          function (result) {
            q.resolve(result); //this always just returns the string "OK", how do I get the device ID?
          },
          function (error) {
            console.log(error);
            q.reject(error);
          },
          config);

        return q.promise;
      },

e.regid は null です。この例から取得

// 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 noti
4

3 に答える 3

1

Android では、デバイス登録イベントがトリガーされたときに、ecb コールバックからデバイス トークンを取得できます。このコードは、私がどのようにそれを行うかを示しています (もっと整理することもできますが、私たちの目的には十分です):

var GOOGLE_SENDER_ID = '/* replace with yours */';
var deferred;

function registerWithGCMServer() {
    deferred = $.Deferred();

    window.plugins.pushNotification.register(
        function() {
            //It will be resolved in 'window.onAndroidNotification'
            //when the device is registered and the token is gotten
            //our rejected if the timeout is reached
        },
        function() {
            deferred.reject('Error registering.');
        }, {
            senderID: GOOGLE_SENDER_ID,
            ecb: 'window.onAndroidNotification'
        });

    setTimeout(function() {
        if(deferred.state() === 'pending') {
            deferred.reject('Error registering (timeout).');
        }
    }, 10000); //10s

    return deferred.promise();
}

window.onAndroidNotification = function(e) {
    if(e.event == 'registered') {
        deferred.resolve(e.regid);
    } else if(e.event == 'message') {
        onMessageRecived.call(null, e.message);
    }
};

次に、その機能を使用します。

registerWithGCMServer()
    .then(function(deviceToken) {
        console.log('Device registered and its token is ' + deviceToken);
    })
    .fail(function(e) {
        console.error(e);
    });

function onMessageRecived(message) {
    console.log('Push message received: ' + message);
}
于 2015-05-14T07:15:24.377 に答える
0

登録に関する私の間違いは、間違ったプロジェクト ID を使用していたことです。最初は、プロジェクト番号の代わりにプロジェクトの一意の名前 (開発コンソールではプロジェクト IDとも呼ばれます) を使用していました。gcm の応答に関係なく、コールバックは成功します。

また、両方の Samsung テスト デバイスでこれと同様の問題が発生していました。登録コールバックは正常に機能していましたが、アプリケーションはプッシュ通知を取得していませんでした。これは、テスト デバイスの一部のサービスが古くなっていることに関連しているようです。

最後に、通知をシステム トレイに正しく表示する場合は、ペイロード データに「メッセージ」と「タイトル」を必ず含めてください。

于 2015-03-03T17:03:28.217 に答える