forked from EFForg/actioncenter-mobile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
push.js
77 lines (64 loc) · 2.35 KB
/
push.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* Push notification handler.
*
* Requires that the Cordova push plugin has been installed:
* cordova plugin add https://github.com/phonegap-build/PushPlugin.git
*/
var appSettings = require('../../build/app_settings');
var pushConstants = require('./push/constants');
var PushNotificationService = function (
$rootScope, $state, $cordovaPush, acmGCMPushNotification, acmAPNSPushNotification) {
var service = {
getPlatformPushService_: function (devicePlatform) {
if (devicePlatform === 'ANDROID') {
return acmGCMPushNotification;
} else if (devicePlatform === 'IOS') {
return acmAPNSPushNotification;
}
},
/**
* Register the device with the notification backend.
*/
register: function () {
var platform = ionic.Platform.platform().toUpperCase();
var devicePushHandler = this.getPlatformPushService_(platform);
if (!angular.isUndefined(devicePushHandler)) {
var pushConfig = appSettings['CREDENTIALS'][platform];
if (platform === 'IOS') {
angular.extend(pushConfig, {
'badge': 'true',
'sound': 'true',
'alert': 'true'
});
} else if (platform === 'ANDROID') {
// Android uses the local notification interface to pop up notifications, so register the click
// handler here.
window.plugin.notification.local.onclick = function (id, state, json) {
if (id === pushConstants.PUSH_RECEIVED_FOREGROUND_NOTIFICATION_ID) {
$state.go('acm.homeTabs.home', {}, {reload: true});
}
};
}
$cordovaPush.register(pushConfig).then(
devicePushHandler.registrationSuccess, devicePushHandler.registrationError);
}
},
/**
* Top level handler for push notifications on all platforms.
*
* @param {*} event The push notification event.
*/
handlePushNotification: function (event) {
var devicePlatform = ionic.Platform.platform().toUpperCase();
this.getPlatformPushService_(devicePlatform).handleNotification(event);
}
};
/**
* Listen to push notification events from the event bus.
*/
$rootScope.$on('pushNotificationReceived', function (event, pushEvent) {
service.handlePushNotification(pushEvent);
});
return service;
};
module.exports = PushNotificationService;