javascript - plugin - ngCordovaを使用して動作するようにAndroidでプッシュ通知を取得することはできません



cordova push 通知 android (2)

私はプッシュ通知(ngCordovaプラグインを使用して)を動作させるのに苦労しています。 私はサンプルコードをそのままサイトに記載されているとおりに追跡しています。http : //ngcordova.com/docs/plugins/pushNotifications/

(唯一の違いは、私がdevicereadyリスナーを持っていないということです、代わりに、私のコードはionicPlatform.readyリスナーの中にあります)。

ここに私のコードです:

angular.module('myApp', ['ionic', 'ngCordova'])
.run(function($ionicPlatform, $rootScope, $state, $cordovaPush) {
  $ionicPlatform.ready(function() {
    var config = {
      "senderID": "myID100001000"
    };

    $cordovaPush.register(config).then(function(result) {
      alert(result);
    }, function(err) {
      alert(err);
    })      
  }); 

  $rootScope.$on('$cordovaPush:notificationReceived', function(event, notification) {
    switch(notification.event) {
      case 'registered':
        if (notification.regid.length > 0 ) {
          alert('registration ID = ' + notification.regid);
        }
        break;

      default:
        alert('An unknown GCM event has occurred');
        break;
    }
  });  
})

私のアプリが起動すると、「OK」アラートが表示されるので、$ cordovaPush.registerコールが正常に終了することがわかります。 しかし、私は「登録された」通知イベントを得ることを期待していましたが、通知されることはありません。

どんな助けもありがとう。

https://src-bin.com


Answer #1

私はこれを多く苦しんでおり、実際にコードバスプッシュプラグインの2つのバージョンが現在存在することを知りました。

どちらもngCordovaによってサポートされていますが、非推奨バージョンのみが文書化されています。

推奨されないバージョンは$ cordovaPushであり、新しいバージョンは$ cordovaPushV5であり、それらは完全に異なるメソッドを持っています。

私にとって問題は、cordova-plugin-pushをダウンロードし、ngCordovaサイトの古いドキュメントで実装しようとしたことでした。

コードは次のとおりです。

 /*
         * Non deprecated version of Push notification events
         */
        function registerV5() {

            $ionicLoading.show({
                template: '<ion-spinner></ion-spinner>'
            });

            if (ionic.Platform.is('browser')) {
                alert("You are running on broswer, please switch to your device. Otherwise you won't get notifications");
                $ionicLoading.hide();
                return;
            }

            /**
             * Configuration doc:
             * https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/API.md#pushnotificationinitoptions
             */
            var GCM_PROJECT_ID = 'xxxxxx';

            $cordovaPushV5.initialize({
                "android": {
                    "clearNotifications": false,
                    "senderID" : GCM_PROJECT_ID
                }
            });

            $cordovaPushV5.register().then(function (deviceToken) {
                console.log("Successfully registered", deviceToken);

                $scope.data.deviceToken = deviceToken;

                // Below code required to configure $cordovaPushV5 notifications emitter. 
                // Don't pass function it's not handler.
                $cordovaPushV5.onNotification();
                $cordovaPushV5.onError();

                $ionicLoading.hide();
            }, function (error) {
                console.log("Failed to registered");
                console.log("error object : ", error);
                $ionicLoading.hide();
            });
        }

        $rootScope.$on('$cordovaPushV5:notificationReceived', function(event, data) {
            console.log("notification received");
            console.log("data object: ", data);

            var foreground = data.additionalData.foreground || false;
            var threadID = data.additionalData.payload.threadID || '';
            var group = data.additionalData.payload.group || false;

            if (foreground) {
                // Do something if the app is in foreground while receiving to push - handle in app push handling
                console.log('Receive notification in foreground');
            } else {
                // Handle push messages while app is in background or not started
                console.log('Receive notification in background');
                // Open FB messanger app when user clicks notification UI when app is in background.
                if (typeof data.additionalData.coldstart != "undefined" && data.additionalData.coldstart == false)
                    if (!group)
                        // Open FB Messenger of specific user chat window
                        window.open('fb-messenger://user/' + threadID, '_system', 'location=no');
                    else
                        // Open FB Messenger of specific group chat window
                        window.open('fb-messenger://groupthreadfbid/' + threadID, '_system', 'location=no');                
            }
        });

        $rootScope.$on('$cordovaPushV5:errorOccurred', function(event, error) {
            console.log("notification error occured");
            console.log("event object: ", event);
            console.log("error object: ", error);
        });

このgithub記事の詳細: https : //github.com/driftyco/ng-cordova/issues/1125 (コードはこちら)とこの記事: https : //github.com/yafraorg/yafra/wiki/Blog-Ionic -PushV5


Answer #2

解決策はコメントにありますが、これには適切な回答が必要です。

まず、 senderIDを渡す限り、 registerコールバックは常にOKを返しますが、 $cordovaPush:notificationReceivedイベントが呼び出されない場合(数秒かかる場合があります)、このIDは間違っている可能性があります。

プロジェクトIDではなく、プロジェクト番号を使用する必要あります。

番号を取得するには、 APIコンソールに移動してプロジェクトを選択すると、 概要ページに移動します。 このページの上に、次のようなものが表示されます:

Project ID: your-project-id        Project Number: 0123456789

プロジェクト番号をコピーして使用すればすべてがうまくいくはずです。