2015-06-19 6 views
3

Я пытаюсь реализовать push-уведомление в ионном приложении для Android. Я пошел пошаговое руководство от http://docs.ionic.io/v1.0/docs/push-from-scratch. Когда я запускаю свое приложение на Android-телефоне, зарегистрированные пользователи перечислены в apps.ionic.io. Таким образом, регистрация пользователей работает нормально. Но регистрация устройства не работает. Это дает ошибку Не удается прочитать свойство «pushNotification» неопределеннойвнедрение push-уведомления в ионном приложении

Это мой код в верхней части app.js

angular.module('starter', ['ionic','ngCordova', 
    'ionic.service.core', 
    'ionic.service.push', 
    'starter.controllers', 
    'starter.services']) 

    .config(['$ionicAppProvider', function($ionicAppProvider) { 
     // Identify app 
     $ionicAppProvider.identify({ 
      // The App ID (from apps.ionic.io) for the server 
      app_id: '', 
      // The public API key all services will use for this app 
      api_key: '', 
      // Set the app to use development pushes 
      // dev_push: true 
      gcm_id: '' 
     }); 
    }]) 

Вот код в мой контроллер

.controller('DashboardCtrl', function($scope,$localstorage, WildfireService, CommonUtilityService,PushNotificationService,$ionicPopup, $ionicLoading) {  
     PushNotificationService.identifyUser(); 
     PushNotificationService.pushRegister(); 

    }) 

Вот мой services.js

.service('PushNotificationService', function($q, $ionicUser, $ionicPush) { 
     var PushNotificationService = this; 
     PushNotificationService.identifyUser = function(){ 
      var user = $ionicUser.get(); 
      if(!user.user_id) { 
       // Set your user_id here, or generate a random one. 
       user.user_id = $ionicUser.generateGUID(); 
      }; 

      // Add some metadata to your user object. 
      angular.extend(user, { 
       name: 'Technews', 
       bio: 'Hardcoded for now' 
      }); 

      // Identify your user with the Ionic User Service 
      $ionicUser.identify(user).then(function(){ 
       //alert('Identified user ' + user.name + '\n ID ' + user.user_id); 
       return true; 
      }); 
     }, 

     PushNotificationService.pushRegister = function(){ 
      // Register with the Ionic Push service. All parameters are optional. 
      $ionicPush.register({ 
       canShowAlert: true, //Can pushes show an alert on your screen? 
       canSetBadge: true, //Can pushes update app icon badges? 
       canPlaySound: true, //Can notifications play a sound? 
       canRunActionsOnWake: true, //Can run actions outside the app, 
       onNotification: function(notification) { 
        // Handle new push notifications here 
        // console.log(notification); 
        alert(notification); 
        return true; 
       } 
      }); 
     } 
    }) 

Может ли кто-нибудь сказать мне, где ошибка или что мне не хватает?

Я добавил их в index.html

<script src="lib/ionic/js/ionic.bundle.js"></script> 
    <script src="lib/ngCordova/dist/ng-cordova.js"></script> 
    <script src="lib/ionic-service-core/ionic-core.js"></script> 
    <script src="lib/ionic-service-push/ionic-push.js"></script> 

ответ

4

Наконец толчок уведомление работает для меня. Я переместил вызов функции pushRegister с контроллера на функцию identUser. Итак, вот новый рабочий код для меня. Код Контроллер

.controller('DashboardCtrl', function($scope,$localstorage, WildfireService, CommonUtilityService,PushNotificationService,$ionicPopup, $ionicLoading) {  
     PushNotificationService.identifyUser(); 


    }) 

Вот новые services.js

.service('PushNotificationService', function($q, $ionicUser, $ionicPush) { 
      var PushNotificationService = this; 
      PushNotificationService.identifyUser = function(){ 
       var user = $ionicUser.get(); 
       if(!user.user_id) { 
        // Set your user_id here, or generate a random one. 
        user.user_id = $ionicUser.generateGUID(); 
       }; 

       // Add some metadata to your user object. 
       angular.extend(user, { 
        name: 'Technews', 
        bio: 'Hardcoded for now' 
       }); 

       // Identify your user with the Ionic User Service 
       $ionicUser.identify(user).then(function(){ 
        //alert('Identified user ' + user.name + '\n ID ' + user.user_id); 
PushNotificationService.pushRegister(); 
        return true; 
       }); 
      }, 

      PushNotificationService.pushRegister = function(){ 
       // Register with the Ionic Push service. All parameters are optional. 
       $ionicPush.register({ 
        canShowAlert: true, //Can pushes show an alert on your screen? 
        canSetBadge: true, //Can pushes update app icon badges? 
        canPlaySound: true, //Can notifications play a sound? 
        canRunActionsOnWake: true, //Can run actions outside the app, 
        onNotification: function(notification) { 
         // Handle new push notifications here 
         // console.log(notification); 
         alert(notification); 
         return true; 
        } 
       }); 
      } 
     }) 
0

Я не знаю об этом уведомлений о новых кнопочных ионическими. Я успешно реализовал push-уведомления в своем приложении Ionic с плагином ngCordova для Android iOS (http://ngcordova.com/docs/plugins/pushNotifications/), просто следуя приведенным там примерам. Ключ состоит в том, чтобы поместить код в модуль .run в app.js.

Вот код:

angular.module('notPush', ['ionic','notPush.controllers','notPush.factorys','ngCordova','ionic.service.core']) 

.run(function($ionicPlatform, $rootScope, $http, $cordovaPush) { 
    $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(); 
    } 

    // Manejador de notificaciones push para Android 
    if (ionic.Platform.isAndroid()){ 

     var androidConfig = { 
     "senderID": "94XXXXXXXXXX", // ID HERE 
     "ecb": "window.casosPush" 
     }; 

     try{ 
     var pushNotification = window.plugins.pushNotification; 
     } catch (ex){ 

     } 

     // Llamada en caso de exito 
     var successfn = function(result){ 
     alert("Success: " + result); 
     }; 

     // Llamada en caso de error 
     var errorfn = function(result){ 
     window.alert("Error: " + result); 
     }; 

     // Llamada de casos de notificacion push 
     window.casosPush = function(notification){ 
     switch (notification.event){ 
      case 'registered': 
      if (notification.regid.length > 0){ 
       alert('registration ID = ' + notification.regid); 
      } 
      break; 

      case 'message': 
      alert(JSON.stringify([notification])); 
      break; 

      case 'error': 
      alert('GCM error = ' + notification.msg); 
      break; 

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

     // Llamada de registro con la plataforma GCM 
     pushNotification.register(successfn,errorfn,androidConfig); 
     } catch(notification){ 

     } 
    } 
}) 

Только не забудьте установить плагин с

cordova plugin add https://github.com/phonegap-build/PushPlugin.git 
Смежные вопросы