【问题标题】:implementing push notification in ionic app在离子应用程序中实现推送通知
【发布时间】:2023-03-12 00:20:01
【问题描述】:

我正在尝试在适用于 Android 的 ionic 应用程序中实现推送通知。 我已按照http://docs.ionic.io/v1.0/docs/push-from-scratch 的分步指南进行操作。 当我在 android 手机上运行我的应用程序时,注册用户列在 apps.ionic.io 中。所以用户注册工作正常。 但是设备注册不起作用。 它给出了错误 Cannot read property 'pushNotification' of undefined

这是我在 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>

【问题讨论】:

    标签: android push-notification ionic-framework ionic


    【解决方案1】:

    终于推送通知对我有用。我将 pushRegister 的函数调用从控制器移到了 identifyUser 函数。所以这是我的新工作代码。 控制器代码

    .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;
                        }
                    });
                }
            })
    

    【讨论】:

      【解决方案2】:

      我不知道这个新的 Ionic 推送通知。只需按照那里的示例,我就成功地在我的 Ionic 应用程序中使用 ngCordova 的推送插件实现了推送通知,该插件适用于 Android 和 iOS (http://ngcordova.com/docs/plugins/pushNotifications/)。关键是把代码放在app.js中的.run模块中。

      代码如下:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        • 1970-01-01
        相关资源
        最近更新 更多