Skip to content

Instantly share code, notes, and snippets.

@danielslz
Last active May 20, 2016 15:12
Show Gist options
  • Save danielslz/b63f6acc7502ca8528e6 to your computer and use it in GitHub Desktop.
Save danielslz/b63f6acc7502ca8528e6 to your computer and use it in GitHub Desktop.
Ionic Push Test
angular.module('app', ['ionic', 'ionic.service.core', 'ionic.service.push', 'app.constants', 'app.controllers', 'app.services', 'app.routes', 'ngCordova'])
.run(function ($ionicPlatform, Users, PushService) {
$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 && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
// if logged in, has a user
Users.get().then(function (user) {
if (user !== null) {
PushService.init(user);
}
});
});
})
curl -X POST -H "Authorization: Bearer MY_API_TOKEN" -H "Content-Type: application/json" -d '{
"tokens": ["MY_DEVICE_TOKEN"],
"profile": "prod",
"notification": {
"message": "Hello World!",
"title": "Test push",
"android": {
"payload": {
"proc_id": 1
}
},
"ios": {
"payload": {
"proc_id": 1
}
}
}
}' "https://api.ionic.io/push/notifications"
.factory('PushService', function ($state, $ionicLoading, $ionicPopup, $ionicPush, DeviceTokenService, Users) {
var self = this;
self.show = function () {
$ionicLoading.show({
template: '<p>Updating data...</p><ion-spinner></ion-spinner>'
});
};
self.hide = function () {
$ionicLoading.hide();
};
self.init = function (user) {
var authProvider = 'basic';
var authSettings = { 'remember': true };
var loginDetails = {
'email': user.email,
'password': user.password
};
// try authenticate
Ionic.Auth.login(authProvider, authSettings, loginDetails).then(function success () {
self.setUserData(user);
}, function error () {
// if fail, register user
Ionic.Auth.signup(loginDetails).then(function () {
// then authenticate
Ionic.Auth.login(authProvider, authSettings, loginDetails).then(function success () {
self.setUserData(user);
});
}, function (errors) {
console.error(errors);
});
});
};
self.setUserData = function (user) {
var ionicUser = Ionic.User.current();
// config ionic.io user data
ionicUser.details.name = user.name;
ionicUser.details.image = user.avatar;
ionicUser.save();
// register push notification
self.setPushData(user);
};
self.setPushData = function (user) {
$ionicPush.init({
'debug': true,
'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) {
alert('callback notification fired');
var payload = notification.payload;
if (payload.proc_id) {
self.show($ionicLoading);
// update data
ProcService.getProc(payload.proc_id, user).then(function (success) {
// redir to proc screen
$state.go('app.proc-push', {}, {reload: true});
self.hide($ionicLoading);
}, function error (error) {
self.hide($ionicLoading);
$ionicPopup.alert({
title: 'Error!',
template: 'Something whent wrong.',
okType: 'button-balanced'
});
console.error(error);
});
}
return true;
},
'pluginConfig': {
'ios': {
'badge': true,
'sound': true,
'alert': true
},
'android': {
'iconColor': '#D5D4D4',
'forceShow': true
}
}
});
var callback = function (token) {
// save token on ionic.io
$ionicPush.saveToken(token);
alert('callback register fired');
};
$ionicPush.register(callback);
};
return self;
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment