Issue with $ionicUser.androidInit(token);

 TypeError: $ionicPush.androidInit is not a function
        at controllers.js?ionicCachebuster=15151:80
        at Scope.parent.$get.Scope.$emit (ionic.bundle.js?ionicCachebuster=15151:24919)
        at ionic-push.js?ionicCachebuster=15151:161
        at Scope.parent.$get.Scope.$broadcast (ionic.bundle.js?ionicCachebuster=15151:24992)
        at ng-cordova.js?ionicCachebuster=15151:5684
        at ionic.bundle.js?ionicCachebuster=15151:26536
        at completeOutstandingRequest (ionic.bundle.js?ionicCachebuster=15151:14221)
        at ionic.bundle.js?ionicCachebuster=15151:14493

I know it’s a function because this is in the ionic-push.js file:

function androidInit(token) {
    // Push the token into the user data
    try {
      $ionicUser.push('_push.android_tokens', token, true);
    } catch(e) {
      console.warn('Received push token before user was identified and will not be synced with Make sure to call $ionicUser.identify() before calling $ionicPush.register.');

And I’m calling it using

$rootScope.$on('$cordovaPush:tokenReceived', function(event, data) {
    console.log('Got token', data.token, data.platform);

Any help would be appreciated. This is an android-only app so I don’t need to worry about iOS. If you know a different way to persist push tokens that would work too.


I noticed that androidInit is already called by ionic-push

 if (ionic.Platform.isAndroid() && notification.event == "registered") {
         * Android handles push notification registration in a callback from the GCM service (whereas
         * iOS can be handled in a single call), so we need to check for a special notification type
         * here.
        console.log('$ionicPush:REGISTERED', notification.regid);
        $rootScope.$emit('$cordovaPush:tokenReceived', {
          token: notification.regid,
          platform: 'android'

So that tells me it should already save the token. Now, looking through the FAQ, I see it says > If you are using $ionicPush.register() without passing a user object, you should make sure you are waiting for the $ionicUser.identify() promise to complete. You can read more about this here.
But the link is dead. I assume that means I should pass a user object, but I saw somewhere that you can just add an empty .then to the register. I’ll be testing that out.


It worked! All I had to do is add the following:

$ionicPlatform.ready(function (){
      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) {
    }).then(function(deviceToken) {
        $scope.token = deviceToken;

It had something to do with the promise. The $scope.token part is not needed, just the promise.