Urban Airship for notifications

any working code examples for integrating urban airship for push notifications

1 Like

you could always checkout http://urbanairship.com/resources/developer-resources for said examples like https://github.com/urbanairship/phonegap-ua-push/tree/master/Example it shouldn’t be too hard to transform that to Angular + Ionic

Maby someone here has a working example though

I’ve used Urban Airship and PushWoosh, but in my opinion, Pushwosh is a bit simpler to integrate than urban airship. Plus they have a cordova 3.X compatible plugin so you can install it via the command line. There’s plenty of integration tutorials on the site about integrating for both iOS and Android.

yep i agree pushwosh is easier to apply but annoying to have to pay 39 euro / mo for just testing the remote api while Urban Airship offers 1 million push messages via api for free per month

I am working on app now which I decided to go with UrbanAirship, I had some problems at first to getting everything to work, but then it’s working, the only disadvantage I see that i am relaying on a third party service.

Below is some code to handle the push notifications inside $ionicPlatform.ready(), but I still need to refactor this code into a service/provider but don’t have the time too. If you have any suggestion regarding the refactoring into a service/provider please let me know as I am new to AngularJs.

Note: Some code depends on custom services e.g Notifications

// Monitor Settings Toggle for changes.
    $scope.$watch('pushNotification.checked', function(checked){

      console.log('PushNotification: Change value to ' + checked);

      // Enable/Disable on server according to value.
      checked ? PushNotification.enablePush() : PushNotification.disablePush();

    });

    // If iOS 
    if( $ionicPlatform.is("iOS") ) {
      
      // setAutobadge to true
      PushNotification.setAutobadgeEnabled(true);

    }

    // If Andorid 
    if( $ionicPlatform.is("android") ) {

      PushNotification.setVibrateEnabled(true);
      PushNotification.setSoundEnabled(true);

    }

    // Update the interface with the current UA settings
    PushNotification.isPushEnabled(function(isEnabled) {

      // Revert the one and zero to true and false.
      $scope.pushNotification.checked = isEnabled ? true : false;

    });

    // Incoming message callback
    var handleIncomingPush = function(event) {
      if(event.message) {
        
        // timeout 0 for iOS
        $timeout(function(){
          // Alert with message
          Notification.alert(event.message);
          console.log(event);

          // if url available navigate to
          // @todo test
          if(event.extras.url){
            console.log(event.extras.url);
            $state.go('calendarbyId', {eventId: event.extras.url});
          }
        }, 0);

      } else {
        $timeout(function(){
          console.log("No incoming message");
        }, 0)
      }
    }

    // Registration callback
    var onRegistration = function(event)  {
      if (event.error) {
          Notification.alert('There was an error registering for push notifications.');
          console.log(event.error);
      } else {
          // Notification.alert("Registered with ID: " + event.pushID);
          console.log("Registered with ID: " + event.pushID);
      }
    }

    // Register for any urban airship events
    document.addEventListener("urbanairship.registration", onRegistration, false)
    document.addEventListener("urbanairship.push", handleIncomingPush, false)
    
    // Handle resume
    document.addEventListener("resume", function() {
      console.log("Device resume!", new Date())
      
      PushNotification.resetBadge()
      PushNotification.getIncoming(handleIncomingPush)

      // Reregister for urbanairship events if they were removed in pause event
      document.addEventListener("urbanairship.registration", onRegistration, false)
      document.addEventListener("urbanairship.push", handleIncomingPush, false)
    }, false)


    // Handle resume
    document.addEventListener("active", function() {
      console.log("Device active!", new Date())
      
      PushNotification.resetBadge()
      PushNotification.getIncoming(handleIncomingPush)

      // Reregister for urbanairship events if they were removed in pause event
      document.addEventListener("urbanairship.registration", onRegistration, false)
      document.addEventListener("urbanairship.push", handleIncomingPush, false)
    }, false)

    // Handle pause
    document.addEventListener("pause", function() {
      console.log("Device pause!", new Date())
     
      // Remove urbanairship events.  Important on android to not receive push in the background.
      document.removeEventListener("urbanairship.registration", onRegistration, false)
      document.removeEventListener("urbanairship.push", handleIncomingPush, false)
    }, false)

    // Handle pause
    document.addEventListener("resign", function() {
      console.log("Device resign!", new Date())
     
      // Remove urbanairship events.  Important on android to not receive push in the background.
      document.removeEventListener("urbanairship.registration", onRegistration, false)
      document.removeEventListener("urbanairship.push", handleIncomingPush, false)
    }, false)

    // Register for notification types
    PushNotification.registerForNotificationTypes(PushNotification.notificationType.badge | 
      PushNotification.notificationType.sound | 
      PushNotification.notificationType.alert)
    
    // Get any incoming push from device ready open
    PushNotification.getIncoming(handleIncomingPush)

1 Like

tnx for the code…i was having problems with registering device tokens.
do you have any idea on how to do it on the mobile device? tnx

You have to test on a real device and make sure of the provisioning profiles that supports push notifications.

I was wondering if you had any more code to share for this example, to provide context? I have been trying to get UA working with ionic, with no luck - the UA example app (included with their cordova plugin) works perfectly first time, but despite everything I’ve tried in ionic I can’t get the android push registration to happen…