在控制器中调用FCM工厂以获取通知数据

时间:2016-12-27 20:42:14

标签: angularjs cordova firebase-cloud-messaging angularjs-factory

自上周以来,我一直试图通过使用Phonegap和AngularJS从FCM收到通知。

我可以用cordova-fcm-plugin来做,所以现在我想从消息中获取数据,他们建议使用这段代码:

FCMPlugin.onNotification(
  function(data){
    if(data.wasTapped){
      //Notification was received on device tray and tapped by the user.
      alert( JSON.stringify(data) );
    }else{
      //Notification was received in foreground. Maybe the user needs to be notified.
      alert( JSON.stringify(data) );
    }
  },
  function(msg){
    console.log('onNotification callback successfully registered: ' + msg);
  },
  function(err){
    console.log('Error registering onNotification callback: ' + err);
  }
);

我的问题是我不知道如何将该代码添加到角度控制器,所以我在互联网上搜索了类似的东西,我发现了这个factory

    angular.module('rhoAppApp')
       .factory('$FCMPlugin', $FCMPlugin);

        $FCMPlugin.$inject = [];

        function $FCMPlugin() {
            var service = {
                getToken: function(successCallback, failCallback) {
                    FCMPlugin.getToken(successCallback, failCallback);
                },
                onNotification: function(onNotification, onCallbackSuccesSet, onCallbackFailSet) {
                    FCMPlugin.onNotification(onNotification,
                        onCallbackSuccesSet, onCallbackFailSet);
                }
            };
            return service;            

          }

所以现在我的问题是在我的控制器中使用那个工厂,我知道(也许我错了)你必须从中调用它:

.controller('MainCtrl', function ($FCMPlugin) {

$FCMPlugin.something

})

但我不确定如何使用那家工厂,我之前从未使用过。

1 个答案:

答案 0 :(得分:0)

我可以用这个来解决这个问题:

我使用phonegap + yeoman angular进行构建,使用此方法构建的问题之一是你必须包含cordova.js

我的问题是,我在此行中包含了condorva.js

<!-- build:js(.) scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<!-- endbower -->
<!-- endbuild -->

这是一个问题,因为你不想在vendor.js中构建它,而是将cordova.js添加到该行中:

然后我将此代码添加到 app.js ,以便在您使用移动设备或网络时进行说明:

angular.element(document).ready(function () {
    if (navigator.userAgent.match(/(iOS|iPhone|iPod|iPad|Android|BlackBerry)/)) {

      document.addEventListener('deviceready', function () {

       console.log('This is mobile app');

        angular.bootstrap(document.body, ['moodleAppApp']);

      }, false);

    } else {

      console.log('This is web app');

      angular.bootstrap(document.body, ['moodleAppApp']);

    }
  });

我还从 index.html

中删除 ng-app

这一切使我的角度应用程序与cordova一起工作。