当app在后台时,如何在点击ngCordova本地通知时将用户发送到特定页面

时间:2015-06-20 19:42:53

标签: android angularjs ionic-framework ionic ngcordova

将用户发送到特定视图正在点击本地通知,但仅当应用处于前台时,当我关闭应用并获得通知时,它才会发送到仅在

中定义的主页面
$urlRouterProvider.otherwise("/");

例如,当我们没有使用WhatsApp并且我们收到新的消息通知时,当我们点击它时,它会将我们发送到特定的聊天页面而不是whatsapp的主页面,我该如何实现呢?

控制器:

$ionicPlatform.ready(function () {

    $scope.scheduleDelayedNotification = function () {
        var now = new Date().getTime();
        var _5_SecondsFromNow = new Date(now + 5 * 1000);

        $cordovaLocalNotification.schedule({
            id: 1,
            title: 'New Notification',
            text: 'Notification Message',
            at: _5_SecondsFromNow
        }).then(function (result) {
            alert("Notification Set");
        });

        cordova.plugins.notification.local.on("click", function (notification, state) {
                $state.go('feedback');
        }, this)

        };
});

app.js

var ionicApp = angular.module('starter', ['ionic', 'localNotificationModule']);

ionicApp.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
});

ionicApp.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state('home', {
    url: '/',
    templateUrl: 'views/home.html'
  })
  .state('feedback', {
    url: '/feedback',
    templateUrl: 'views/feedback.html'
  });

  $urlRouterProvider.otherwise("/");

});

更新:

services.js

servicesModule.service('FirstRunScheduling', ['$rootScope', '$ionicPlatform', '$cordovaLocalNotification', '$state', function($rootScope, $ionicPlatform, $cordovaLocalNotification, $state){

    var ref = new Firebase("https://feedback-system.firebaseio.com/TestTimeTable");

    ref.once("value", function(data) {
        var TestTimeTable = data.val().TestTimeTable;
        var notificationDate;
        var notificationID;
        if(data.val().first_run == false)
        {
            $ionicPlatform.ready(function () {
                for(var i in TestTimeTable)
                {
                    notificationDate = new Date(TestTimeTable[i].year, TestTimeTable[i].month, TestTimeTable[i].day, TestTimeTable[i].hour, TestTimeTable[i].minute, 0, 0);
                    notificationID = i + ref.getAuth().uid.split(":")[1];
                    $cordovaLocalNotification.schedule({
                        id: notificationID,
                        title: 'Feedback Reminder',
                        text: 'Please Provide Lecture Feedback',
                        at: notificationDate,
                        autoCancel: true
                    }).then(function (result) {
                        alert("Set");
                    });

                    cordova.plugins.notification.local.on("click", function (notification, state) {
                        $state.go('tabs.feedback');
                    }, this)
                }
            });
        }

        ref.update({
            first_run: true,
        });

    });

}]);

1 个答案:

答案 0 :(得分:0)

如果您的应用在用户点击通知时重新启动,则

cordova.plugins.notification.local.on("click", ..)

尚未被调用,因为它仅在创建新的本地通知时被调用。

尝试在

中注册通知事件处理程序
$ionicPlatform.ready(...)