Ioni Push notification


#1

Hi,
I try to Sending Push Notification with Ionic.io.
I using this same code http://docs.ionic.io/docs/push-full-setup

But, when I run my app, I have this error :

ionic.io.bundle.min.js:3 Uncaught TypeError: Cannot read property ‘init’ of undefined

This is my code:

  'Use Strict';
angular.module('App', ['ionic', 'ionic.service.core', 'ngCordova', 'ngCordovaOauth', 'ngStorage', 'ngMessages', 'firebase', 'ionic-datepicker', 'ionic-timepicker', 'monospaced.elastic', 'angularMoment', 'jrCrop']) //, 'ionic.service.push', 'ionic.service.core'
.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider
    .state('menu', {
        url: "/menu",
        abstract: true,
        templateUrl: "views/menu/menu.html",
        controller: 'menuController'
    })
    .state('login', {
      url: '/login',
      templateUrl: 'views/login/login.html',
      controller:'loginController'
    })
    .state('forgot', {
      url: '/forgot',
      templateUrl: 'views/forgot/forgot.html',
      controller:'forgotController'
    })
    .state('register', {
      url: '/register',
      templateUrl: 'views/register/register.html',
      controller:'registerController'
    })
    .state('menu.home', {
        url: '/home',
        
        views: {
            'menuContent': {
                templateUrl: 'views/home/home.html',
                controller: 'homeController'
            }
        }
    })
   
    ;
$urlRouterProvider.otherwise("/login");
})

.constant('FURL', 'https://xxxxxxxxxfirebaseIO.com/')
.run(function ($ionicPlatform, $cordovaSQLite, $cordovaGeolocation, geoLocation, $rootScope, $ionicPopup) {
    $ionicPlatform.ready(function () {
        
        var push = new Ionic.Push({
            "debug": true
        });

        push.register(function (token) {
            console.log("Device token:", token.token);
            push.saveToken(token);  // persist the token in the Ionic Platform
        });







        navigator.geolocation.getCurrentPosition(function (location) {
            console.log('[GEOLOCAL JS1] Location');
        },
    function (error) {
        console.log('[GEOLOCAL JS1] error with GPS: error.code: ' + error.code + ' Message: ' + error.message);
    });

     




        $cordovaGeolocation
            .getCurrentPosition()
            .then(function (position) {
                geoLocation.setGeolocation(position.coords.latitude, position.coords.longitude);
            }, function (err) {
                // you need to enhance that point
                $ionicPopup.alert({
                    title: 'Ooops...',
                    template: err.message
                });

                // geoLocation.setGeolocation(defaultLocalisation.latitude, defaultLocalisation.longitude)
            });

        // begin a watch
        var watch = $cordovaGeolocation.watchPosition({
            frequency: 1000,
            timeout: 3000,
            enableHighAccuracy: false
        }).then(function () {
        }, function (err) {
            // you need to enhance that point
         //   geoLocation.setGeolocation(defaultLocalisation.latitude, defaultLocalisation.longitude);
        }, function (position) {
            geoLocation.setGeolocation(position.coords.latitude, position.coords.longitude);
            // broadcast this event on the rootScope
            $rootScope.$broadcast('location:change', geoLocation.getGeolocation());
        }
        );



    // 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();
    }

    if (window.cordova) {
        db = $cordovaSQLite.openDB("my.db");
        $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS user (id integer primary key, email text, password text, lastUser INTEGER DEFAULT 0)");
    } else {
        db = window.openDatabase("my.db", '1', 'my', 1024 * 1024 * 100); // browser
    }
  });



})

and my index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
      <meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src  'self' 'unsafe-inline' *">
    <title></title>


    <!-- compiled css output -->
      <link href="css/ionic.app.css" rel="stylesheet">
      <link href="css/style.css" rel="stylesheet">
      <link href="css/jr-crop.scss" rel="stylesheet">

    <!-- ionic/angularjs js -->
    <script src="lib/ionic/js/ionic.bundle.js"></script>
 <script src="lib/ionic-platform-web-client/dist/ionic.io.bundle.min.js"></script>

    <!-- cordova script (this will be a 404 during development) -->
      <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
    <!-- Cordova is bootstrapped by ionic-platform-web-client, uncomment this if you remove ionic-platform-web-client... -->
<!-- <script src="cordova.js"></script> -->

      <script src="lib/angular-google-maps/dist/angular-google-maps.min.js"></script>
      <script src="lib/lodash/dist/lodash.min.js"></script>

      <script src="lib/ngstorage/ngStorage.min.js"></script>
      <script src="lib/firebase/firebase.js"></script>
      <script src="lib/angularfire/dist/angularfire.min.js"></script>
      <script src="lib/angular-messages/angular-messages.min.js"></script>
      <script src="lib/moment/moment.js"></script>
      <script src="lib/angular-moment/angular-moment.js"></script>
      <script src="lib/moment/locale/fr.js"></script>
      <script src="lib/jr-crop/src/jr-crop.js"></script>
      <script src="lib/ionic-datepicker/dist/ionic-datepicker.bundle.min.js"></script>
      <script src="lib/ionic-timepicker/dist/ionic-timepicker.bundle.min.js"></script>
      <script src="lib/ng-cordova-oauth/dist/ng-cordova-oauth.min.js"></script>

    <!-- your app's js -->
      <script src="js/app.js"></script>
      <script src="js/services/auth.js"></script>
      <script src="js/services/utils.js"></script>
  </head>
  <body ng-app="App">
  
    <ion-nav-view></ion-nav-view>
  </body>
</html>

how I can solve this problem?


#2

I believe that is the correct response. You’ve set your dev_push to false, correct? When you change dev_push to false, Push, from my understanding, doesn’t work on the browser anymore, because you’re not in development testing anymore.

However, if you were to use an emulator or attach your phone to it, you won’t get that error anymore.

If you’re using Android, you can download the ADB Chrome extension which will allow you to see the console logs on your phone, which is really handy!


#3

It’s right! Thanks for this explication


#4

I just stumbled upon this and this was the issue! I will say that I was using the unminified version of the file, in which case your error will look like this:

ionic.io.bundle.js:5844 Uncaught TypeError: Cannot read property ‘init’ of undefined

In case anyone’s trying to Google this particular error with the unminified version.