From 69e86d98b1e05d1efcaed4be3c50c394fb782ea0 Mon Sep 17 00:00:00 2001 From: Pepe Date: Thu, 22 Feb 2018 20:48:58 +0100 Subject: [PATCH 01/59] Added VoIP Notifications support for iOS (#2194) * Ios VoIP Push feature * VoIP feature bugs fixed * VoIP JS connector * VoIPPush feature included in the main PushPlugin class * VoIP feature: Removed sources from config.xml * VoIP feature: PushKit framework fixed in plugin.xml * Update API.md * Update PAYLOAD.md * API.md suggestions modified * PushPlugin.m pull request requested changes * push.js reverted to previous commit * PushPlugin.m removed unused code --- docs/API.md | 23 +++ docs/PAYLOAD.md | 11 ++ plugin.xml | 4 +- src/ios/PushPlugin.h | 5 + src/ios/PushPlugin.m | 330 ++++++++++++++++++++++++------------------- 5 files changed, 226 insertions(+), 147 deletions(-) diff --git a/docs/API.md b/docs/API.md index 364208565..de44728c6 100644 --- a/docs/API.md +++ b/docs/API.md @@ -66,6 +66,7 @@ All iOS boolean options can also be specified as `string` Attribute | Type | Default | Description --------- | ---- | ------- | ----------- +`ios.voip` | `boolean` | `false` | Optional. If `true` the device will be set up to receive VoIP Push notifications and the other options will be ignored since VoIP notifications are silent notifications that should be handled in the "notification" event. `ios.alert` | `boolean` | `false` | Optional. If `true` the device shows an alert on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. `ios.badge` | `boolean` | `false` | Optional. If `true` the device sets the badge number on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. `ios.sound` | `boolean` | `false` | Optional. If `true` the device plays a sound on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. @@ -99,6 +100,28 @@ Make sure that the certificate you build with matches your `fcmSandbox` value. > Note: The integration between GCM and APNS is a bit finicky. Personally, I feel it is much better to send pushes to Android using GCM and pushes to iOS using APNS which this plugin does support. +#### iOS VoIP Notifications + +It is possible to receive VoIP Notifications in iOS that can execute the "notification" event also when the application is in background or closed. + +This type of notifications consist only of payload data, so the developer is the responsible of handling the event and do whatever the aplication should do when receiving one of them. The cordova-plugin-local-notifications is a good complement for the VoIP feature. + +In order to use the VoIP Notifications, you have to create a VoIP Services Certificate. There are a lot of tutorials on the web to achieve this. Once created, you must use this certificate in order to communicate with the APN Service. + +To set up the VoIP Notification in ios do: +```javascript +const push = PushNotification.init({ + ios: { + voip: true + } +}); +``` +Once set up the voip parameter to true, the rest of the options will be ignored. + +The "hasPermission" success callback will return data.isEnabled to false since there is no need to approve to use this type of notifications. + +The "finish" method has not use too when the VoIP notifications are enabled. + ### Example ```javascript diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 37f35d9c7..30886dcab 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -30,6 +30,7 @@ - [iOS Behaviour](#ios-behaviour) - [Sound](#sound-1) - [Background Notifications](#background-notifications-1) + - [VoIP Notifications](#voip-notifications) - [Action Buttons](#action-buttons-1) - [Action Buttons using GCM on iOS](#action-buttons-using-gcm-on-ios) - [GCM and Additional Data](#gcm-and-additional-data) @@ -1654,6 +1655,16 @@ push.on('notification', (data) => { It is absolutely critical that you call `push.finish()` when you have successfully processed your background push data. +## VoIP Notifications + +VoIP Notifications are a type of iOS notifications that are always received and handled also when the app is closed or in background and consist only of payload data, so the developer is the responsible of handling the event and do whatever the aplication should do when receiving one of them. The cordova-plugin-local-notifications is a good complement for the VoIP feature. + +In order to maintain the plugin data transfer standard, the payload sent to aps maintains the same structure as the one of common notifications with the consideration that the notification will be always be silent independently of the params that you pass to it. + +The `on('notification')` event handler will always be called excepting if Background App Refresh is disabled on the user's iOS device. (Settings > General > Background App Refresh). + +In order to set up your application with this type of notifications, refer to the [API guide](API.md#ios-voip-notifications). + ## Action Buttons Your notification can include action buttons. For iOS 8+ you must setup the possible actions when you initialize the plugin: diff --git a/plugin.xml b/plugin.xml index d09d609fa..b7fdb6fb7 100755 --- a/plugin.xml +++ b/plugin.xml @@ -68,6 +68,7 @@ remote-notification + voip @@ -81,6 +82,7 @@ + @@ -91,4 +93,4 @@ - \ No newline at end of file + diff --git a/src/ios/PushPlugin.h b/src/ios/PushPlugin.h index 4cc1dcb0e..048e2a39d 100644 --- a/src/ios/PushPlugin.h +++ b/src/ios/PushPlugin.h @@ -26,6 +26,7 @@ #import #import #import +#import @protocol GGLInstanceIDDelegate; @protocol GCMReceiverDelegate; @@ -68,6 +69,10 @@ - (void)didSendDataMessageWithID:(NSString *)messageID; - (void)didDeleteMessagesOnServer; +// VoIP Features +- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type; +- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type; + // FCM Features @property(nonatomic, assign) BOOL usesFCM; @property(nonatomic, strong) NSNumber *fcmSandbox; diff --git a/src/ios/PushPlugin.m b/src/ios/PushPlugin.m index eb7b69ef0..983f00853 100644 --- a/src/ios/PushPlugin.m +++ b/src/ios/PushPlugin.m @@ -158,176 +158,189 @@ - (void)unsubscribe:(CDVInvokedUrlCommand*)command; - (void)init:(CDVInvokedUrlCommand*)command; { - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(onTokenRefresh) - name:kFIRInstanceIDTokenRefreshNotification object:nil]; - - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageFailure:) - name:FIRMessagingSendErrorNotification object:nil]; + NSMutableDictionary* options = [command.arguments objectAtIndex:0]; + NSMutableDictionary* iosOptions = [options objectForKey:@"ios"]; + id voipArg = [iosOptions objectForKey:@"voip"]; + if (([voipArg isKindOfClass:[NSString class]] && [voipArg isEqualToString:@"true"]) || [voipArg boolValue]) { + [self.commandDelegate runInBackground:^ { + NSLog(@"Push Plugin VoIP set to true"); + + self.callbackId = command.callbackId; + + PKPushRegistry *pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; + pushRegistry.delegate = self; + pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; + }]; + } else { + NSLog(@"Push Plugin VoIP missing or false"); + [[NSNotificationCenter defaultCenter] + addObserver:self selector:@selector(onTokenRefresh) + name:kFIRInstanceIDTokenRefreshNotification object:nil]; - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(sendDataMessageSuccess:) - name:FIRMessagingSendSuccessNotification object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self selector:@selector(sendDataMessageFailure:) + name:FIRMessagingSendErrorNotification object:nil]; - [[NSNotificationCenter defaultCenter] - addObserver:self selector:@selector(didDeleteMessagesOnServer) - name:FIRMessagingMessagesDeletedNotification object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self selector:@selector(sendDataMessageSuccess:) + name:FIRMessagingSendSuccessNotification object:nil]; - [self.commandDelegate runInBackground:^ { + [[NSNotificationCenter defaultCenter] + addObserver:self selector:@selector(didDeleteMessagesOnServer) + name:FIRMessagingMessagesDeletedNotification object:nil]; - NSLog(@"Push Plugin register called"); - self.callbackId = command.callbackId; + [self.commandDelegate runInBackground:^ { + NSLog(@"Push Plugin register called"); + self.callbackId = command.callbackId; - NSMutableDictionary* options = [command.arguments objectAtIndex:0]; - NSMutableDictionary* iosOptions = [options objectForKey:@"ios"]; + NSArray* topics = [iosOptions objectForKey:@"topics"]; + [self setFcmTopics:topics]; - NSArray* topics = [iosOptions objectForKey:@"topics"]; - [self setFcmTopics:topics]; + UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone; - UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone; + id badgeArg = [iosOptions objectForKey:@"badge"]; + id soundArg = [iosOptions objectForKey:@"sound"]; + id alertArg = [iosOptions objectForKey:@"alert"]; + id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"]; - id badgeArg = [iosOptions objectForKey:@"badge"]; - id soundArg = [iosOptions objectForKey:@"sound"]; - id alertArg = [iosOptions objectForKey:@"alert"]; - id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"]; + if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue]) + { + UserNotificationTypes |= UIUserNotificationTypeBadge; + } - if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue]) - { - UserNotificationTypes |= UIUserNotificationTypeBadge; - } + if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue]) + { + UserNotificationTypes |= UIUserNotificationTypeSound; + } - if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue]) - { - UserNotificationTypes |= UIUserNotificationTypeSound; - } + if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue]) + { + UserNotificationTypes |= UIUserNotificationTypeAlert; + } - if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue]) - { - UserNotificationTypes |= UIUserNotificationTypeAlert; - } + UserNotificationTypes |= UIUserNotificationActivationModeBackground; - UserNotificationTypes |= UIUserNotificationActivationModeBackground; + if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) { + NSLog(@"PushPlugin.register: setting badge to false"); + clearBadge = NO; + } else { + NSLog(@"PushPlugin.register: setting badge to true"); + clearBadge = YES; + [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; + } + NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge); + + isInline = NO; + + NSLog(@"PushPlugin.register: better button setup"); + // setup action buttons + NSMutableSet *categories = [[NSMutableSet alloc] init]; + id categoryOptions = [iosOptions objectForKey:@"categories"]; + if (categoryOptions != nil && [categoryOptions isKindOfClass:[NSDictionary class]]) { + for (id key in categoryOptions) { + NSLog(@"categories: key %@", key); + id category = [categoryOptions objectForKey:key]; + + id yesButton = [category objectForKey:@"yes"]; + UIMutableUserNotificationAction *yesAction; + if (yesButton != nil && [yesButton isKindOfClass:[NSDictionary class]]) { + yesAction = [self createAction: yesButton]; + } + id noButton = [category objectForKey:@"no"]; + UIMutableUserNotificationAction *noAction; + if (noButton != nil && [noButton isKindOfClass:[NSDictionary class]]) { + noAction = [self createAction: noButton]; + } + id maybeButton = [category objectForKey:@"maybe"]; + UIMutableUserNotificationAction *maybeAction; + if (maybeButton != nil && [maybeButton isKindOfClass:[NSDictionary class]]) { + maybeAction = [self createAction: maybeButton]; + } - if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) { - NSLog(@"PushPlugin.register: setting badge to false"); - clearBadge = NO; - } else { - NSLog(@"PushPlugin.register: setting badge to true"); - clearBadge = YES; - [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; - } - NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge); - - isInline = NO; - - NSLog(@"PushPlugin.register: better button setup"); - // setup action buttons - NSMutableSet *categories = [[NSMutableSet alloc] init]; - id categoryOptions = [iosOptions objectForKey:@"categories"]; - if (categoryOptions != nil && [categoryOptions isKindOfClass:[NSDictionary class]]) { - for (id key in categoryOptions) { - NSLog(@"categories: key %@", key); - id category = [categoryOptions objectForKey:key]; - - id yesButton = [category objectForKey:@"yes"]; - UIMutableUserNotificationAction *yesAction; - if (yesButton != nil && [yesButton isKindOfClass:[NSDictionary class]]) { - yesAction = [self createAction: yesButton]; - } - id noButton = [category objectForKey:@"no"]; - UIMutableUserNotificationAction *noAction; - if (noButton != nil && [noButton isKindOfClass:[NSDictionary class]]) { - noAction = [self createAction: noButton]; - } - id maybeButton = [category objectForKey:@"maybe"]; - UIMutableUserNotificationAction *maybeAction; - if (maybeButton != nil && [maybeButton isKindOfClass:[NSDictionary class]]) { - maybeAction = [self createAction: maybeButton]; - } + // First create the category + UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init]; - // First create the category - UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init]; + // Identifier to include in your push payload and local notification + notificationCategory.identifier = key; - // Identifier to include in your push payload and local notification - notificationCategory.identifier = key; + NSMutableArray *categoryArray = [[NSMutableArray alloc] init]; + NSMutableArray *minimalCategoryArray = [[NSMutableArray alloc] init]; + if (yesButton != nil) { + [categoryArray addObject:yesAction]; + [minimalCategoryArray addObject:yesAction]; + } + if (noButton != nil) { + [categoryArray addObject:noAction]; + [minimalCategoryArray addObject:noAction]; + } + if (maybeButton != nil) { + [categoryArray addObject:maybeAction]; + } - NSMutableArray *categoryArray = [[NSMutableArray alloc] init]; - NSMutableArray *minimalCategoryArray = [[NSMutableArray alloc] init]; - if (yesButton != nil) { - [categoryArray addObject:yesAction]; - [minimalCategoryArray addObject:yesAction]; - } - if (noButton != nil) { - [categoryArray addObject:noAction]; - [minimalCategoryArray addObject:noAction]; - } - if (maybeButton != nil) { - [categoryArray addObject:maybeAction]; - } + // Add the actions to the category and set the action context + [notificationCategory setActions:categoryArray forContext:UIUserNotificationActionContextDefault]; - // Add the actions to the category and set the action context - [notificationCategory setActions:categoryArray forContext:UIUserNotificationActionContextDefault]; + // Set the actions to present in a minimal context + [notificationCategory setActions:minimalCategoryArray forContext:UIUserNotificationActionContextMinimal]; - // Set the actions to present in a minimal context - [notificationCategory setActions:minimalCategoryArray forContext:UIUserNotificationActionContextMinimal]; + NSLog(@"Adding category %@", key); + [categories addObject:notificationCategory]; + } - NSLog(@"Adding category %@", key); - [categories addObject:notificationCategory]; } - } + if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) { + UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:categories]; + dispatch_async(dispatch_get_main_queue(), ^{ + [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; + [[UIApplication sharedApplication] registerForRemoteNotifications]; + }); + } - if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) { - UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:categories]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; - [[UIApplication sharedApplication] registerForRemoteNotifications]; - }); - } + // Read GoogleService-Info.plist + NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; + + // Load the file content and read the data into arrays + NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; + fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; + BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; + + NSLog(@"FCM Sender ID %@", fcmSenderId); + + // GCM options + [self setFcmSenderId: fcmSenderId]; + if(isGcmEnabled && [[self fcmSenderId] length] > 0) { + NSLog(@"Using FCM Notification"); + [self setUsesFCM: YES]; + dispatch_async(dispatch_get_main_queue(), ^{ + if([FIRApp defaultApp] == nil) + [FIRApp configure]; + [self initRegistration]; + }); + } else { + NSLog(@"Using APNS Notification"); + [self setUsesFCM:NO]; + } + id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; + + [self setFcmSandbox:@NO]; + if ([self usesFCM] && + (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || + [fcmSandboxArg boolValue])) + { + NSLog(@"Using FCM Sandbox"); + [self setFcmSandbox:@YES]; + } - // Read GoogleService-Info.plist - NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - - // Load the file content and read the data into arrays - NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; - fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; - BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; - - NSLog(@"FCM Sender ID %@", fcmSenderId); - - // GCM options - [self setFcmSenderId: fcmSenderId]; - if(isGcmEnabled && [[self fcmSenderId] length] > 0) { - NSLog(@"Using FCM Notification"); - [self setUsesFCM: YES]; - dispatch_async(dispatch_get_main_queue(), ^{ - if([FIRApp defaultApp] == nil) - [FIRApp configure]; - [self initRegistration]; - }); - } else { - NSLog(@"Using APNS Notification"); - [self setUsesFCM:NO]; - } - id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; - - [self setFcmSandbox:@NO]; - if ([self usesFCM] && - (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || - [fcmSandboxArg boolValue])) - { - NSLog(@"Using FCM Sandbox"); - [self setFcmSandbox:@YES]; - } + if (notificationMessage) { // if there is a pending startup notification + dispatch_async(dispatch_get_main_queue(), ^{ + // delay to allow JS event handlers to be setup + [self performSelector:@selector(notificationReceived) withObject:nil afterDelay: 0.5]; + }); + } - if (notificationMessage) { // if there is a pending startup notification - dispatch_async(dispatch_get_main_queue(), ^{ - // delay to allow JS event handlers to be setup - [self performSelector:@selector(notificationReceived) withObject:nil afterDelay: 0.5]; - }); - } - }]; + }]; + } } - (UIMutableUserNotificationAction *)createAction:(NSDictionary *)dictionary { @@ -607,4 +620,29 @@ -(void)stopBackgroundTask:(NSTimer*)timer } } + +- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type +{ + if([credentials.token length] == 0) { + NSLog(@"VoIPPush Plugin register error - No device token:"); + return; + } + + NSLog(@"VoIPPush Plugin register success"); + const unsigned *tokenBytes = [credentials.token bytes]; + NSString *sToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", + ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), + ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), + ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; + + [self registerWithToken:sToken]; +} + +- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type +{ + NSLog(@"VoIP Notification received"); + self.notificationMessage = payload.dictionaryPayload; + [self notificationReceived]; +} + @end From 68884671116c9f1e23de0b9cba583a2a008516ed Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 27 Feb 2018 14:06:34 -0500 Subject: [PATCH 02/59] Issue #2051: Plugin not working on android 4.4 but working in 5,6 and 7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⬆️ Bump dependency for cordova-android to 7.1.0 which forces the use of version 3.0.1 gradle tools. --- package.json | 14 +++++++------- plugin.xml | 8 ++++++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 5678ab9b9..6db392e70 100644 --- a/package.json +++ b/package.json @@ -13,12 +13,7 @@ }, "cordova": { "id": "phonegap-plugin-push", - "platforms": [ - "ios", - "android", - "windows", - "browser" - ] + "platforms": ["ios", "android", "windows", "browser"] }, "keywords": [ "ecosystem:cordova", @@ -52,10 +47,15 @@ "cordova-android": ">=6.3.0", "cordova": ">=7.1.0" }, - "2.1.2": { + "<2.2.0": { "cordova-ios": ">=4.5.0", "cordova-android": ">=6.3.0", "cordova": ">=7.1.0" + }, + "2.2.0": { + "cordova-ios": ">=4.5.0", + "cordova-android": ">=7.1.0", + "cordova": ">=7.1.0" } } }, diff --git a/plugin.xml b/plugin.xml index b7fdb6fb7..398c449b4 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,5 +1,9 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -8,7 +12,7 @@ - + From f24aed6e5ac9eb0f0fb38276648833a288fb6503 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Wed, 28 Feb 2018 13:42:10 -0500 Subject: [PATCH 03/59] :bug: Issue #2052: ServiceWorker.js Folder Instead of File --- package.json | 1 + plugin.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/package.json b/package.json index 6db392e70..9829b8e2c 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "2.2.0": { "cordova-ios": ">=4.5.0", "cordova-android": ">=7.1.0", + "cordova-browser": ">=5.0.3", "cordova": ">=7.1.0" } } diff --git a/plugin.xml b/plugin.xml index 398c449b4..a5d301fc3 100755 --- a/plugin.xml +++ b/plugin.xml @@ -13,6 +13,7 @@ + From bd85f4b045c868f021878cedc548444611e73e38 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Wed, 28 Feb 2018 13:43:42 -0500 Subject: [PATCH 04/59] :bookmark: Bumping plugin version to 2.2.0 --- plugin.xml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/plugin.xml b/plugin.xml index a5d301fc3..074bbbc14 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,9 +1,5 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -87,7 +83,7 @@ - + @@ -98,4 +94,4 @@ - + \ No newline at end of file From a5705843e669d1e14ed9fa083a6d049316d43fa1 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Wed, 28 Feb 2018 13:43:44 -0500 Subject: [PATCH 05/59] 2.2.0 --- package.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9829b8e2c..b39e94237 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "phonegap-plugin-push", "description": "Register and receive push notifications.", "types": "./types/index.d.ts", - "version": "2.1.3", + "version": "2.2.0", "homepage": "http://github.com/phonegap/phonegap-plugin-push#readme", "repository": { "type": "git", @@ -13,7 +13,12 @@ }, "cordova": { "id": "phonegap-plugin-push", - "platforms": ["ios", "android", "windows", "browser"] + "platforms": [ + "ios", + "android", + "windows", + "browser" + ] }, "keywords": [ "ecosystem:cordova", From 0dc1d658565a3e358c2f0d8918fca171e95e27b0 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Wed, 28 Feb 2018 13:53:38 -0500 Subject: [PATCH 06/59] Update CHANGELOG --- CHANGELOG.md | 1911 ++++++++++++++++++++++++++------------------------ 1 file changed, 992 insertions(+), 919 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f078fdb7..498c3ebf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,1260 +1,1333 @@ # Change Log +## [v2.2.0](https://github.com/phonegap/phonegap-plugin-push/tree/v2.2.0) (2017-10-23) + +[Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.1.0...v2.2.0) + +* πŸ› Issue #2052: ServiceWorker.js Folder Instead of File [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/f24aed6e5ac9eb0f0fb38276648833a288fb6503) +* Issue #2051: Plugin not working on android 4.4 but working in 5,6 and 7 [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/68884671116c9f1e23de0b9cba583a2a008516ed) +* Added VoIP Notifications support for iOS (#2194) [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/69e86d98b1e05d1efcaed4be3c50c394fb782ea0) +* πŸ§πŸ›πŸ” Issue #2209: Use of an insecure Random Number Generator [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/e3a641780055b9b30380c4b1cd537d51c9353717) +* πŸ“ Explicit side effects for `.unregister()` [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/58e87593e749d5c6da2a45906a8c7c9309d6b09a) +* πŸ•ΈοΈ Issue #2109: Receive push notifications when using cordova-browser [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/f6e0dccfb2a6906c37b5f89f2d2170c3ff420d97) +* ⬆️ Issue #2097: Receiving multiple notifications although it is sent [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/3dabcb8c3c93f12e4d103f539935ce239adf1f9a) +* πŸ“ Issue #2087: Sending one unique push for iOS and Android [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/6c039164869612a0cee02ac66f2e846ee1aeced7) +* ⬆️ Bump default FCM version to 11.6.0 [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/9d6c388853aba8cfb6c3b193fc36154381ed585c) +* πŸ“ Issue #2087: Sending one unique push for iOS and Android [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/4576512d00227959e447a022e425b79114c80786) +* Update INSTALLATION.md [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/40dba0b9501a9b4c8b4d2eb492399c5723a41163) +* Fix instructions in README about google-services.json [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/a80996d06f41e370af07121ee53fb48adea2b9d0) +* πŸ“ Add contributor thank you [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/c6f2c91d2217c7f42bbb6405b1b538029cf0a35c) +* πŸ”§ Update gradle file for cordova-android 7 [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/8e28a4e6dea33b142f488cc2e336cbf0f42f6dd6) +* πŸ›πŸŽ Issue #1826: Ionic Build Error, cannot find GoogleService-Info.plist [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/b8b38c25c03c99a5e66ca4bbeaf6db373bc071da) +* πŸ› Issue #1926: [question] FCM on ios [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/ec6f2d9be06eb7ca61c81cb0b73b7c9aa9d4818a) +* πŸ“ Issue #2033: A confusing part in the Android section of the install [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/9afac3882d93f445f800be681b1ac491ececd7ff) +* fixed issue #2061: Localization in message not working correctly. [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/b8454d169a004a3414f029755647715bdba39531) +* cleaned up PAYLOAD.md (#2040) [view commit](https://github.com/phonegap/phonegap-plugin-push/commit/3398120e2c6848a6e96267d083f5011f0c0f6f71) + ## [v2.1.0](https://github.com/phonegap/phonegap-plugin-push/tree/v2.1.0) (2017-10-23) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0...v2.1.0) -- 2.1.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a087ea4574b13808c8f657fed0fff543c56cfd15) -- :bookmark: Bumping plugin version to 2.1.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a8e19982068d7f0c281bc55ef32741a26749ba7a) -- :heavy_minus_sign: Remove pre-commit hook [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/be680b01110cbfff320eb404b7511df0c016ca54) -- :arrow_up: bump pluginpub to 0.0.9 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7b739205d2291b01fe7055fe6ff86d6418b1f67) -- ✨🍎 Issue #1980: Remove confusing action button syntax and replace with events [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c5786050a3b3d9ae58044a8c87b0f475808a221) -- ✨🐧 Issue #1950: Implement Android Oreo Notification badges [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7d8fce6a6dfbd3d59abe0eef671cee67f5c7ffa) -- πŸ”¨ Issue #1949: make function name more explicit [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/798a5a02b2f86754adff41b6f65aa30a50fba6bb) -- ✨ Issue #1949: add a listChannels method [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8e70e359d586916c856f924edd42b607fd03eb4) -- πŸ› Issue #1949: Guard notification channel on older OS versions [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a301e473789b67abbe2fc16f473658ad3b16d662) -- ✨ Update to Issue #1949: Implement notification channels [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/acbebfa88171544d838c7aa5623d65cfffc9f0a2) -- ✨🐧 Issue #1314: Use icons from mipmap resources [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b98d6289edc3e766877d49867ce3cdba4721759) -- πŸ› Issue #1996: fix PR to use getBoolean not optBoolean [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/32ad27dc53739b2524082f59bf05eb7d12eb8da0) -- Add ongoing notifications for android (#1996) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c1e29c1a4d82b2e1ac64dfd475e7a818589b1a02) -- πŸ›πŸ§πŸ”₯ Issue #1930: Android 8: PushNotification.hasPermission() returns true although push notifications are disabled by the system [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/28f7089d5f0f66b7b4ce71c93766315c29e49fe6) -- πŸ›πŸ§ Issue #1718: cordova run android not working [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/468f6001c24a0e4889f64ad384f86585ff22ba9b) -- πŸ›πŸŽ Issue #1988: iOS 11 + xcode 9: warnings on calling UI methods from a background thread [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cef862be704c74acc7abdd50899d925221ca6039) -- Merge pull request #2011 from jacquesdev/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/073d6be83d1899f075331db87fe1e0181c11096b) -- Keep docs up to date with es6 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/34ea498c3ec3feb9107315a1e6a2222816db22a0) -- πŸ› Issue #1994: Unresolved Merge Conflict in master branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d39520f521325bb4a2dd1703acf70b0230f94b7e) -- ✨ #1984: Allow inline reply text to be set via push payload [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bc01b5685ea7d90b11e1c86dc173b8d19af3296) -- Update FCMService.java (#1984) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0d667739b03f675b8959022db5e9b8ed05467a59) -- πŸ“ Issue #1982: Get GCM Id in Android but not FCM in iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/21b4fdcd73748ed36d6283f85c77192421b80387) -- 🐧 πŸ“ Issue #1980: Remove confusing action button syntax and replace wi… (#1981) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cb03db294431593cba83f02e5c739bd63b6d886) -- πŸ“ Issue #1977: Silent Notifications failing to call push.on('notification') in the background with iOS 11 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d0ad41fb5582bea2c021e6aee20a47a46ff87ed) -- Set the launch args correctly on windows (#1976) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/18cf3f4d5bee0582dbe90c1e660884e80aba87b8) -- :bug: Issue #1970: No custom sound plays when notification is forced in foreground. (#1971) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f936707d3d5b2e571d9756ee4b51608ce4c69980) -- Remove duplicated action to unsubscribe topic (#1974) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7742eb43fc330569a84b174dc1d25523c581e299) -- :sparkles: Issue #1949: Implement notification channels [view commit](http://github.com/phonegap/phonegap-plugin-push/commit3bce4d4c81e738cb6557f1267807fb89406378a0) -- :memo: Issue #1819: Android - app doesn't come to foreground when clicking notification [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eda5e430bb698ecec97b3a3d105be00807c1e7fd) -- Catch the resource not found execption when 'gcm_defaultSenderId' is not defined, for whatever reason, so that the app does not crash. (#1923) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7d22655fe9de630ee75299f21135be76960c8cc2) -- :wrench: add precommit hook [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cd3cd2ba7ea37cde47410281e44693db9ffb1e7c) -- :shirt: Fixing linting errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1b109f56b1c72f9507e41eacde9a13e7e7d1561a) -- Merge pull request #1919 from TillaTheHun0/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9998b52762ed684b57902de8f2619fac617b743a) -- Update PAYLOAD.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/19f07aa6c2d1bfd996ac7a9176e4029191b94fa0) -- :memo: Issue #1825: Build iOS app without Firebase [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a747ec16c0bd0c80b3fbbdc13eeec7ee3f107f60) -- Added `hasPermission` support for Windows platform. (#1908) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ddc9d2d7d4574e3cabf6146fff2faf6c8cdeb56e) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9bbca66d06f2a2df47c835028b45a0ced30851) +* 2.1.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a087ea4574b13808c8f657fed0fff543c56cfd15) +* :bookmark: Bumping plugin version to 2.1.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a8e19982068d7f0c281bc55ef32741a26749ba7a) +* :heavy_minus_sign: Remove pre-commit hook [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/be680b01110cbfff320eb404b7511df0c016ca54) +* :arrow_up: bump pluginpub to 0.0.9 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7b739205d2291b01fe7055fe6ff86d6418b1f67) +* ✨🍎 Issue #1980: Remove confusing action button syntax and replace with events [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c5786050a3b3d9ae58044a8c87b0f475808a221) +* ✨🐧 Issue #1950: Implement Android Oreo Notification badges [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7d8fce6a6dfbd3d59abe0eef671cee67f5c7ffa) +* πŸ”¨ Issue #1949: make function name more explicit [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/798a5a02b2f86754adff41b6f65aa30a50fba6bb) +* ✨ Issue #1949: add a listChannels method [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8e70e359d586916c856f924edd42b607fd03eb4) +* πŸ› Issue #1949: Guard notification channel on older OS versions [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a301e473789b67abbe2fc16f473658ad3b16d662) +* ✨ Update to Issue #1949: Implement notification channels [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/acbebfa88171544d838c7aa5623d65cfffc9f0a2) +* ✨🐧 Issue #1314: Use icons from mipmap resources [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b98d6289edc3e766877d49867ce3cdba4721759) +* πŸ› Issue #1996: fix PR to use getBoolean not optBoolean [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/32ad27dc53739b2524082f59bf05eb7d12eb8da0) +* Add ongoing notifications for android (#1996) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c1e29c1a4d82b2e1ac64dfd475e7a818589b1a02) +* πŸ›πŸ§πŸ”₯ Issue #1930: Android 8: PushNotification.hasPermission() returns true although push notifications are disabled by the system [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/28f7089d5f0f66b7b4ce71c93766315c29e49fe6) +* πŸ›πŸ§ Issue #1718: cordova run android not working [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/468f6001c24a0e4889f64ad384f86585ff22ba9b) +* πŸ›πŸŽ Issue #1988: iOS 11 + xcode 9: warnings on calling UI methods from a background thread [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cef862be704c74acc7abdd50899d925221ca6039) +* Merge pull request #2011 from jacquesdev/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/073d6be83d1899f075331db87fe1e0181c11096b) +* Keep docs up to date with es6 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/34ea498c3ec3feb9107315a1e6a2222816db22a0) +* πŸ› Issue #1994: Unresolved Merge Conflict in master branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d39520f521325bb4a2dd1703acf70b0230f94b7e) +* ✨ #1984: Allow inline reply text to be set via push payload [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bc01b5685ea7d90b11e1c86dc173b8d19af3296) +* Update FCMService.java (#1984) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0d667739b03f675b8959022db5e9b8ed05467a59) +* πŸ“ Issue #1982: Get GCM Id in Android but not FCM in iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/21b4fdcd73748ed36d6283f85c77192421b80387) +* 🐧 πŸ“ Issue #1980: Remove confusing action button syntax and replace wi… (#1981) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cb03db294431593cba83f02e5c739bd63b6d886) +* πŸ“ Issue #1977: Silent Notifications failing to call push.on('notification') in the background with iOS 11 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d0ad41fb5582bea2c021e6aee20a47a46ff87ed) +* Set the launch args correctly on windows (#1976) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/18cf3f4d5bee0582dbe90c1e660884e80aba87b8) +* :bug: Issue #1970: No custom sound plays when notification is forced in foreground. (#1971) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f936707d3d5b2e571d9756ee4b51608ce4c69980) +* Remove duplicated action to unsubscribe topic (#1974) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7742eb43fc330569a84b174dc1d25523c581e299) +* :sparkles: Issue #1949: Implement notification channels [view commit](http://github.com/phonegap/phonegap-plugin-push/commit3bce4d4c81e738cb6557f1267807fb89406378a0) +* :memo: Issue #1819: Android - app doesn't come to foreground when clicking notification [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eda5e430bb698ecec97b3a3d105be00807c1e7fd) +* Catch the resource not found execption when 'gcm_defaultSenderId' is not defined, for whatever reason, so that the app does not crash. (#1923) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7d22655fe9de630ee75299f21135be76960c8cc2) +* :wrench: add precommit hook [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cd3cd2ba7ea37cde47410281e44693db9ffb1e7c) +* :shirt: Fixing linting errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1b109f56b1c72f9507e41eacde9a13e7e7d1561a) +* Merge pull request #1919 from TillaTheHun0/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9998b52762ed684b57902de8f2619fac617b743a) +* Update PAYLOAD.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/19f07aa6c2d1bfd996ac7a9176e4029191b94fa0) +* :memo: Issue #1825: Build iOS app without Firebase [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a747ec16c0bd0c80b3fbbdc13eeec7ee3f107f60) +* Added `hasPermission` support for Windows platform. (#1908) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ddc9d2d7d4574e3cabf6146fff2faf6c8cdeb56e) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9bbca66d06f2a2df47c835028b45a0ced30851) ## [v2.0.0](https://github.com/* remote origin - Fetch URL: https://github.com//tree/v2.0.0) (2017-08-02) + +Fetch URL: https://github.com//tree/v2.0.0) (2017-08-02) [Full Changelog](https://github.com/* remote origin - Fetch URL: https://github.com//compare/v2.0.0-rc5...v2.0.0) +Fetch URL: https://github.com//compare/v2.0.0-rc5...v2.0.0) -- 2.0.0 [view commit](http://github.com/* remote origin +* 2.0.0 [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/d19db8cc6c845fc5504a618077d37c7ad44d3a9a) -- :bookmark: Bumping plugin version to 2.0.0 [view commit](http://github.com/* remote origin +* :bookmark: Bumping plugin version to 2.0.0 [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/44280ee917ccbee22cf62156ce34fa69aec6f110) -- :wrench: Add package-lock.json to git ignore [view commit](http://github.com/* remote origin +* :wrench: Add package-lock.json to git ignore [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/88e43f869a6469be3f1a2f50ad64fb3a4e22e1c9) -- update ShortcutBadger to 1.1.17 (#1873) [view commit](http://github.com/* remote origin +* update ShortcutBadger to 1.1.17 (#1873) [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/02c43301a2c39b516f0281dd2a30e8e813649212) -- :memo: Issue #1863: Linker error for iOS build [view commit](http://github.com/* remote origin +* :memo: Issue #1863: Linker error for iOS build [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/e509983a0124469765d0d693c92d8e023475b526) -- :memo: Update minimum CLI version in docs [view commit](http://github.com/* remote origin +* :memo: Update minimum CLI version in docs [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/f13ac0404d402a4a59267d92ac8a2ca9ca444a45) -- update engines to use cordova 7 (#1877) [view commit](http://github.com/* remote origin +* update engines to use cordova 7 (#1877) [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/983c9ad90934edf891ec54a7c3ca101b584710cc) -- Fix topic registration (#1855) [view commit](http://github.com/* remote origin +* Fix topic registration (#1855) [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/781e6f551e8e1509dd6184c84347e36aa163e092) -- Merge pull request #1827 from szh/master [view commit](http://github.com/* remote origin +* Merge pull request #1827 from szh/master [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/2a8e3dff3698710b2e5fed8dea91deaa0705bbdc) -- Add clearAllNotifications() to type definitions [view commit](http://github.com/* remote origin +* Add clearAllNotifications() to type definitions [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/8460ecf725ea6ca62b933a2f7c5a6c82628599eb) -- Only use GCM if IS_GCM_ENABLED is true in the google plist (#1821) [view commit](http://github.com/* remote origin +* Only use GCM if IS_GCM_ENABLED is true in the google plist (#1821) [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/04cb6af750271d421f5bab2e5b46f5c15faee20c) -- :apple: Issue #1340: Drop support for iOS 8 [view commit](http://github.com/* remote origin +* :apple: Issue #1340: Drop support for iOS 8 [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/d724805bfa4088ebbd00fcb8cb3ccbc36defefdd) -- V2.x Android: handle dismissed notifications (#1816) [view commit](http://github.com/* remote origin +* V2.x Android: handle dismissed notifications (#1816) [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/118b1a454eebc9e5b053f40be3f1a3af253d783e) -- :fire: Removing RegistrationIntentService class [view commit](http://github.com/* remote origin +* :fire: Removing RegistrationIntentService class [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/3dcc7ff67295aee9a6a9b3554061284cb6db3332) -- :sparkles::apple::penguin: Issue #1787: Pass token type during registration event [view commit](http://github.com/* remote origin +* :sparkles::apple::penguin: Issue #1787: Pass token type during registration event [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/1ade39a5fc618173bcc12448a86f3fe9702319a3) -- :memo: Issue #1811: [DOCS] Update additional-resources section of INSTALLATION.md [view commit](http://github.com/* remote origin +* :memo: Issue #1811: [DOCS] Update additional-resources section of INSTALLATION.md [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/c350ce2c0cffb763eb2b1a84295cd701bf33693a) -- Updating CHANGELOG [view commit](http://github.com/* remote origin +* Updating CHANGELOG [view commit](http://github.com/* remote origin Fetch URL: https://github.com//commit/0264f2f5edf577053bcd436977a4f54ecd5e13b7) ## [v2.0.0-rc5](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc5) (2017-06-20) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc4...v2.0.0-rc5) -- 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5dfcb4e364a1b31d98d4b9683d9e4fe2e0e5d2d) -- :bookmark: Bumping plugin version to 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bb16bea611e9c472f34c3ede9a1a6d00a8e4c4d) -- :arrow_up: Bump FCM to 11.0.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/576135bf576be6e2cd183101d3d7219b4d297030) -- :penguin: Issue #1796: Remove hook from 2.0.0 version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/464636b9ae257afc712cfebcc1ed11425590c509) -- :memo: Issue #1552: library not found for -lPods-Appname [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95b23cdf5ae68faf714d63ac69cfe71ce7034dba) -- :checkered_flag: Issue #1670: Subscribe and Unsubscribe for windows [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/228cdb4062f6019f878c456b89ef0685955ac7ed) -- :memo: Issue #1760: fcmSandbox vs gcmSandbox [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64562177a6d32f34b29f2a97fcc8846db9926a1c) -- :bug: Issue #1785: plugin fails to install on windows using plugman [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156adfc70e85a21cb9f3134de72781db405c5e07) -- :memo: Issue #1767: Ionic 2 Android build fails with error (Can't find google-services.json file) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa9625e7530f4c2280804fc0fcd52a7b7476e5eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f98be137f997c2bbd32e5c192c1e928e4e1f2c9) +* 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5dfcb4e364a1b31d98d4b9683d9e4fe2e0e5d2d) +* :bookmark: Bumping plugin version to 2.0.0-rc5 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bb16bea611e9c472f34c3ede9a1a6d00a8e4c4d) +* :arrow_up: Bump FCM to 11.0.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/576135bf576be6e2cd183101d3d7219b4d297030) +* :penguin: Issue #1796: Remove hook from 2.0.0 version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/464636b9ae257afc712cfebcc1ed11425590c509) +* :memo: Issue #1552: library not found for -lPods-Appname [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95b23cdf5ae68faf714d63ac69cfe71ce7034dba) +* :checkered_flag: Issue #1670: Subscribe and Unsubscribe for windows [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/228cdb4062f6019f878c456b89ef0685955ac7ed) +* :memo: Issue #1760: fcmSandbox vs gcmSandbox [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64562177a6d32f34b29f2a97fcc8846db9926a1c) +* :bug: Issue #1785: plugin fails to install on windows using plugman [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156adfc70e85a21cb9f3134de72781db405c5e07) +* :memo: Issue #1767: Ionic 2 Android build fails with error (Can't find google-services.json file) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa9625e7530f4c2280804fc0fcd52a7b7476e5eb) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f98be137f997c2bbd32e5c192c1e928e4e1f2c9) ## [v2.0.0-rc4](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc4) (2017-06-01) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc3...v2.0.0-rc4) -- 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/65f2e4c56b0ed440b8668986114c2c84b49e9c68) -- :bookmark: Bumping plugin version to 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4e887023484cb5d6dd92524e05a6490d22eb3974) -- Update push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a7cc5bdb8d149a3f6e7e9d918ecd9bb27c34009f) -- :memo: Issue #1679: Please clarify the use of content-available in the payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/23f7965e26d48b43c09921138b1290a658a41528) -- Update INSTALLATION.md (#1745) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3e94bbc1dd79bf830a2342ce3d6ca0d0e1cf9a2) -- Fixing 404 link to definition file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9df6b4de82047a30b8322eb635c581de6c7252aa) -- :bug::wrench: Issue #1744: The plugin installs npm in my local node_modules [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/06bb2b207848e2dc993c28052f3ad29bf84d88c4) -- :bug: Issue #1725: Provide default for applicationServerKey [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d63bbe949edd21e86d886baf9aa00aab30f0ca95) -- :wrench: use Node 4 on Travis [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2da999beffe2ef043767c8c979ca4e7ae7a069c6) -- Fix INSTALLATION.md docs for v2.0.0 and Firebase Cloud Messaging (#1741) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/32ff975ea1318f6194ac01477ca563cfe4a0218a) -- update FirebaseMessaging podspec (#1742) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1842f7ade4643ad733c18f80b0daa211147ab72c) -- :art: Fix merge conflicts [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3efba512317119ea2d54473c7e164a6c24db3ca3) -- Merge v2.0.x into master (#1736) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d07fdf031e052f9c457319e6aaa9d7bfb72d1224) -- Fixes #1716 - Incomplete CocoaPods installation steps (#1738) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/525816cb0fd591b49f51b2844ac04e55397b6b8b) -- docs updated (#1727) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4234bfe9dab6e9f72b2ff52c3a94287154d39229) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e7cbe6ea8c863b0096425836473f2fa05a0da048) -- 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) -- :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) -- :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) -- [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) -- 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) -- :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) -- :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) -- :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) -- :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) -- :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) -- Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) -- Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) -- Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) -- Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) +* 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/65f2e4c56b0ed440b8668986114c2c84b49e9c68) +* :bookmark: Bumping plugin version to 2.0.0-rc4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4e887023484cb5d6dd92524e05a6490d22eb3974) +* Update push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a7cc5bdb8d149a3f6e7e9d918ecd9bb27c34009f) +* :memo: Issue #1679: Please clarify the use of content-available in the payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/23f7965e26d48b43c09921138b1290a658a41528) +* Update INSTALLATION.md (#1745) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3e94bbc1dd79bf830a2342ce3d6ca0d0e1cf9a2) +* Fixing 404 link to definition file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9df6b4de82047a30b8322eb635c581de6c7252aa) +* :bug::wrench: Issue #1744: The plugin installs npm in my local node_modules [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/06bb2b207848e2dc993c28052f3ad29bf84d88c4) +* :bug: Issue #1725: Provide default for applicationServerKey [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d63bbe949edd21e86d886baf9aa00aab30f0ca95) +* :wrench: use Node 4 on Travis [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2da999beffe2ef043767c8c979ca4e7ae7a069c6) +* Fix INSTALLATION.md docs for v2.0.0 and Firebase Cloud Messaging (#1741) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/32ff975ea1318f6194ac01477ca563cfe4a0218a) +* update FirebaseMessaging podspec (#1742) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1842f7ade4643ad733c18f80b0daa211147ab72c) +* :art: Fix merge conflicts [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3efba512317119ea2d54473c7e164a6c24db3ca3) +* Merge v2.0.x into master (#1736) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d07fdf031e052f9c457319e6aaa9d7bfb72d1224) +* Fixes #1716 - Incomplete CocoaPods installation steps (#1738) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/525816cb0fd591b49f51b2844ac04e55397b6b8b) +* docs updated (#1727) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4234bfe9dab6e9f72b2ff52c3a94287154d39229) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e7cbe6ea8c863b0096425836473f2fa05a0da048) +* 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) +* :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) +* :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) +* :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) +* :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) +* [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) +* 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) +* :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) +* :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) +* :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) +* :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) +* :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) +* Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) +* Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) +* Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) +* Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) +* Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) +* Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) ## [v1.10.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.4) (2017-05-17) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.3...v1.10.4) -- 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) -- :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) -- :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) -- :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) -- [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) -- :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) -- :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) +* 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec7c3ea1fafbf3fafe502d278af218715aebb909) +* :bookmark: Bumping plugin version to 1.10.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b1efe1fa069c034aaf465e040300fd2884d46075) +* :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/911a1d4fe5d3a05e0012ee8121464cfb8974ce23) +* :penguin::bug: Issue #1710: Notification message key overwritten [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4eadccd93d6daa81a05396a93fdc2033a4c90b12) +* :penguin: Fix issue #1663 by allowing message as the data payload key (#1666) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8ac07399905fb9c6b0ab48139fa76066c5e190f) +* [typo] Small fix to payload doc [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5a4a04b1be5a7dd30a9c577441b241767ec20500) +* :memo: update readme [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0cbb7a92946ac9febb5ac5960291928d539c0fe6) +* :memo: Fix PAYLOAD.md regarding "drawable" directory name (#1711) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a27a62d6e346b1e61ffe2ffaae482461cf970c03) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) ## [v2.0.0-rc3](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc3) (2017-05-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc2...v2.0.0-rc3) -- 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) -- :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) -- :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) -- :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) -- Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) -- Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) -- Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) -- Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) -- 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) -- :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) -- :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) -- :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) -- Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) -- Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) -- :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) -- fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) -- Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) -- :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) -- 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) -- :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) -- :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) -- Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) -- Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) -- 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) -- :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) -- :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) -- :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) -- :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) -- Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) -- Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) -- :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) -- :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) -- 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) -- :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) -- :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) -- Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) -- Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) -- Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) -- Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) -- return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) -- :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) -- Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) -- :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) -- 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) -- Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) -- Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) -- 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) -- :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) -- :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) -- :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) -- :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) -- :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) -- Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) -- :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) -- :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) -- :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) -- :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) -- :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa4e36606c965504dba609940a2acf24f74ed978) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/af6c31933e3daedf6e5a7f046e971efcf65cc1ea) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/99742021c8c6c2cd860c40b01db6a3dc18095dbb) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff14a71b5e365f5c93159e759f989a6bbe89b40a) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/92dca439e1b0a0750a7e466bace2c4cb3acd19d8) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cbc1cb69203c5a0fab250bd49b99a398ce86558) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7075bc8206641aa6459cf6acc4fe447fb1d57f77) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d043c5f9d7872dc4340151c0645a24716391f58f) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7a7c5c172190acab17fdfd54ad726a7a2fad701) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15e68b03956a1dd292fda87e0da4f1ad9700d9c0) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/54aa482fb8af6ac15a60fb06090077e1d68dee6c) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1276d538b80106dd2f3d67996a531e64e7aa4937) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/504f2dcb5b158e0b2e151b255aad28a659bc2c4d) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97f0aeaa1099b89076b28282b2d2daac7ec62b33) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e11d89f46572d1e4430f1f6a63945d74b56e574c) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa66ac99685f1f2b580597a45b16315ab7748028) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c539b041cbe2a2b6e9a360a91ee2a9bfdfd16b03) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce5e9fb70e4df45a10fd8348a7def64864fdd24) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f0182aff86b04c22630d1586d6ac6ca617c7e61) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/562a22f45bdafa4e2887996e9c0fa295b8bac886) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f1d14b2615d7c8330afbdbf0faa1d2438473a45d) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e4c47b5c5647866f24e6c2f47e4c98a1f8e2442) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a02580e19d470919ec61ec489cdf4ee6ca2f0d8c) +* 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b393a9d932aee66da277b404c2475cb77195d8d8) +* :bookmark: Bumping plugin version to 2.0.0-rc3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8003110d0757107ad211cd0e0b9c175e60dcd7ed) +* :package: update www/push.js [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0a3a4c6d578b2ee14a82f167934ecc8a7672557) +* :wrench: Update cordovaDependencies [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/969d546c3dc96efb59a226ee5df38de6e66e4de4) +* Bump requirements [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/85e6419cbad124eaa3eac1c1c515aa684ccf4393) +* Add resource-file way of copying google services files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46ba2745f0ebc08cc3b12f9c51177247130b592c) +* Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a5c9e456ce333b3387b2e4412248cdf45d26334c) +* Fixing package.json from failed merge/rebase. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/974d2e218bcc8ab8ebf779ef18df74622702eb0e) +* Remove hook and use resource-file tag to copy google services file [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/86763c7f2cc15eae39972e4137813edb5cd8b838) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9850b1b180c3b66f64edc1680d358a7b1df58b95) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15a68ed070d611f0569c90adaa062099120a7817) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/784b7355a62490a5ce6229292213e22e671873c8) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9b9df30cf65a275c0d4727a2854b12792ec905a2) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/620af90cdda85f64aa65cc0fc0de051cb13980ba) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ee9ecc957d8961e2a0ae884f55ee5abc71652885) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c7545607bb23ea801f7a167d3408b112e4a6e812) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2ac7442de047ecedf4a6d2c66591889e14bdafc4) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5c2fc51055343467e51f6facbd690e71273cbac2) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1b4f51fb2cd6e9ee8447fee0ce4a5e9eba0a52d) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0169587f198d0b44a06f408d803bbdac0fb1d079) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38bd3581663ccd85b2daed7b9833571a4adbc99e) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9d5dbb196763e399d5177c0d4802ecc043cfc270) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24f0a77bac10e0d8e4ff837a165a3d69c3447601) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2535a189caddba2a41f9e002930541c55360047d) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8aa6f717db7dd534c97ad559307d391788e13e47) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/740cfe2bda63548a0e9cbf62b1833a4945eb432f) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/704b3635764700d5fc06f2e9c8c6a657ea4b7f29) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/68b045e6e40cdf1d5b9ed84136bebdf5f7874b8a) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8c4d002e4b6c6b399e5c5e5456012a121ee7b20) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/632a4f1d87ff306bbc8920133e96b84125e44468) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4fb78566b5ebbbf2f04268b91f9c8cbc7193601e) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e93f04a87763a762d581a18439b2de808fc81a2c) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f827a9678dac02887872bd7374fde1c40caeb90) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/64044115de796c52132e60719d5e93fc16594002) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d1f8f8e55af40a16129cdc362e179f0c7ef60bd0) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/05c52e22945c0405b76a6d10d837ae6b015e661b) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600f6050a2c3899559148579c5bc32c1e56449fa) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660a8620874d520e2f3f3217cf20ea369affada) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3f043c21a608fdea4436409b68fbcf2c822d6c0a) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97a1615a79ab0317a5dae27b7124dbaec7bc71c7) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e04b175c72d0680b3b618fdbcce80f9f9d470055) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d21632fd2acf90847c67b0c70f0b740ed3d367a7) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b41580f7476a34014ceb03976f25989f98cbde6a) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f84574aeffc958b6ec152ca36c2ea595418e901c) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/326943dadc29fe662ce4925b8141960e31d78dd3) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5c0156bb13a22e11cf6f174a7307e404ed6d154) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/006ca17a7482490fbbfc67faa88a4c60d81a49f4) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/102934b167c4e69c9a6a5c7b41d0ca3fba0cfd25) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bccc1ba887603b8577c01ee5b885bffa0d406028) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7fe0379c6be007817c21355044bcecdd05bcc301) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c1a5572c420c88772bd3fc89d81fac21027a5be) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/98c100b12613a2885ed1afd417b1e678883d37ee) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7861fd27cd052c7e80736b8da9cba8cfae442e73) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b3dc189600842c6a8e318b032bdf215ea1c9b81f) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff2dbe0cc5a2dce0a92b6c16f35b1a67ce6a6f18) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/50285f9193f5e6b33e63c2540b8f3c7a257a5221) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f67e30d41f5ea94a60a53b00ed51b995960f89c9) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfad83fa420df5ba4ac12f2f3f7fa68fdb22cc03) +* 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) +* :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) +* :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) +* :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) +* Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) +* Merge branch 'v2.0.x' of https://github.com/phonegap/phonegap-plugin-push into v2.0.x [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/96af63840f28a57d29e21a48cc52533fa0830bea) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7371f3b31ea7a672ec6d43da7ef9475916b6c5c5) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5099c8fe435bda7d8bc7b2648d078a3b63cf19ea) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72d29bd4372e6043d38835d07839346ea204390a) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c44be0628bb42ba7ee07456524e9b1fffae64aea) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95cdee193d2977a17e778bf91ca1bcfc240dc266) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1fa7cce1168145c77fef2632ad64f8926e71d27) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef4c7e187f2c5f386d9c844ee7211c8ff1cc214c) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d52fdaf28f0535ef6dab315abd67141b0fcd0f7) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5d9dfdf179b39312a6382a48dd99d675e642a533) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/057cbd16f10581cd601079a9a10b9338df3c23eb) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/83238fce85413cdd192b5ff33139ba9a0bcd080f) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9ff3929bed6bff911027bef21168e527ff61fd2c) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/94d8cc7ec8ba3a4d466758ffb2c27104c2cc1ca3) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a837c875d8a30fc4175693dff43139569974ec22) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/49da4ea30af1a2fb479110074ddf5f67e2ba370c) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ebc5d9353bab3917f91c775cf13aec47c5ca1e04) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/505c8da8253cb8562ed16659b5ec2a8e73ec1c23) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46eafb1e5688ade278086a1644d06de4e36849b5) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3b01f155f6300dc05c625116e0c374af61d6388) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/453561c8f2dfc4ed09b6a182f6998c90408a3d44) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba0020349337160f83271b683195693ef0b4f440) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aee7b93a4d0b0bb0b9c987704c1cde82612e4445) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5e0e7d107b2c9f4aeeda3a7757213e41ac573798) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/172528ea548174fd7be62d0ab2f9816566447a61) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2727d274ef650fb0b4d25786d42f0ee5f72e9730) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/697e592d8225f4e0853a0ea72a598d10a18c832d) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c2987cbee54f04e7d44eec421b2417be5e7d716e) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f358dba691fb39757003326209a232cefce53adf) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7b7de65c2718eccc1ff0eeb2800973cd440c85a7) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8bf4343369e6b12f6ec28a104512cb3ab392e834) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3de63bdf9e5a365e3b3e295f2a305ad66b512917) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b9ad4ebdeee6700d9edf95bf051dabda5923e01a) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c119bf08869d51d5fe23f9a0fb78fd8325b35248) +* :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) +* fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) +* Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) +* :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) +* 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) +* :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) +* :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) +* Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) +* Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) +* 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) +* :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) +* :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) +* :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) +* :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) +* Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) +* Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) +* :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) +* :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) +* 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) +* :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) +* :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) +* Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) +* Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) +* Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) +* Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) +* return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) +* :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) +* Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) +* :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) +* 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) +* Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) +* Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) +* 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) +* :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) +* :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) +* :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) +* :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) +* :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) +* Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a1806aaec5d3c76f7fcd30ddfd85d576fb6d197) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/471b2aa829cb0ecc93a9a788891602ad17319a47) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7ad471ff45724828fb21630fdfbc244ba037d9d8) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b80dfb12b5053184936a4c6c881f1af55459348f) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/9796292910f2d600b22d4846c128196cfb54ba7c) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/297b8d28f2d7bf04420744c445e59a527c52d502) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/41c8e66483fc0c5f21da7477d2522a2212a8017a) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/08e496fffc7fa082410f7b16e73e6afe12da194c) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/156718a5800dfe4b87593e0732f4258c7c148bea) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0add758d08657e22501612ed258033e31c394e6a) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1f2fd671ae734201b1260bc3d7878ae9ef28673c) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/70c6e04a3ba072b91b3752173ca2287d4e448b8f) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e07d81dbb47babe161f3204cdd06222a1e2ab3c) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f3dffdcf63c3d19b4717eed89eb911b8aecdd25a) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f5182503b241f519c03c872ae12f3489383f2b83) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/27a101f1d35217e0a1b7f0be9ad0607d31ea6c57) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c25a47bd3b5c2437ce3108656449658568f2c053) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/000bc36a8ce2a00e96212b66d69f1597dac68554) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa1cc247fcf8b94c4d60d26b18c9229c112e8185) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f4bcafafe56be18f6dc64f3e634a6de594bc034) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3f0eee774c7f9791f55f85816b0aeadc5c4fb4c) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c796a49c3a44b47f58237d7e7760f5ebc34c371) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/10c5153672dc478dd072274c220200526c313604) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/aa6e3ce5449accd5397b4eda8a950fd5cebc4f0e) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b65fe745b5eabbb7437a46b46e747be4aaf5116a) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3b5f3c71657d8af3e4407ac9ea6c36e00988b1cf) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89040874c530c7f86c2acbcce5c3b88b351e80fb) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a1e90013f8ca8497acc2513f4ce3df1358293d51) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bc1ca736546242772516334f47fd4ea4f8f5e5f) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7acf338d5bff2bc25b5c1e2fa681b7e20254cc9) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a65be290d4176c1c0b51b700d673550ae22cf777) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed630d481b9035eb9df48738c0e77029937fafe9) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9c53761fa3d6fc99acaa96601e9abc673a62c23) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6c46880b57aa1dee2bbcfeb5a86b497035f46ebe) +* :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) +* :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) +* :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) +* :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) +* :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa4e36606c965504dba609940a2acf24f74ed978) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/af6c31933e3daedf6e5a7f046e971efcf65cc1ea) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/99742021c8c6c2cd860c40b01db6a3dc18095dbb) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff14a71b5e365f5c93159e759f989a6bbe89b40a) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/92dca439e1b0a0750a7e466bace2c4cb3acd19d8) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cbc1cb69203c5a0fab250bd49b99a398ce86558) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7075bc8206641aa6459cf6acc4fe447fb1d57f77) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d043c5f9d7872dc4340151c0645a24716391f58f) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f7a7c5c172190acab17fdfd54ad726a7a2fad701) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/15e68b03956a1dd292fda87e0da4f1ad9700d9c0) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/54aa482fb8af6ac15a60fb06090077e1d68dee6c) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1276d538b80106dd2f3d67996a531e64e7aa4937) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/504f2dcb5b158e0b2e151b255aad28a659bc2c4d) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97f0aeaa1099b89076b28282b2d2daac7ec62b33) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e11d89f46572d1e4430f1f6a63945d74b56e574c) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fa66ac99685f1f2b580597a45b16315ab7748028) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c539b041cbe2a2b6e9a360a91ee2a9bfdfd16b03) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce5e9fb70e4df45a10fd8348a7def64864fdd24) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6f0182aff86b04c22630d1586d6ac6ca617c7e61) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/562a22f45bdafa4e2887996e9c0fa295b8bac886) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f1d14b2615d7c8330afbdbf0faa1d2438473a45d) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e4c47b5c5647866f24e6c2f47e4c98a1f8e2442) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a02580e19d470919ec61ec489cdf4ee6ca2f0d8c) ## [v1.10.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.3) (2017-20-04) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.2...v1.10.3) -- 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) -- :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) -- :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) -- :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) -- Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) -- :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) -- fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) -- Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) -- :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) +* 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1e072b351056d453fd1c1d40d5fcac310f3e107c) +* :bookmark: Bumping plugin version to 1.10.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29df66eae54e773925e25bd92299957e4d654723) +* :bug: Handle null in getCircleBitmap (#1705) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3acdfa338d7a8b56ec4dc73c50aa9917ecb3be7c) +* :shirt: Issue #1702: The logging tag can be at most 23 characters, was 40 (PushPlugin_BackgroundActionButtonHandler) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2045873acda2e81d54b2da87cd2d10f056bd90f9) +* Shortened log tag PushPlugin_BackgroundActionButtonHandler to bring u… (#1703) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd707122b7aa78649fa6f5f73ba9b05436799926) +* :memo: Docs for interoperability with Firebase (#1693) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cebb6403143047192462f30c22b9510a8c6dbe21) +* fix headline (#1685) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2e7993544eed544eb7286868b60e2e3efb6275d) +* Fix changelog date [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3140b2b00388785f8056632376b50a1d1ef67b96) +* :arrow_up: update pluginpub to 0.0.8 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cfab7d91556a38ee81550fe47e13f2662ae810db) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/027ea2c17e4b96b848ab29046efea243e6e2da27) ## [v1.10.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.2) (2017-04-12) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.1...v1.10.2) -- 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) -- :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) -- :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) -- Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) -- Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) +* 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b5a7d4ec6e64abaed65de00be3e9bac9ab25791e) +* :bookmark: Bumping plugin version to 1.10.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5b700ad9927c401081a5de49f2a6a27ba0dfaa9a) +* :arrow_up: update pluginpub to 0.0.7 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/38564ce55e53e018c91f4063d680eedd2631b825) +* Fix the dates on the CHANGELOG (the last 2 version) (#1676) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c0f26192c906bfc1a60390333c96d5dc07433978) +* Vapid Support (#1675) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/384b60bade628035b21d23f07e284eb6e1557a10) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/97d618fb53084cfae78f397def48df791131358f) ## [v1.10.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.1) (2017-04-07) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.10.0...v1.10.1) -- 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) -- :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) -- :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) -- :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) -- :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) -- Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) -- Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) -- :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) -- :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) +* 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6211e8c3df8881a90d19b111a0e63f890d435df6) +* :bookmark: Bumping plugin version to 1.10.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6d710a06681ad84c13273fe5d20feb3033ac67b6) +* :bug: Issue #1655: App opens on clearing notification (Android) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ff417925f6d6678f0fcd8315d5f4b4b08fbb9085) +* :memo: Issue #1118: Problem with notifications stacking [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d669c44a863d86d0bb73b5ae086bc2fe6f8113a9) +* :memo: Issue #1220: [Question] the hook setting seem not work [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ef137eea370da7c225ab2a5cf63b1e97a68f4a4) +* Set get badge count android (#1644) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/630907cf3d8802bcd5d91b6bd768c989f6ef897a) +* Add plugin typings from DefinitelyTyped (#1654) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ea70d9984e176a75602e72e1d26f5404c519e29) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/700701fd2151667905d860228cf954301186721a) +* :memo: Issue #1618: No notification when app is closed on Android, not at all on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7f64bf0ffbddf3ef20de2fe540ec2718be5d0c23) +* :arrow_down: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e450fd7b623f27f27858a7537ec7950aa0f618b5) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4af3472263a5125cab6f08bbb59b83bf957144ec) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ed25a3e3ad9fb6f2af63fd07957944f974eafaa1) ## [v1.10.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.10.0) (2017-03-10) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.4...v1.10.0) -- 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) -- :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) -- :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) -- Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) -- Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) -- Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) -- Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) -- return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) -- :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) -- Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) -- :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) +* 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b9b862da8566c7717dfc79dd6b32d8a7e6774d8) +* :bookmark: Bumping plugin version to 1.10.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/626e9615fbff6ea225569ab58353ac7f58aef495) +* :heavy_plus_sign: update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c3c8058ffee888447017eb5d8c0f4f30cbcd090f) +* Issue #1464: Create round bitmap icon for large icon image passed in from local resource or url (#1635) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0dd0d468868f0b13c8d840c78dd89fca5920cd32) +* Receive notification only from SENDER_ID (#1484) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0d51e54aac39b8c58e4c67080f174c0228947c9) +* Add no-cache flag to payload (#1620) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42f8cefbd187c36534e6ab59b6611fb7f15b91f0) +* Add dismiss key to on notification data (#1621) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4259bb3cacfe2561ed44e9f16bd74f8d5ae45ae2) +* return true for old android versions, since AppOpsManager is available starting at 19 (#1634) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/945aa2ad6d266e82683e0bee86f53d258f2b31b6) +* :art: remove reference to unused String [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/75f2191632a7a51eda7510a172ae6cc9d477acb9) +* Ability to use custom keys to find message title and text on Android (#1604) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fd366296773906c91d5f8dfa3e8ba813c7c71b85) +* :memo: Fixed URL of apples custom sound documentation (#1600) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c93f8622eb1c453cb0c681158a07deca32bf200) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/409020c90edf04e0a37232cff8aadb070d4ccaa9) ## [v1.9.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.4) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.3...v1.9.4) -- 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) -- Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) -- Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) +* 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2241c7431cd60a68d2f35e7b4a5bfd797d5161b6) +* Bumping plugin version to 1.9.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ec47932bf8fdf9cd96db076fe56306ab230048d9) +* Issue #1591: App crashes with the latest updates of Android SDK with plugin v-1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/514c21366ab37001ca323bec58261e023edaefd7) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3a218e4c68ebc1088461c2cfec966e57eaa24089) ## [v1.9.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.3) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.2...v1.9.3) -- 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) -- :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) -- :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) -- :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) -- :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) -- :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) -- :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) -- Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) -- :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) -- :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) -- :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) -- :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) -- :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) -- make google_app_id non translatable string (#1485) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d9890fa52ecdb41b344f06f1dd081d05ea784bea) -- :penguin::bug: Issue #1474: Android: force-start starts the app in Foreground instead of Background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bb5f53a8478353ed1f5f97756adff336fb9a710) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e02ff6703a53cb18e53060e2d7f6f64ebc8588b6) +* 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/42723d6609862aa950abce67b2a637736bdd9e99) +* :bookmark: Bumping plugin version to 1.9.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8f7b7dc003a2bc5bab7a316b0e2b0cf475c5a449) +* :wrench: Add valid SPDX license expression [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4274d0759acd7110ed2592ed1d2ce3bf692711d3) +* :memo: Issue #1587: v2.0.0-rc2: .on('notification') event not fired when background notification in Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7e90853a09a2c49f29e12eed03977b08b1295387) +* :arrow_up: Issue #1560: setApplicationIconBadgeNumber not working on Android but firing success function [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3188a3907f50dcf625b7663ecf74ea9a9209d437) +* :memo: Issue #1557: push.on('notification') not triggered - Ionic [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b91e9420fb68c4efc943cc5f8ecbd81274ffcbec) +* :memo: Issue #1407: Uncaught (in promise): Error: Push plugin not found! [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/adf3eabb8871980d2dead7ecb8185ad0da1d6b46) +* Corrected merges usage to prevent possible conflicts with other plugins (#1538) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/00c67cb2c85e97dfe4f7020f28ad4d954458599f) +* :penguin: android mixpanel pushnotification suport added (#1523) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/951cb6921a717d847c279ad6896c28772c70103f) +* :memo: Making string replacement clearer [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/abdb656315bd4457c7ae43aaa52e2357df85d139) +* :bug::penguin::memo: Issue #1433: Cordova Push V5 register () crashes App when initialized with topicList [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1d5723c81ad7a1e9d76fdce22161e8e8aa8da262) +* :bug::penguin: Issue #1421: Notification delay caused by icon bitmap timeout [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fb4b533f2b31daebc7ed57c16228458def3d2af9) +* :memo: Issue #1442: CocoaPods support vs requirement [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5912b1ea911fbe3b45a3a47ed005b7048a487ba6) +* make google_app_id non translatable string (#1485) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d9890fa52ecdb41b344f06f1dd081d05ea784bea) +* :penguin::bug: Issue #1474: Android: force-start starts the app in Foreground instead of Background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bb5f53a8478353ed1f5f97756adff336fb9a710) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e02ff6703a53cb18e53060e2d7f6f64ebc8588b6) ## [v2.0.0-rc2](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc2) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc1...v2.0.0-rc2) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) ## [v2.0.0-rc1](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc1) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v2.0.0-rc1) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) -- :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) -- :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) -- :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) -- :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) +* :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) +* :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) +* :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) +* :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) ## [v2.0.0-rc2](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc2) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v2.0.0-rc1...v2.0.0-rc2) -- 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) -- Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) -- :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) -- :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) -- :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) -- :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) -- :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) -- :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) -- :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) -- Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) +* 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/67041a994d70fd3a04149003607b88947e8cc994) +* Bumping plugin version to 2.0.0-rc2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7dea689ba17ebb901ee12da62801f051a99cc368) +* :apple::bug: Issue #1497: App crashes after refreshing when using FCM (v2) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea92e039b1d7640b70ca94e5f8748e7d2abbf13a) +* :pencil2: fixing error in CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/498bb038799bd687d8c492154bd3b34d72edd322) +* :memo: Using a newer version on the examples [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/74aba315b4cbb1e06c902e76891bce5582cbe690) +* :penguin::memo::bug: Issue #1470: Cannot install phonegap-plugin-push on master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e2f8a62c431af26c4d2fa487daa704067a088643) +* :bug::apple::wrench: Fixing a merge issue where aps-environment was accidentally removed [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cb9839740c4cbff5711224eed4b91b55aba77612) +* :bug::penguin::memo::arrow_up: #1460: Build Issue Android [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1bef8b37ef7bc017571924edc9e05fe09cd25e29) +* :bug::apple: Issue #1461: App crashes when initialising with topics (v2.0.0-rc1) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca5c281897c664b0bd98097ec2fc8c19c33b2c63) +* Fixing my merge error for PR #1378 Optional event emit instead of function call for action buttons [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/170d7dd43fe047c6caf84ec0f59da6c2c0cdeb6f) ## [v2.0.0-rc1](https://github.com/phonegap/phonegap-plugin-push/tree/v2.0.0-rc1) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v2.0.0-rc1) -- 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) -- :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) -- :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) -- :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) -- :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) -- Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) -- Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) -- :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) -- :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) -- Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) -- Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) -- Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) -- Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) -- Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) -- Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) -- fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) -- Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) -- Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) -- Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) -- Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) -- Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) -- Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) -- :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) -- :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) -- :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) -- :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) +* 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/46a44f92ca8f94c991a564a5a8ff1e424c4b7f7f) +* :bookmark: Bumping plugin version to 2.0.0-rc1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b952330124ab76d6a8ec88ebdb7eac0a614f8c38) +* :wrench: add tern to gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6ec1beb2ab13d6333122b76122ae4eb2e60dfb55) +* :hammer::wrench::arrow_up: Use Babel to transpile ES2015 code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fab033596c66ee1c9594d404fec8473a4dd41e77) +* :wrench: Add browser platform back for FCM branch [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/07f28d8dbc477faeb2a8dd8997fde0d088dd191a) +* Pin FCM to 9.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ba16ce363a198edd0d190e9603a5e1363289a893) +* Add empty google services plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a47af30d32c6921b484c1c129cd60582e1b3047b) +* :bug: Issue #1188: Strings.xml google_app_id conflict with google-services.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c9f4a5d6d6f18082ae9e5a533a700cf3662c2739) +* :memo: Update to using fcm-node [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/368f6cbb8095fd742bb39308e02fac7f89379f18) +* Issue #689: Remove sender id from PushNotification init iOS options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a3e0eefe09359612d6757d4598eba69e3d68a96b) +* Issue #689: Remove sender id from PushNotification init Android options [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d6d527628f8811ab6781591b3c186ce2732c9f37) +* Refactor GCMIntentService to FCMService [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/26b0369f148976e4227f73f5883658a726f825dd) +* Fix topic subscription and unsubscription on FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b4d850028b088c38bbd11c1899e28ea69b1c391e) +* Fix rebase errors [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/417be691c8131f006a7f1bd49bc171faa36ee872) +* Use CocoaPods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e34ddc03b01e676382a6d70e1e750a4e64ca6d62) +* fixed registration and removed unused code [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/732a2bd8efbfbea696db6951439e2472d6dc8e6f) +* Added hook and resource file to copy GoogleService-Info.plist [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8d44ccfdfe91831140e4e972d6879b6330a1c613) +* Changed code to work with FCM [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a18d50324ab96945db382539ce2ed7a287bed840) +* Added .framework files as custom frameworks [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/72875ac0aef0f9d00de6413e0dea4d7533c5eaef) +* Removed GCM files and added FCM files [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2bd37d1b31ca0b2c76c89a04a803b22186d1f8ad) +* Fixed empty token on android first run (#1008) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/fda1f905c4364a3ac100486dc639fdd5c3bae9ca) +* Added partial Android FCM support (#975) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b6acbfeacf851bab256962616ba2bd93150982ba) +* :memo: Issue #1235: SecurityError: Only secure origins are allowed (see: https://goo.gl/Y0ZkNV) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/5241a6f3868b4b15f79c6d5c0b5b5ea45e6301f9) +* :memo: Issue #1415: What is the id in push.finish? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2660b51da66e791ff342d027ea6afa4313281e28) +* :memo: Issue #1420: Update PLATFORM_SUPPORT.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/60ad23affaf2dc4c9c2bf48b6cbb702b0217aeb7) +* :memo: Adding more emoji for commit messages [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eb6b7b7d52770769719392b9b5226ee9a7caef75) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f38fd3d4d9f5f4f8de602b6aa07089b706884ca5) ## [v1.9.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.2) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.1...v1.9.2) -- 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef3de3281205b1fd56c57c71db31dc06a95da7a9) -- :bookmark: Bumping plugin version to 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24650bad4db49525505e9a2624ff1b5500e6b3ef) -- Optional event emit instead of function call for action buttons (#1378) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e92e951e759fe64d17d01e152575b6262973380a) -- Ensures foreground is true when inline is set to true and Android version is earlier than N (#1459) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd61ec34c0ca5c3fadf6797a8e192b9343324f68) +* 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef3de3281205b1fd56c57c71db31dc06a95da7a9) +* :bookmark: Bumping plugin version to 1.9.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/24650bad4db49525505e9a2624ff1b5500e6b3ef) +* Optional event emit instead of function call for action buttons (#1378) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e92e951e759fe64d17d01e152575b6262973380a) +* Ensures foreground is true when inline is set to true and Android version is earlier than N (#1459) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dd61ec34c0ca5c3fadf6797a8e192b9343324f68) ## [v1.9.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.1) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.9.0...v1.9.1) -- 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6178688d10fc9fd5770795e5caa3f402d3fec574) -- Bumping plugin version to 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4d0d2d0c0f19305189bbc7db11c56abfcb0e629a) -- :bug: Issue #1412: push.subscribe 'not a function' error [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1c0c0bcac7ae4a0fe8a7c54e2f00fdba90ff5207) -- :memo: Add emoji guide to CONTRIBUTING [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce845fde55429c36a885a4711e04a73904ab9c0) -- Issue #1342: Fail to add 1.9.0 to ios platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7481e286607dacf01327c9f6d5a7c21acc5eeba1) -- Issue #1402: force-start:1 brings a killed application to foreground, not background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/256f28fa08da4aab9691d628a3150022b67da02d) -- Issue #1400: Version 1.9.0 on PGB not working [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c45228a892c602b8616d165ccf142eac0ff2f7f2) -- Merge pull request #1398 from getlarky/android-badge-documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6884df95602a15c219846bbcdb01ce1285d660bb) -- Warn about android badge support in documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2842de212b11a76580865c6ee0d6a1b7b42d030e) -- Enahancement : Add custom permission for PushHandlerActivity (#1362) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e15fdc442030648daabc79a44ae72b2d14b7c1d2) -- Issue #1248: upgrade ShortcutBadger version to latest [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ab1cf0f0747b1f122f1f43c4af67db37dd0e443) -- Merge pull request #1361 from pataar/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29ec1e241036611c6a3a2c71d2a61860427be5d0) -- Fix minor typos in INSTALLATION.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/840b0e06cb2643635cfb882de9a35202799f3953) -- Add mimimum cordova versions to installation docs [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dcb528384dfd7f65410545b842e16ef89277ff7b) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e268a0dceff248b703ae75ff7923b7b3d673aeee) +* 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6178688d10fc9fd5770795e5caa3f402d3fec574) +* Bumping plugin version to 1.9.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4d0d2d0c0f19305189bbc7db11c56abfcb0e629a) +* :bug: Issue #1412: push.subscribe 'not a function' error [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1c0c0bcac7ae4a0fe8a7c54e2f00fdba90ff5207) +* :memo: Add emoji guide to CONTRIBUTING [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dce845fde55429c36a885a4711e04a73904ab9c0) +* Issue #1342: Fail to add 1.9.0 to ios platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/7481e286607dacf01327c9f6d5a7c21acc5eeba1) +* Issue #1402: force-start:1 brings a killed application to foreground, not background [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/256f28fa08da4aab9691d628a3150022b67da02d) +* Issue #1400: Version 1.9.0 on PGB not working [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/c45228a892c602b8616d165ccf142eac0ff2f7f2) +* Merge pull request #1398 from getlarky/android-badge-documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6884df95602a15c219846bbcdb01ce1285d660bb) +* Warn about android badge support in documentation [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2842de212b11a76580865c6ee0d6a1b7b42d030e) +* Enahancement : Add custom permission for PushHandlerActivity (#1362) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e15fdc442030648daabc79a44ae72b2d14b7c1d2) +* Issue #1248: upgrade ShortcutBadger version to latest [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4ab1cf0f0747b1f122f1f43c4af67db37dd0e443) +* Merge pull request #1361 from pataar/master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/29ec1e241036611c6a3a2c71d2a61860427be5d0) +* Fix minor typos in INSTALLATION.md [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/840b0e06cb2643635cfb882de9a35202799f3953) +* Add mimimum cordova versions to installation docs [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dcb528384dfd7f65410545b842e16ef89277ff7b) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e268a0dceff248b703ae75ff7923b7b3d673aeee) ## [v1.9.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.9.0) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.4...v1.9.0) -- 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e5b7f22299d900a37064a783da43905ad73c58bf) -- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dc6a11db4157e1070e48e073a8a78401f185d324) -- Prepare for 1.9.0 release [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0f889bfb5e612ef3ffbc1466deabfe9eb99b760b) -- Update gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d70bad64564444c01e59ff494b8ba09d190d3dbb) -- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600993e7739a0a84ef77b60c4a1457f8aea084b6) -- Issue #1154: Register fail iOS 10 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6013d49ecf0025be10fb6bb87152ee4025b5df4) -- Issue #1337: Build failed, invalid package.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8631666e4654fd6acafa6cf160cc59424e912ceb) -- Set default SENDER_ID [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/82ca365f4d6d91b18fc28c338a647a2622e60f6e) -- Issue #158: Notification Event Not Firing When Closed Through App Launcher [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca18653d6ff332db41f48824a2d65bd2699ed8bc) -- Merge branch 'master' of https://github.com/hanicker/phonegap-plugin-push into hanicker-master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/43402909d3b2d5c6ff518cc69e401dc918b585aa) -- Update plugin to use GCM Cocoapods reference in plugin.xml (#1183) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b639d83fe125d5b77720d130ccec53af3a5f3d91) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4779de2a5996703ba70656630f35d79415d1af8) -- feat(forced restart, notify javascript) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c03beff9a5a83927b7020ee04c3ed541de04edd) -- restart application after force close (#158 #333) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8b7c972dbf617f22218c178d74368b35521eecb9) +* 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e5b7f22299d900a37064a783da43905ad73c58bf) +* Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/dc6a11db4157e1070e48e073a8a78401f185d324) +* Prepare for 1.9.0 release [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0f889bfb5e612ef3ffbc1466deabfe9eb99b760b) +* Update gitignore [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d70bad64564444c01e59ff494b8ba09d190d3dbb) +* Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/600993e7739a0a84ef77b60c4a1457f8aea084b6) +* Issue #1154: Register fail iOS 10 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6013d49ecf0025be10fb6bb87152ee4025b5df4) +* Issue #1337: Build failed, invalid package.json [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8631666e4654fd6acafa6cf160cc59424e912ceb) +* Set default SENDER_ID [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/82ca365f4d6d91b18fc28c338a647a2622e60f6e) +* Issue #158: Notification Event Not Firing When Closed Through App Launcher [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ca18653d6ff332db41f48824a2d65bd2699ed8bc) +* Merge branch 'master' of https://github.com/hanicker/phonegap-plugin-push into hanicker-master [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/43402909d3b2d5c6ff518cc69e401dc918b585aa) +* Update plugin to use GCM Cocoapods reference in plugin.xml (#1183) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b639d83fe125d5b77720d130ccec53af3a5f3d91) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4779de2a5996703ba70656630f35d79415d1af8) +* feat(forced restart, notify javascript) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8c03beff9a5a83927b7020ee04c3ed541de04edd) +* restart application after force close (#158 #333) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8b7c972dbf617f22218c178d74368b35521eecb9) ## [v1.8.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.4) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.3...v1.8.4) -- 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4b18505a2c30e17564c0e80060f0524968aa0d40) -- Bumping plugin version to 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/046c727f58a6fa675a5f49c10334095cd4282884) -- Issue #1251: [Android] deviceId persists between uninstalls, but is invalid after an uninstall [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8a7bbe5cba186d9685f31adc07e25bd908409498) -- Merge pull request #1323 from hung-doan/issue-1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/021f0abd9a49fb83d19faca3ffb7d142759bb01a) -- Update GCM to 9.8+ issue #1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/450e0e01b9bcd747a49081c4a0d6ce998c37478a) -- Support Twilio Notify (#1306) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a9bb3bf0a2ca57f68eafc39070fc125746bbbb23) -- Cache multiple Android action button pushes if app is not running (#1272) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d0547bab04c292024dc6ed41939590fba01115ff) -- Add sub/unsub tests [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3bf9ff5f04e10622d7d9ff47a9bd57a829ee9eef) -- Add features: push.subscribe, push.unsubscribe (issue #1040) (#1227) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bb0d3ed087e13e24af57e682776930cea2f577a8) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cf7ce8e716fe60de121634abc164b509100a9d15) +* 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4b18505a2c30e17564c0e80060f0524968aa0d40) +* Bumping plugin version to 1.8.4 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/046c727f58a6fa675a5f49c10334095cd4282884) +* Issue #1251: [Android] deviceId persists between uninstalls, but is invalid after an uninstall [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8a7bbe5cba186d9685f31adc07e25bd908409498) +* Merge pull request #1323 from hung-doan/issue-1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/021f0abd9a49fb83d19faca3ffb7d142759bb01a) +* Update GCM to 9.8+ issue #1319 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/450e0e01b9bcd747a49081c4a0d6ce998c37478a) +* Support Twilio Notify (#1306) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a9bb3bf0a2ca57f68eafc39070fc125746bbbb23) +* Cache multiple Android action button pushes if app is not running (#1272) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d0547bab04c292024dc6ed41939590fba01115ff) +* Add sub/unsub tests [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3bf9ff5f04e10622d7d9ff47a9bd57a829ee9eef) +* Add features: push.subscribe, push.unsubscribe (issue #1040) (#1227) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/bb0d3ed087e13e24af57e682776930cea2f577a8) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cf7ce8e716fe60de121634abc164b509100a9d15) ## [v1.8.3](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.3) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.2...v1.8.3) -- 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0cfba9f85b7d7dfa3c244c9e78a03872ff938f9) -- Bumping plugin version to 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cc7d5abe55957cebfdd3b39ba670f8093bdac564) -- Update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0d8548d3166b7b4d34b32944b800c96e4aadf70a) -- Issue#1282 Show app name if title is empty (#1285) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3d7a3a39fb931aafa86be6b1568a682133c36de7) -- Note about background app refresh (#1267) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4f13533deb0c1b927dab9d9cddb13c53fdefd9b0) -- Issue #1213: XDK instructions link for www template is incorrect (#1283) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d2ede2bab4cd6462f7dffc4e2bc733d585107e89) -- Merge pull request #1277 from dannywillems/patch-1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea5ae88f3fcfa8fc605cf2c974b52d793bd2c4c9) -- Unused variable app. Caused warnings. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/09dedb43481d207d0b17de4eb26c5a1904d08f65) -- Issue #1254: [Question] Is it possible to get more than 3 action buttons on Android notifications? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8ab6665d878c8dec3ff9914c11a9329c8a415e7) -- Use unique pending intent request code to enable multiple... (#1225) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/475883833556eb001e2e0adb986bd96b78bdcb2f) -- Add `cordovaDependencies` section to package.json (#1232) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b343e78e9bfca921cef78eb504755477ecaeff9) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/14afb94126acb51a6f10a2094f7f391f2f17dee5) +* 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a0cfba9f85b7d7dfa3c244c9e78a03872ff938f9) +* Bumping plugin version to 1.8.3 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/cc7d5abe55957cebfdd3b39ba670f8093bdac564) +* Update pluginpub version [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0d8548d3166b7b4d34b32944b800c96e4aadf70a) +* Issue#1282 Show app name if title is empty (#1285) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/3d7a3a39fb931aafa86be6b1568a682133c36de7) +* Note about background app refresh (#1267) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4f13533deb0c1b927dab9d9cddb13c53fdefd9b0) +* Issue #1213: XDK instructions link for www template is incorrect (#1283) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d2ede2bab4cd6462f7dffc4e2bc733d585107e89) +* Merge pull request #1277 from dannywillems/patch-1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ea5ae88f3fcfa8fc605cf2c974b52d793bd2c4c9) +* Unused variable app. Caused warnings. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/09dedb43481d207d0b17de4eb26c5a1904d08f65) +* Issue #1254: [Question] Is it possible to get more than 3 action buttons on Android notifications? [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d8ab6665d878c8dec3ff9914c11a9329c8a415e7) +* Use unique pending intent request code to enable multiple... (#1225) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/475883833556eb001e2e0adb986bd96b78bdcb2f) +* Add `cordovaDependencies` section to package.json (#1232) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/6b343e78e9bfca921cef78eb504755477ecaeff9) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/14afb94126acb51a6f10a2094f7f391f2f17dee5) ## [v1.8.2](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.2) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.1...v1.8.2) -- 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b47d519abff667400c4863fe90a27ae88e3c0671) -- Bumping plugin version to 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/738735ddcd9b60014beb4207c3ccdcd30ba7a803) -- Localization from resources (#1196) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2de9fc2827a18941ae6040e90ea0da5dc97652d8) -- Issue #1199: iOS 10 is not firing the 'notification' event after clicking on a notification when the app is in hibernate [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e711b09b15a8e85156e9158026509522859c7900) -- Use unique pending intent request code to enable multiple simultaneous notifications with action buttons (#1216) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1fe640637fd67ec0ce2cf50ee1cab793ed01cfb7) -- (doc) Fixing `ios.catetories` type in api reference. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0a93fab9cec5ac2a2b813090958054e8e7b15f9a) -- Issue #1155: [doc] Explain usage of the top level "priority" in GCM notifications [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ddaf48e089dc3cb46f9bd9f5e4678a2118b14a48) -- Issue #1121: Notification is not shown on ios device [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/432761202c43a1f2a4ba9c643df78b81b87d66fa) -- Issue #1160: data.additionalData.[Object] as 'undefined' in iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/946052a895268155f56a7a3a1006d019599b46f9) -- Few edits (#1179) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f90b4bbf0e78adaa029737cf70b146ec97d09015) -- Adding workshop tutorial link to the README (#1169) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/59800a930557bd864e527404e1035c2d8ac149c9) -- added Azure server-side example (#1124) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bd4d0e612f6f1c62e33d147564b7e495436f15e) -- Update appxmanifests with ToastCapable=true after plugin install (#1158) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eeefc036a8600bea80135b6b14241509853444ab) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/30d3d5dc733c80bc1687e5eff28d0614a0f38e51) +* 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b47d519abff667400c4863fe90a27ae88e3c0671) +* Bumping plugin version to 1.8.2 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/738735ddcd9b60014beb4207c3ccdcd30ba7a803) +* Localization from resources (#1196) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/2de9fc2827a18941ae6040e90ea0da5dc97652d8) +* Issue #1199: iOS 10 is not firing the 'notification' event after clicking on a notification when the app is in hibernate [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e711b09b15a8e85156e9158026509522859c7900) +* Use unique pending intent request code to enable multiple simultaneous notifications with action buttons (#1216) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1fe640637fd67ec0ce2cf50ee1cab793ed01cfb7) +* (doc) Fixing `ios.catetories` type in api reference. [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0a93fab9cec5ac2a2b813090958054e8e7b15f9a) +* Issue #1155: [doc] Explain usage of the top level "priority" in GCM notifications [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ddaf48e089dc3cb46f9bd9f5e4678a2118b14a48) +* Issue #1121: Notification is not shown on ios device [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/432761202c43a1f2a4ba9c643df78b81b87d66fa) +* Issue #1160: data.additionalData.[Object] as 'undefined' in iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/946052a895268155f56a7a3a1006d019599b46f9) +* Few edits (#1179) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f90b4bbf0e78adaa029737cf70b146ec97d09015) +* Adding workshop tutorial link to the README (#1169) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/59800a930557bd864e527404e1035c2d8ac149c9) +* added Azure server-side example (#1124) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/0bd4d0e612f6f1c62e33d147564b7e495436f15e) +* Update appxmanifests with ToastCapable=true after plugin install (#1158) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/eeefc036a8600bea80135b6b14241509853444ab) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/30d3d5dc733c80bc1687e5eff28d0614a0f38e51) ## [v1.8.1](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.1) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.8.0...v1.8.1) -- 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95c27d29ef37bfd750972561022db53de256840d) -- Bumping plugin version to 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4ba55ff310d4d931503de2547738cc169b6f968) -- [Windows] Added a check on activation context existence (#1129) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/151c8cd97aa71742798e969dd9e6c2208b8c1f15) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cd4ee00e2eb081d0d29d001e580009fba5c341a) +* 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/95c27d29ef37bfd750972561022db53de256840d) +* Bumping plugin version to 1.8.1 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e4ba55ff310d4d931503de2547738cc169b6f968) +* [Windows] Added a check on activation context existence (#1129) [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/151c8cd97aa71742798e969dd9e6c2208b8c1f15) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4cd4ee00e2eb081d0d29d001e580009fba5c341a) ## [v1.8.0](https://github.com/phonegap/phonegap-plugin-push/tree/v1.8.0) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/v1.7.4...v1.8.0) -- 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d5a8480e6e230c959d8079554a6366f3605cb97e) -- Bumping plugin version to 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8c784536e40ce6dddf14edeff7ad2a9ee944156) -- Check that serviceWorker exists before unregistering [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef004002d60d8028ed6aad2cef79d4d8ac6aed49) -- Populate additionalData on browser platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/63a29cdbbc0cd0374552d51e0e2d2217f5361f79) -- Issue #683: Support Android N inline reply actions [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e835ca31ac02a3455ece8c96938260935e2e7100) -- Issue #1109: Installation.MD has a mistake [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89834b78a63ad6c927295eb5699204a0ccb49a73) -- Use push server DELETE route to remove browser keys [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4615ea694bd5858bfdb8553c9a9390e1e30c2c36) -- [chore] fix mis-spelling [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/efdef52deec4f7e8b6b4ee87460bd87cc0479c74) -- Browser: always call success on unimplemented methods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1b8bf267674508361c68fb03b12f97608e87456b) -- Update push url [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e1d8774f760d7a72a547d68e1b2ac367572e2b6d) -- Merge branch 'browser' [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a2ad8da9a25a02a1b674e6adf0a37e18cde185ab) -- Add browser platform support [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e8e0fe47001e461cf7fb7274d4c2b3dc687cd90e) -- Issue #1080: clearAllNotifications not working on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bea2a7469ab2bd677e12d440b457e1d5383b1f0) -- [whoops] revert accidental commit of a pluginpub test [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/da301e8a43a0a659947294c9d94f7fd09f5ac4b2) -- [doc] remove deprecation notice on hasPermission [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d4b79a81c5ad85a4b566e5a23a19b10fa78dcf17) -- Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8512a6cb7be3c0bb2b5db813c7aaff4c49fc52a2) -- Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b015543b8a06526b7b70357407e635c180c473ee) -- Update CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6f87a50d9f9cb3bd7c9ba599b3d3afbc0fd7aaf) +* 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d5a8480e6e230c959d8079554a6366f3605cb97e) +* Bumping plugin version to 1.8.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/f8c784536e40ce6dddf14edeff7ad2a9ee944156) +* Check that serviceWorker exists before unregistering [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/ef004002d60d8028ed6aad2cef79d4d8ac6aed49) +* Populate additionalData on browser platform [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/63a29cdbbc0cd0374552d51e0e2d2217f5361f79) +* Issue #683: Support Android N inline reply actions [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e835ca31ac02a3455ece8c96938260935e2e7100) +* Issue #1109: Installation.MD has a mistake [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/89834b78a63ad6c927295eb5699204a0ccb49a73) +* Use push server DELETE route to remove browser keys [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4615ea694bd5858bfdb8553c9a9390e1e30c2c36) +* [chore] fix mis-spelling [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/efdef52deec4f7e8b6b4ee87460bd87cc0479c74) +* Browser: always call success on unimplemented methods [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/1b8bf267674508361c68fb03b12f97608e87456b) +* Update push url [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e1d8774f760d7a72a547d68e1b2ac367572e2b6d) +* Merge branch 'browser' [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/a2ad8da9a25a02a1b674e6adf0a37e18cde185ab) +* Add browser platform support [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e8e0fe47001e461cf7fb7274d4c2b3dc687cd90e) +* Issue #1080: clearAllNotifications not working on iOS [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/4bea2a7469ab2bd677e12d440b457e1d5383b1f0) +* [whoops] revert accidental commit of a pluginpub test [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/da301e8a43a0a659947294c9d94f7fd09f5ac4b2) +* [doc] remove deprecation notice on hasPermission [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/d4b79a81c5ad85a4b566e5a23a19b10fa78dcf17) +* Updating CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/8512a6cb7be3c0bb2b5db813c7aaff4c49fc52a2) +* Bumping plugin version to 1.9.0 [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/b015543b8a06526b7b70357407e635c180c473ee) +* Update CHANGELOG [view commit](http://github.com/phonegap/phonegap-plugin-push/commit/e6f87a50d9f9cb3bd7c9ba599b3d3afbc0fd7aaf) ## [1.7.4](https://github.com/phonegap/phonegap-plugin-push/tree/v1.7.4) (2016-07-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.3...v1.7.4) **Closed issues:** -- FYI: Resumed iOS 10 Notifications results in an error (fix problem on iOS) [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002) - +* FYI: Resumed iOS 10 Notifications results in an error (fix problem on iOS) [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002) ## [1.7.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.3) (2016-07-06) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.2...1.7.3) **Closed issues:** -- Implemented clearBadge for Android [\#1030](https://github.com/phonegap/phonegap-plugin-push/issues/1030) -- update badge number even if the app is totally closed [\#1027](https://github.com/phonegap/phonegap-plugin-push/issues/1027) -- Documentation issue of Android pictures push [\#1028](https://github.com/phonegap/phonegap-plugin-push/issues/1028) -- [iOS] unregister for a topic: parameter is not consistent between ios/android [\#1029](https://github.com/phonegap/phonegap-plugin-push/issues/1029) -- [doc] Error installing in IOS, version requirement: >=4.1.0 [\#1047](https://github.com/phonegap/phonegap-plugin-push/issues/1047) +* Implemented clearBadge for Android [\#1030](https://github.com/phonegap/phonegap-plugin-push/issues/1030) +* update badge number even if the app is totally closed [\#1027](https://github.com/phonegap/phonegap-plugin-push/issues/1027) +* Documentation issue of Android pictures push [\#1028](https://github.com/phonegap/phonegap-plugin-push/issues/1028) +* [iOS] unregister for a topic: parameter is not consistent between ios/android [\#1029](https://github.com/phonegap/phonegap-plugin-push/issues/1029) +* [doc] Error installing in IOS, version requirement: >=4.1.0 [\#1047](https://github.com/phonegap/phonegap-plugin-push/issues/1047) ## [1.7.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.2) (2016-06-24) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.1...1.7.2) **Closed issues:** -- FYI: Resumed iOS 10 Notifications results in an error [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002) +* FYI: Resumed iOS 10 Notifications results in an error [\#1002](https://github.com/phonegap/phonegap-plugin-push/issues/1002) ## [1.7.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.1) (2016-06-17) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.7.0...1.7.1) **Closed issues:** -- Update docs for Android badges [\#982](https://github.com/phonegap/phonegap-plugin-push/issues/982) -- visibility not working [\#987](https://github.com/phonegap/phonegap-plugin-push/issues/982) -- Revert pinning of support-v13 [\#983](https://github.com/phonegap/phonegap-plugin-push/issues/983) +* Update docs for Android badges [\#982](https://github.com/phonegap/phonegap-plugin-push/issues/982) +* visibility not working [\#987](https://github.com/phonegap/phonegap-plugin-push/issues/982) +* Revert pinning of support-v13 [\#983](https://github.com/phonegap/phonegap-plugin-push/issues/983) ## [1.7.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.7.0) (2016-06-06) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.4...1.7.0) **Closed issues:** -- disable notification's sounds on a per notification basis [\#885](https://github.com/phonegap/phonegap-plugin-push/issues/885) -- Android GCM Action Buttons lack of documentation [\#884](https://github.com/phonegap/phonegap-plugin-push/issues/884) -- Android double on('notification') fired [\#828](https://github.com/phonegap/phonegap-plugin-push/issues/828) -- Device should register, Push Notification should receive on IOS (IntelXDK) [\#926](https://github.com/phonegap/phonegap-plugin-push/issues/926) -- Use cordova-ios 4.1.0 in Milestone 1.7.0 [\#751](https://github.com/phonegap/phonegap-plugin-push/issues/751) -- Badge on android [\#190](https://github.com/phonegap/phonegap-plugin-push/issues/190) -- JS error in Success callbackId: PushNotifiation###.. whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824) -- coldstart flag always set to true if the app has been opened through an alert, on ios 9.3.1, plugin version 1.6.2 cordova 6.1.0 cordova ios 4.1.1 [\#795](https://github.com/phonegap/phonegap-plugin-push/issues/795) -- Is there any way to clear notifications out from the app? [\#346](https://github.com/phonegap/phonegap-plugin-push/issues/346) -- Show contents of notification when phone is locked [\#750](https://github.com/phonegap/phonegap-plugin-push/issues/750) -- PushPlugin.m init() should send pending notification when js side is ready [\#658](https://github.com/phonegap/phonegap-plugin-push/issues/658) +* disable notification's sounds on a per notification basis [\#885](https://github.com/phonegap/phonegap-plugin-push/issues/885) +* Android GCM Action Buttons lack of documentation [\#884](https://github.com/phonegap/phonegap-plugin-push/issues/884) +* Android double on('notification') fired [\#828](https://github.com/phonegap/phonegap-plugin-push/issues/828) +* Device should register, Push Notification should receive on IOS (IntelXDK) [\#926](https://github.com/phonegap/phonegap-plugin-push/issues/926) +* Use cordova-ios 4.1.0 in Milestone 1.7.0 [\#751](https://github.com/phonegap/phonegap-plugin-push/issues/751) +* Badge on android [\#190](https://github.com/phonegap/phonegap-plugin-push/issues/190) +* JS error in Success callbackId: PushNotifiation###.. whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824) +* coldstart flag always set to true if the app has been opened through an alert, on ios 9.3.1, plugin version 1.6.2 cordova 6.1.0 cordova ios 4.1.1 [\#795](https://github.com/phonegap/phonegap-plugin-push/issues/795) +* Is there any way to clear notifications out from the app? [\#346](https://github.com/phonegap/phonegap-plugin-push/issues/346) +* Show contents of notification when phone is locked [\#750](https://github.com/phonegap/phonegap-plugin-push/issues/750) +* PushPlugin.m init() should send pending notification when js side is ready [\#658](https://github.com/phonegap/phonegap-plugin-push/issues/658) ## [1.6.4](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.4) (2016-05-24) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.3...1.6.4) **Closed issues:** -- hasPermission() for windows [\#874](https://github.com/phonegap/phonegap-plugin-push/issues/874) -- Latest Play store service breaks phonegap-plugin-push [\#909](https://github.com/phonegap/phonegap-plugin-push/issues/909) +* hasPermission() for windows [\#874](https://github.com/phonegap/phonegap-plugin-push/issues/874) +* Latest Play store service breaks phonegap-plugin-push [\#909](https://github.com/phonegap/phonegap-plugin-push/issues/909) ## [1.6.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.3) (2016-04-27) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.2...1.6.3) **Fixed bugs:** -- \[Android\] Can't install multiple apps using this plugin \(v1.6.x\) [\#768](https://github.com/phonegap/phonegap-plugin-push/issues/768) -- JS error in "Success callbackId: PushNotifiation\#\#\#.." whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824) +* \[Android\] Can't install multiple apps using this plugin \(v1.6.x\) [\#768](https://github.com/phonegap/phonegap-plugin-push/issues/768) +* JS error in "Success callbackId: PushNotifiation\#\#\#.." whenever a notification is sent to the device [\#824](https://github.com/phonegap/phonegap-plugin-push/issues/824) **Closed issues:** -- Move example directory to a phonegap template [\#832](https://github.com/phonegap/phonegap-plugin-push/issues/832) -- va [\#830](https://github.com/phonegap/phonegap-plugin-push/issues/830) -- does not create the notification bar [\#821](https://github.com/phonegap/phonegap-plugin-push/issues/821) -- Did not show notification in status bar for Xiomi Redmi Note 3 [\#790](https://github.com/phonegap/phonegap-plugin-push/issues/790) -- PushNotification.hasPermission not working as expected [\#789](https://github.com/phonegap/phonegap-plugin-push/issues/789) - +* Move example directory to a phonegap template [\#832](https://github.com/phonegap/phonegap-plugin-push/issues/832) +* va [\#830](https://github.com/phonegap/phonegap-plugin-push/issues/830) +* does not create the notification bar [\#821](https://github.com/phonegap/phonegap-plugin-push/issues/821) +* Did not show notification in status bar for Xiomi Redmi Note 3 [\#790](https://github.com/phonegap/phonegap-plugin-push/issues/790) +* PushNotification.hasPermission not working as expected [\#789](https://github.com/phonegap/phonegap-plugin-push/issues/789) ## [1.6.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.2) (2016-04-06) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.1...1.6.2) **Fixed bugs:** -- Unexpected / Broken Android Behavior [\#767](https://github.com/phonegap/phonegap-plugin-push/issues/767) +* Unexpected / Broken Android Behavior [\#767](https://github.com/phonegap/phonegap-plugin-push/issues/767) **Closed issues:** -- Android: JSON Exception No Value Found for Sender [\#781](https://github.com/phonegap/phonegap-plugin-push/issues/781) -- Should I call init\(\) every time the app is launched?? [\#777](https://github.com/phonegap/phonegap-plugin-push/issues/777) -- Request: extend action buttons to wearables [\#776](https://github.com/phonegap/phonegap-plugin-push/issues/776) -- After upgrade: 601 duplicate symbols for architecture i386 [\#769](https://github.com/phonegap/phonegap-plugin-push/issues/769) -- push plugin [\#766](https://github.com/phonegap/phonegap-plugin-push/issues/766) -- Documentation mentions old name for dependency [\#763](https://github.com/phonegap/phonegap-plugin-push/issues/763) -- push.on\('notification'\) callback is not called on coldstart on iOS [\#758](https://github.com/phonegap/phonegap-plugin-push/issues/758) -- plugin doesn't work in background or when app not running on kitkat 4.4.2 [\#754](https://github.com/phonegap/phonegap-plugin-push/issues/754) -- App Icon not displayed in tray using build.phonegap and cli-6.0.0 \[ios\] [\#753](https://github.com/phonegap/phonegap-plugin-push/issues/753) -- push.on\('registration'\) event not called on IOS. [\#752](https://github.com/phonegap/phonegap-plugin-push/issues/752) -- catch 22 when trying to use this plug [\#741](https://github.com/phonegap/phonegap-plugin-push/issues/741) -- push.setApplicationIconBadgeNumber not working in background [\#736](https://github.com/phonegap/phonegap-plugin-push/issues/736) -- Strange issue while debugging in Safari Inspector [\#733](https://github.com/phonegap/phonegap-plugin-push/issues/733) +* Android: JSON Exception No Value Found for Sender [\#781](https://github.com/phonegap/phonegap-plugin-push/issues/781) +* Should I call init\(\) every time the app is launched?? [\#777](https://github.com/phonegap/phonegap-plugin-push/issues/777) +* Request: extend action buttons to wearables [\#776](https://github.com/phonegap/phonegap-plugin-push/issues/776) +* After upgrade: 601 duplicate symbols for architecture i386 [\#769](https://github.com/phonegap/phonegap-plugin-push/issues/769) +* push plugin [\#766](https://github.com/phonegap/phonegap-plugin-push/issues/766) +* Documentation mentions old name for dependency [\#763](https://github.com/phonegap/phonegap-plugin-push/issues/763) +* push.on\('notification'\) callback is not called on coldstart on iOS [\#758](https://github.com/phonegap/phonegap-plugin-push/issues/758) +* plugin doesn't work in background or when app not running on kitkat 4.4.2 [\#754](https://github.com/phonegap/phonegap-plugin-push/issues/754) +* App Icon not displayed in tray using build.phonegap and cli-6.0.0 \[ios\] [\#753](https://github.com/phonegap/phonegap-plugin-push/issues/753) +* push.on\('registration'\) event not called on IOS. [\#752](https://github.com/phonegap/phonegap-plugin-push/issues/752) +* catch 22 when trying to use this plug [\#741](https://github.com/phonegap/phonegap-plugin-push/issues/741) +* push.setApplicationIconBadgeNumber not working in background [\#736](https://github.com/phonegap/phonegap-plugin-push/issues/736) +* Strange issue while debugging in Safari Inspector [\#733](https://github.com/phonegap/phonegap-plugin-push/issues/733) ## [1.6.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.1) (2016-03-23) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.6.0...1.6.1) **Fixed bugs:** -- App crashes on notification when in background [\#715](https://github.com/phonegap/phonegap-plugin-push/issues/715) +* App crashes on notification when in background [\#715](https://github.com/phonegap/phonegap-plugin-push/issues/715) **Closed issues:** -- Memory Leak when call `push.on\('registration'`. so `Push Plugin register called` not called [\#743](https://github.com/phonegap/phonegap-plugin-push/issues/743) -- l [\#739](https://github.com/phonegap/phonegap-plugin-push/issues/739) -- \[testing issue template\] ignore me [\#717](https://github.com/phonegap/phonegap-plugin-push/issues/717) -- Incorrect init option "vibration" in a few ios samples on PAYLOAD.md [\#713](https://github.com/phonegap/phonegap-plugin-push/issues/713) -- android M wear case [\#691](https://github.com/phonegap/phonegap-plugin-push/issues/691) -- Incorrect document detailing \(PHONEGAP\_BUILD.md\) [\#686](https://github.com/phonegap/phonegap-plugin-push/issues/686) -- Windows Phone 8.1, not fired plugin methods [\#526](https://github.com/phonegap/phonegap-plugin-push/issues/526) +* Memory Leak when call `push.on\('registration'`. so `Push Plugin register called` not called [\#743](https://github.com/phonegap/phonegap-plugin-push/issues/743) +* l [\#739](https://github.com/phonegap/phonegap-plugin-push/issues/739) +* \[testing issue template\] ignore me [\#717](https://github.com/phonegap/phonegap-plugin-push/issues/717) +* Incorrect init option "vibration" in a few ios samples on PAYLOAD.md [\#713](https://github.com/phonegap/phonegap-plugin-push/issues/713) +* android M wear case [\#691](https://github.com/phonegap/phonegap-plugin-push/issues/691) +* Incorrect document detailing \(PHONEGAP_BUILD.md\) [\#686](https://github.com/phonegap/phonegap-plugin-push/issues/686) +* Windows Phone 8.1, not fired plugin methods [\#526](https://github.com/phonegap/phonegap-plugin-push/issues/526) ## [1.6.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.6.0) (2016-03-09) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.3...1.6.0) **Implemented enhancements:** -- Background processing with coldstart on iOS [\#583](https://github.com/phonegap/phonegap-plugin-push/issues/583) +* Background processing with coldstart on iOS [\#583](https://github.com/phonegap/phonegap-plugin-push/issues/583) **Fixed bugs:** -- Android: notification does not dismiss after selection button \(1.6.x dev\) [\#610](https://github.com/phonegap/phonegap-plugin-push/issues/610) +* Android: notification does not dismiss after selection button \(1.6.x dev\) [\#610](https://github.com/phonegap/phonegap-plugin-push/issues/610) **Closed issues:** -- XDK doesn't work with v1.5.x. Are you going to have a non-gradle version for v1.5.x [\#675](https://github.com/phonegap/phonegap-plugin-push/issues/675) -- emoji support [\#668](https://github.com/phonegap/phonegap-plugin-push/issues/668) -- iOS sound not found \[edited with new debug info\] [\#667](https://github.com/phonegap/phonegap-plugin-push/issues/667) -- Push notification register APN to GCM Problem [\#665](https://github.com/phonegap/phonegap-plugin-push/issues/665) -- IOS Never fire the registration event [\#659](https://github.com/phonegap/phonegap-plugin-push/issues/659) -- Badge count inaccurate [\#651](https://github.com/phonegap/phonegap-plugin-push/issues/651) -- Android Icon options in phonegap-plugin-push@1.2.3 [\#648](https://github.com/phonegap/phonegap-plugin-push/issues/648) -- Getting same registration id when re-register [\#641](https://github.com/phonegap/phonegap-plugin-push/issues/641) -- Callback not called unless you register to GCM everytime you open the app [\#626](https://github.com/phonegap/phonegap-plugin-push/issues/626) -- How to make GCM show alert automatically ios [\#602](https://github.com/phonegap/phonegap-plugin-push/issues/602) -- Shoddy image for notification icon,status bar icon? [\#587](https://github.com/phonegap/phonegap-plugin-push/issues/587) -- ERROR: Plugin 'PushNotification' not found [\#568](https://github.com/phonegap/phonegap-plugin-push/issues/568) -- ar [\#533](https://github.com/phonegap/phonegap-plugin-push/issues/533) -- No sound and vibration for GCM when built with Cordova but Ok with PhoneBuild [\#520](https://github.com/phonegap/phonegap-plugin-push/issues/520) +* XDK doesn't work with v1.5.x. Are you going to have a non-gradle version for v1.5.x [\#675](https://github.com/phonegap/phonegap-plugin-push/issues/675) +* emoji support [\#668](https://github.com/phonegap/phonegap-plugin-push/issues/668) +* iOS sound not found \[edited with new debug info\] [\#667](https://github.com/phonegap/phonegap-plugin-push/issues/667) +* Push notification register APN to GCM Problem [\#665](https://github.com/phonegap/phonegap-plugin-push/issues/665) +* IOS Never fire the registration event [\#659](https://github.com/phonegap/phonegap-plugin-push/issues/659) +* Badge count inaccurate [\#651](https://github.com/phonegap/phonegap-plugin-push/issues/651) +* Android Icon options in phonegap-plugin-push@1.2.3 [\#648](https://github.com/phonegap/phonegap-plugin-push/issues/648) +* Getting same registration id when re-register [\#641](https://github.com/phonegap/phonegap-plugin-push/issues/641) +* Callback not called unless you register to GCM everytime you open the app [\#626](https://github.com/phonegap/phonegap-plugin-push/issues/626) +* How to make GCM show alert automatically ios [\#602](https://github.com/phonegap/phonegap-plugin-push/issues/602) +* Shoddy image for notification icon,status bar icon? [\#587](https://github.com/phonegap/phonegap-plugin-push/issues/587) +* ERROR: Plugin 'PushNotification' not found [\#568](https://github.com/phonegap/phonegap-plugin-push/issues/568) +* ar [\#533](https://github.com/phonegap/phonegap-plugin-push/issues/533) +* No sound and vibration for GCM when built with Cordova but Ok with PhoneBuild [\#520](https://github.com/phonegap/phonegap-plugin-push/issues/520) ## [1.5.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.3) (2016-01-14) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.2...1.5.3) **Fixed bugs:** -- Android 4.1 and AppOpsManager [\#495](https://github.com/phonegap/phonegap-plugin-push/issues/495) +* Android 4.1 and AppOpsManager [\#495](https://github.com/phonegap/phonegap-plugin-push/issues/495) **Closed issues:** -- iOS Building Error [\#507](https://github.com/phonegap/phonegap-plugin-push/issues/507) -- \[FIX\] notification not fired when app is in background/killed ? Check this out [\#502](https://github.com/phonegap/phonegap-plugin-push/issues/502) -- Which Sender ID to use [\#485](https://github.com/phonegap/phonegap-plugin-push/issues/485) -- coldstart not documented [\#483](https://github.com/phonegap/phonegap-plugin-push/issues/483) -- Android: iconColor doesn't work in hexadecimal \(\#RRGGBB\) format [\#480](https://github.com/phonegap/phonegap-plugin-push/issues/480) -- Cannot find symbol variable INSTANCE\_ID\_SCOPE [\#477](https://github.com/phonegap/phonegap-plugin-push/issues/477) -- notification event not fired on cold start on Android 5 [\#469](https://github.com/phonegap/phonegap-plugin-push/issues/469) -- Push notifications not working with iPhone6 + ios 9.2? [\#462](https://github.com/phonegap/phonegap-plugin-push/issues/462) -- UTF8 support on android: the notification text \(on android only\) is shown with "???" [\#461](https://github.com/phonegap/phonegap-plugin-push/issues/461) -- example application? [\#460](https://github.com/phonegap/phonegap-plugin-push/issues/460) -- build fail in ios - version 1.5.2 [\#458](https://github.com/phonegap/phonegap-plugin-push/issues/458) -- Getting NotRegistered error when sending GCM push notification, but the device never unregistered [\#419](https://github.com/phonegap/phonegap-plugin-push/issues/419) -- Changelog neglected [\#412](https://github.com/phonegap/phonegap-plugin-push/issues/412) +* iOS Building Error [\#507](https://github.com/phonegap/phonegap-plugin-push/issues/507) +* \[FIX\] notification not fired when app is in background/killed ? Check this out [\#502](https://github.com/phonegap/phonegap-plugin-push/issues/502) +* Which Sender ID to use [\#485](https://github.com/phonegap/phonegap-plugin-push/issues/485) +* coldstart not documented [\#483](https://github.com/phonegap/phonegap-plugin-push/issues/483) +* Android: iconColor doesn't work in hexadecimal \(\#RRGGBB\) format [\#480](https://github.com/phonegap/phonegap-plugin-push/issues/480) +* Cannot find symbol variable INSTANCE_ID_SCOPE [\#477](https://github.com/phonegap/phonegap-plugin-push/issues/477) +* notification event not fired on cold start on Android 5 [\#469](https://github.com/phonegap/phonegap-plugin-push/issues/469) +* Push notifications not working with iPhone6 + ios 9.2? [\#462](https://github.com/phonegap/phonegap-plugin-push/issues/462) +* UTF8 support on android: the notification text \(on android only\) is shown with "???" [\#461](https://github.com/phonegap/phonegap-plugin-push/issues/461) +* example application? [\#460](https://github.com/phonegap/phonegap-plugin-push/issues/460) +* build fail in ios - version 1.5.2 [\#458](https://github.com/phonegap/phonegap-plugin-push/issues/458) +* Getting NotRegistered error when sending GCM push notification, but the device never unregistered [\#419](https://github.com/phonegap/phonegap-plugin-push/issues/419) +* Changelog neglected [\#412](https://github.com/phonegap/phonegap-plugin-push/issues/412) ## [1.5.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.1) (2015-12-21) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.1...1.5.2) **Fixed bugs:** -- notification\_applicationDidBecomeActive method [\#447](https://github.com/phonegap/phonegap-plugin-push/issues/447) +* notification_applicationDidBecomeActive method [\#447](https://github.com/phonegap/phonegap-plugin-push/issues/447) ## [1.5.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.1) (2015-12-18) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.5.0...1.5.1) **Closed issues:** -- Unsubscribing to topics should not clear event handlers [\#443](https://github.com/phonegap/phonegap-plugin-push/issues/443) +* Unsubscribing to topics should not clear event handlers [\#443](https://github.com/phonegap/phonegap-plugin-push/issues/443) ## [1.5.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.5.0) (2015-12-18) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.5...1.5.0) **Fixed bugs:** -- Make sure iOS/Android can receive the same GCM payload [\#401](https://github.com/phonegap/phonegap-plugin-push/issues/401) +* Make sure iOS/Android can receive the same GCM payload [\#401](https://github.com/phonegap/phonegap-plugin-push/issues/401) **Closed issues:** -- Using stacking notifications but only able to process one [\#435](https://github.com/phonegap/phonegap-plugin-push/issues/435) -- Cant find stacking docs [\#430](https://github.com/phonegap/phonegap-plugin-push/issues/430) -- Android Marshmallow 6.0 push icon [\#422](https://github.com/phonegap/phonegap-plugin-push/issues/422) -- Distinguish between 'android' or 'ios' on registration event [\#418](https://github.com/phonegap/phonegap-plugin-push/issues/418) -- Phonegap Build Issues for 1.4.X [\#417](https://github.com/phonegap/phonegap-plugin-push/issues/417) -- using in Ionic [\#416](https://github.com/phonegap/phonegap-plugin-push/issues/416) -- notification event not called on ios [\#414](https://github.com/phonegap/phonegap-plugin-push/issues/414) -- \[docs\] detail on deviceready dependency [\#410](https://github.com/phonegap/phonegap-plugin-push/issues/410) -- iOS: Plugin does not start [\#404](https://github.com/phonegap/phonegap-plugin-push/issues/404) -- Process notifications in background [\#398](https://github.com/phonegap/phonegap-plugin-push/issues/398) -- On iOS 9 the badge does not clear [\#395](https://github.com/phonegap/phonegap-plugin-push/issues/395) -- Background notification OK, but event "notification" never called [\#387](https://github.com/phonegap/phonegap-plugin-push/issues/387) -- Android action button callback not triggered [\#298](https://github.com/phonegap/phonegap-plugin-push/issues/298) +* Using stacking notifications but only able to process one [\#435](https://github.com/phonegap/phonegap-plugin-push/issues/435) +* Cant find stacking docs [\#430](https://github.com/phonegap/phonegap-plugin-push/issues/430) +* Android Marshmallow 6.0 push icon [\#422](https://github.com/phonegap/phonegap-plugin-push/issues/422) +* Distinguish between 'android' or 'ios' on registration event [\#418](https://github.com/phonegap/phonegap-plugin-push/issues/418) +* Phonegap Build Issues for 1.4.X [\#417](https://github.com/phonegap/phonegap-plugin-push/issues/417) +* using in Ionic [\#416](https://github.com/phonegap/phonegap-plugin-push/issues/416) +* notification event not called on ios [\#414](https://github.com/phonegap/phonegap-plugin-push/issues/414) +* \[docs\] detail on deviceready dependency [\#410](https://github.com/phonegap/phonegap-plugin-push/issues/410) +* iOS: Plugin does not start [\#404](https://github.com/phonegap/phonegap-plugin-push/issues/404) +* Process notifications in background [\#398](https://github.com/phonegap/phonegap-plugin-push/issues/398) +* On iOS 9 the badge does not clear [\#395](https://github.com/phonegap/phonegap-plugin-push/issues/395) +* Background notification OK, but event "notification" never called [\#387](https://github.com/phonegap/phonegap-plugin-push/issues/387) +* Android action button callback not triggered [\#298](https://github.com/phonegap/phonegap-plugin-push/issues/298) ## [1.4.5](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.5) (2015-12-03) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.4...1.4.5) **Fixed bugs:** -- register -\> unregister lifecycle [\#368](https://github.com/phonegap/phonegap-plugin-push/issues/368) +* register -\> unregister lifecycle [\#368](https://github.com/phonegap/phonegap-plugin-push/issues/368) **Closed issues:** -- jshint support [\#380](https://github.com/phonegap/phonegap-plugin-push/issues/380) -- Platform support [\#379](https://github.com/phonegap/phonegap-plugin-push/issues/379) -- Ionic implemenation [\#364](https://github.com/phonegap/phonegap-plugin-push/issues/364) -- on registration callback getting called repeatedly. [\#353](https://github.com/phonegap/phonegap-plugin-push/issues/353) -- on\("notification"\) dont fire when the app its open [\#351](https://github.com/phonegap/phonegap-plugin-push/issues/351) +* jshint support [\#380](https://github.com/phonegap/phonegap-plugin-push/issues/380) +* Platform support [\#379](https://github.com/phonegap/phonegap-plugin-push/issues/379) +* Ionic implemenation [\#364](https://github.com/phonegap/phonegap-plugin-push/issues/364) +* on registration callback getting called repeatedly. [\#353](https://github.com/phonegap/phonegap-plugin-push/issues/353) +* on\("notification"\) dont fire when the app its open [\#351](https://github.com/phonegap/phonegap-plugin-push/issues/351) ## [1.4.4](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.4) (2015-11-20) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.3...1.4.4) **Fixed bugs:** -- InstanceID.getToken\(\) not called in an Intent [\#354](https://github.com/phonegap/phonegap-plugin-push/issues/354) -- Handle both data and notification payloads in the same GCM push [\#343](https://github.com/phonegap/phonegap-plugin-push/issues/343) -- \[INSTALL\_FAILED\_CONFLICTING\_PROVIDER\] [\#320](https://github.com/phonegap/phonegap-plugin-push/issues/320) -- Getting "Error : Empty registration ID received from GCM" [\#315](https://github.com/phonegap/phonegap-plugin-push/issues/315) +* InstanceID.getToken\(\) not called in an Intent [\#354](https://github.com/phonegap/phonegap-plugin-push/issues/354) +* Handle both data and notification payloads in the same GCM push [\#343](https://github.com/phonegap/phonegap-plugin-push/issues/343) +* \[INSTALL_FAILED_CONFLICTING_PROVIDER\] [\#320](https://github.com/phonegap/phonegap-plugin-push/issues/320) +* Getting "Error : Empty registration ID received from GCM" [\#315](https://github.com/phonegap/phonegap-plugin-push/issues/315) **Closed issues:** -- xcode build fails with phonegap-plugin-push [\#358](https://github.com/phonegap/phonegap-plugin-push/issues/358) -- App crashes after adding push plugin and wikipedia app installed [\#357](https://github.com/phonegap/phonegap-plugin-push/issues/357) -- Conflict when compiling with com.google.maps [\#355](https://github.com/phonegap/phonegap-plugin-push/issues/355) +* xcode build fails with phonegap-plugin-push [\#358](https://github.com/phonegap/phonegap-plugin-push/issues/358) +* App crashes after adding push plugin and wikipedia app installed [\#357](https://github.com/phonegap/phonegap-plugin-push/issues/357) +* Conflict when compiling with com.google.maps [\#355](https://github.com/phonegap/phonegap-plugin-push/issues/355) ## [1.4.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.3) (2015-11-18) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.2...1.4.3) **Closed issues:** -- \[Question\] about the action's icon color [\#348](https://github.com/phonegap/phonegap-plugin-push/issues/348) -- Can I access Web API's from 'notification' handler? [\#335](https://github.com/phonegap/phonegap-plugin-push/issues/335) -- Init Error: Missing Instance ID Service [\#334](https://github.com/phonegap/phonegap-plugin-push/issues/334) -- Install issue [\#332](https://github.com/phonegap/phonegap-plugin-push/issues/332) -- Multiple Apps gets error [\#330](https://github.com/phonegap/phonegap-plugin-push/issues/330) -- Can't find variable PushNotification [\#328](https://github.com/phonegap/phonegap-plugin-push/issues/328) -- When app is in background, clicking on Android notification in shade opens app but does not trigger the on\('notification'\) event handler [\#326](https://github.com/phonegap/phonegap-plugin-push/issues/326) -- "Missing Command Error" when running in browser [\#318](https://github.com/phonegap/phonegap-plugin-push/issues/318) -- Small icon not working [\#316](https://github.com/phonegap/phonegap-plugin-push/issues/316) -- Duplicate push notifications happening on iOS when phone is unlocked [\#309](https://github.com/phonegap/phonegap-plugin-push/issues/309) -- Is it possible to add badge on Android portion. [\#308](https://github.com/phonegap/phonegap-plugin-push/issues/308) -- \[just a question\] about the priority [\#306](https://github.com/phonegap/phonegap-plugin-push/issues/306) -- Android - After unregister and reregister no notifications [\#304](https://github.com/phonegap/phonegap-plugin-push/issues/304) -- Amazon-Fireos and Blackberry 10 support [\#300](https://github.com/phonegap/phonegap-plugin-push/issues/300) -- 1.4.x not showing notification on Android [\#299](https://github.com/phonegap/phonegap-plugin-push/issues/299) -- "push.unregister" not really work in iOS [\#296](https://github.com/phonegap/phonegap-plugin-push/issues/296) +* \[Question\] about the action's icon color [\#348](https://github.com/phonegap/phonegap-plugin-push/issues/348) +* Can I access Web API's from 'notification' handler? [\#335](https://github.com/phonegap/phonegap-plugin-push/issues/335) +* Init Error: Missing Instance ID Service [\#334](https://github.com/phonegap/phonegap-plugin-push/issues/334) +* Install issue [\#332](https://github.com/phonegap/phonegap-plugin-push/issues/332) +* Multiple Apps gets error [\#330](https://github.com/phonegap/phonegap-plugin-push/issues/330) +* Can't find variable PushNotification [\#328](https://github.com/phonegap/phonegap-plugin-push/issues/328) +* When app is in background, clicking on Android notification in shade opens app but does not trigger the on\('notification'\) event handler [\#326](https://github.com/phonegap/phonegap-plugin-push/issues/326) +* "Missing Command Error" when running in browser [\#318](https://github.com/phonegap/phonegap-plugin-push/issues/318) +* Small icon not working [\#316](https://github.com/phonegap/phonegap-plugin-push/issues/316) +* Duplicate push notifications happening on iOS when phone is unlocked [\#309](https://github.com/phonegap/phonegap-plugin-push/issues/309) +* Is it possible to add badge on Android portion. [\#308](https://github.com/phonegap/phonegap-plugin-push/issues/308) +* \[just a question\] about the priority [\#306](https://github.com/phonegap/phonegap-plugin-push/issues/306) +* Android - After unregister and reregister no notifications [\#304](https://github.com/phonegap/phonegap-plugin-push/issues/304) +* Amazon-Fireos and Blackberry 10 support [\#300](https://github.com/phonegap/phonegap-plugin-push/issues/300) +* 1.4.x not showing notification on Android [\#299](https://github.com/phonegap/phonegap-plugin-push/issues/299) +* "push.unregister" not really work in iOS [\#296](https://github.com/phonegap/phonegap-plugin-push/issues/296) ## [1.4.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.2) (2015-11-03) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.1...1.4.2) **Closed issues:** -- data.registrationId is empty string "" on register event callback [\#295](https://github.com/phonegap/phonegap-plugin-push/issues/295) +* data.registrationId is empty string "" on register event callback [\#295](https://github.com/phonegap/phonegap-plugin-push/issues/295) ## [1.4.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.1) (2015-11-02) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.4.0...1.4.1) ## [1.4.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.4.0) (2015-10-27) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.3.0...1.4.0) **Implemented enhancements:** -- Use Google's InstanceID API [\#188](https://github.com/phonegap/phonegap-plugin-push/issues/188) +* Use Google's InstanceID API [\#188](https://github.com/phonegap/phonegap-plugin-push/issues/188) **Closed issues:** -- How to handle a re-installed app? [\#203](https://github.com/phonegap/phonegap-plugin-push/issues/203) -- interactive push notifications? [\#266](https://github.com/phonegap/phonegap-plugin-push/issues/266) -- Empty registrationId Android [\#265](https://github.com/phonegap/phonegap-plugin-push/issues/265) -- Run callback when clicking of notification body [\#261](https://github.com/phonegap/phonegap-plugin-push/issues/261) -- Android BUILD FAILED [\#251](https://github.com/phonegap/phonegap-plugin-push/issues/251) -- Re-register [\#250](https://github.com/phonegap/phonegap-plugin-push/issues/250) -- how to work in background ? [\#249](https://github.com/phonegap/phonegap-plugin-push/issues/249) -- installing plugin [\#244](https://github.com/phonegap/phonegap-plugin-push/issues/244) -- No Sound and vibration [\#242](https://github.com/phonegap/phonegap-plugin-push/issues/242) -- Unable to build apk [\#241](https://github.com/phonegap/phonegap-plugin-push/issues/241) -- still having problems with build. [\#239](https://github.com/phonegap/phonegap-plugin-push/issues/239) -- Registering on iOS 9 [\#238](https://github.com/phonegap/phonegap-plugin-push/issues/238) -- Custom sound repeated multiple times on Android [\#237](https://github.com/phonegap/phonegap-plugin-push/issues/237) -- Android: status bar notification is not shown [\#236](https://github.com/phonegap/phonegap-plugin-push/issues/236) -- Multiple Push Notifications - phonegap build [\#234](https://github.com/phonegap/phonegap-plugin-push/issues/234) -- error: cannot find symbol String token = InstanceID.getInstance\(getApplicationContext\(\)\).getToken\(senderID, GCM\); [\#231](https://github.com/phonegap/phonegap-plugin-push/issues/231) -- Problem using "ledColor" and "VibrationPattern" [\#229](https://github.com/phonegap/phonegap-plugin-push/issues/229) -- Notificaction event receive, but not notification showing on android [\#228](https://github.com/phonegap/phonegap-plugin-push/issues/228) -- Events for registration not being fired [\#227](https://github.com/phonegap/phonegap-plugin-push/issues/227) -- 'registration' event not firing on windows phone [\#224](https://github.com/phonegap/phonegap-plugin-push/issues/224) -- Can i subscribe to a topic in using plugin? [\#219](https://github.com/phonegap/phonegap-plugin-push/issues/219) -- GCMIntentService.java:472: error: cannot find symbol iconColor [\#217](https://github.com/phonegap/phonegap-plugin-push/issues/217) -- Push Plugin registering on iOS 9 Devices but not showing Notification [\#216](https://github.com/phonegap/phonegap-plugin-push/issues/216) -- Receiving a notification "outside app" while in it? [\#213](https://github.com/phonegap/phonegap-plugin-push/issues/213) -- iOS push not working for device tokens when spaces removed [\#212](https://github.com/phonegap/phonegap-plugin-push/issues/212) -- Error: Plugin PushPlugin failed to install. [\#210](https://github.com/phonegap/phonegap-plugin-push/issues/210) -- Build error [\#205](https://github.com/phonegap/phonegap-plugin-push/issues/205) -- Android push.on\('registration', cb\) fires correctly on device, but not in emulator. [\#204](https://github.com/phonegap/phonegap-plugin-push/issues/204) -- 1.3.0 version not compatible with "crosswalk" by PGB [\#199](https://github.com/phonegap/phonegap-plugin-push/issues/199) -- How to get data on didReceiveNotification Background Process [\#198](https://github.com/phonegap/phonegap-plugin-push/issues/198) -- PushNotification is not defined in some devices [\#196](https://github.com/phonegap/phonegap-plugin-push/issues/196) -- not getting notifications on the Android device [\#195](https://github.com/phonegap/phonegap-plugin-push/issues/195) -- Installation Errors [\#186](https://github.com/phonegap/phonegap-plugin-push/issues/186) -- IOS: on registration fired twice [\#185](https://github.com/phonegap/phonegap-plugin-push/issues/185) -- Build failed with exit code 8 [\#184](https://github.com/phonegap/phonegap-plugin-push/issues/184) -- iOS: Not able to schedule local notification after adding the plugin [\#183](https://github.com/phonegap/phonegap-plugin-push/issues/183) -- How to show multiple notifications individually in android? [\#181](https://github.com/phonegap/phonegap-plugin-push/issues/181) -- iOS init option type [\#180](https://github.com/phonegap/phonegap-plugin-push/issues/180) -- Building for Android is a quest [\#179](https://github.com/phonegap/phonegap-plugin-push/issues/179) -- How do i tell if the user open the app by tapping the notification? [\#176](https://github.com/phonegap/phonegap-plugin-push/issues/176) -- IOS custom push sound when app is in background [\#175](https://github.com/phonegap/phonegap-plugin-push/issues/175) -- Hi guys please post full working procedure, I'm not able to get registration id also. Please help [\#174](https://github.com/phonegap/phonegap-plugin-push/issues/174) -- Has anyone tested this plugin on windows? [\#173](https://github.com/phonegap/phonegap-plugin-push/issues/173) +* How to handle a re-installed app? [\#203](https://github.com/phonegap/phonegap-plugin-push/issues/203) +* interactive push notifications? [\#266](https://github.com/phonegap/phonegap-plugin-push/issues/266) +* Empty registrationId Android [\#265](https://github.com/phonegap/phonegap-plugin-push/issues/265) +* Run callback when clicking of notification body [\#261](https://github.com/phonegap/phonegap-plugin-push/issues/261) +* Android BUILD FAILED [\#251](https://github.com/phonegap/phonegap-plugin-push/issues/251) +* Re-register [\#250](https://github.com/phonegap/phonegap-plugin-push/issues/250) +* how to work in background ? [\#249](https://github.com/phonegap/phonegap-plugin-push/issues/249) +* installing plugin [\#244](https://github.com/phonegap/phonegap-plugin-push/issues/244) +* No Sound and vibration [\#242](https://github.com/phonegap/phonegap-plugin-push/issues/242) +* Unable to build apk [\#241](https://github.com/phonegap/phonegap-plugin-push/issues/241) +* still having problems with build. [\#239](https://github.com/phonegap/phonegap-plugin-push/issues/239) +* Registering on iOS 9 [\#238](https://github.com/phonegap/phonegap-plugin-push/issues/238) +* Custom sound repeated multiple times on Android [\#237](https://github.com/phonegap/phonegap-plugin-push/issues/237) +* Android: status bar notification is not shown [\#236](https://github.com/phonegap/phonegap-plugin-push/issues/236) +* Multiple Push Notifications - phonegap build [\#234](https://github.com/phonegap/phonegap-plugin-push/issues/234) +* error: cannot find symbol String token = InstanceID.getInstance\(getApplicationContext\(\)\).getToken\(senderID, GCM\); [\#231](https://github.com/phonegap/phonegap-plugin-push/issues/231) +* Problem using "ledColor" and "VibrationPattern" [\#229](https://github.com/phonegap/phonegap-plugin-push/issues/229) +* Notificaction event receive, but not notification showing on android [\#228](https://github.com/phonegap/phonegap-plugin-push/issues/228) +* Events for registration not being fired [\#227](https://github.com/phonegap/phonegap-plugin-push/issues/227) +* 'registration' event not firing on windows phone [\#224](https://github.com/phonegap/phonegap-plugin-push/issues/224) +* Can i subscribe to a topic in using plugin? [\#219](https://github.com/phonegap/phonegap-plugin-push/issues/219) +* GCMIntentService.java:472: error: cannot find symbol iconColor [\#217](https://github.com/phonegap/phonegap-plugin-push/issues/217) +* Push Plugin registering on iOS 9 Devices but not showing Notification [\#216](https://github.com/phonegap/phonegap-plugin-push/issues/216) +* Receiving a notification "outside app" while in it? [\#213](https://github.com/phonegap/phonegap-plugin-push/issues/213) +* iOS push not working for device tokens when spaces removed [\#212](https://github.com/phonegap/phonegap-plugin-push/issues/212) +* Error: Plugin PushPlugin failed to install. [\#210](https://github.com/phonegap/phonegap-plugin-push/issues/210) +* Build error [\#205](https://github.com/phonegap/phonegap-plugin-push/issues/205) +* Android push.on\('registration', cb\) fires correctly on device, but not in emulator. [\#204](https://github.com/phonegap/phonegap-plugin-push/issues/204) +* 1.3.0 version not compatible with "crosswalk" by PGB [\#199](https://github.com/phonegap/phonegap-plugin-push/issues/199) +* How to get data on didReceiveNotification Background Process [\#198](https://github.com/phonegap/phonegap-plugin-push/issues/198) +* PushNotification is not defined in some devices [\#196](https://github.com/phonegap/phonegap-plugin-push/issues/196) +* not getting notifications on the Android device [\#195](https://github.com/phonegap/phonegap-plugin-push/issues/195) +* Installation Errors [\#186](https://github.com/phonegap/phonegap-plugin-push/issues/186) +* IOS: on registration fired twice [\#185](https://github.com/phonegap/phonegap-plugin-push/issues/185) +* Build failed with exit code 8 [\#184](https://github.com/phonegap/phonegap-plugin-push/issues/184) +* iOS: Not able to schedule local notification after adding the plugin [\#183](https://github.com/phonegap/phonegap-plugin-push/issues/183) +* How to show multiple notifications individually in android? [\#181](https://github.com/phonegap/phonegap-plugin-push/issues/181) +* iOS init option type [\#180](https://github.com/phonegap/phonegap-plugin-push/issues/180) +* Building for Android is a quest [\#179](https://github.com/phonegap/phonegap-plugin-push/issues/179) +* How do i tell if the user open the app by tapping the notification? [\#176](https://github.com/phonegap/phonegap-plugin-push/issues/176) +* IOS custom push sound when app is in background [\#175](https://github.com/phonegap/phonegap-plugin-push/issues/175) +* Hi guys please post full working procedure, I'm not able to get registration id also. Please help [\#174](https://github.com/phonegap/phonegap-plugin-push/issues/174) +* Has anyone tested this plugin on windows? [\#173](https://github.com/phonegap/phonegap-plugin-push/issues/173) ## [1.3.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.3.0) (2015-09-21) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.3...1.3.0) **Implemented enhancements:** -- How to use GCM 3.0 with this plugin? [\#127](https://github.com/phonegap/phonegap-plugin-push/issues/127) -- Android: possibility to send a notification with a title and without message [\#122](https://github.com/phonegap/phonegap-plugin-push/issues/122) -- Enhancement - Led, Vibration Pattern, Priority on Android [\#105](https://github.com/phonegap/phonegap-plugin-push/issues/105) +* How to use GCM 3.0 with this plugin? [\#127](https://github.com/phonegap/phonegap-plugin-push/issues/127) +* Android: possibility to send a notification with a title and without message [\#122](https://github.com/phonegap/phonegap-plugin-push/issues/122) +* Enhancement - Led, Vibration Pattern, Priority on Android [\#105](https://github.com/phonegap/phonegap-plugin-push/issues/105) **Fixed bugs:** -- It is using in gcm data.additionalData ? [\#126](https://github.com/phonegap/phonegap-plugin-push/issues/126) -- iOS notification from cold boot [\#117](https://github.com/phonegap/phonegap-plugin-push/issues/117) -- Notification LED is not working [\#97](https://github.com/phonegap/phonegap-plugin-push/issues/97) +* It is using in gcm data.additionalData ? [\#126](https://github.com/phonegap/phonegap-plugin-push/issues/126) +* iOS notification from cold boot [\#117](https://github.com/phonegap/phonegap-plugin-push/issues/117) +* Notification LED is not working [\#97](https://github.com/phonegap/phonegap-plugin-push/issues/97) **Closed issues:** -- Know which version is used in build service [\#151](https://github.com/phonegap/phonegap-plugin-push/issues/151) -- Registration is not working in IOS9 [\#150](https://github.com/phonegap/phonegap-plugin-push/issues/150) -- build fail on android [\#149](https://github.com/phonegap/phonegap-plugin-push/issues/149) -- iconColor does not set icon background on Android [\#146](https://github.com/phonegap/phonegap-plugin-push/issues/146) -- Prevent windows toast notification when in foreground [\#145](https://github.com/phonegap/phonegap-plugin-push/issues/145) -- How to implement push notification for ios with this plug-in? [\#143](https://github.com/phonegap/phonegap-plugin-push/issues/143) -- After installing this plugin I can't build on Android [\#141](https://github.com/phonegap/phonegap-plugin-push/issues/141) -- version 1.2.3 [\#134](https://github.com/phonegap/phonegap-plugin-push/issues/134) -- New inbox style on android [\#131](https://github.com/phonegap/phonegap-plugin-push/issues/131) -- impossible to install the phonegap-plugin-push Error [\#130](https://github.com/phonegap/phonegap-plugin-push/issues/130) -- Hello, i am developing a cordova app which requires push notifications to be sent to users android phone, so i tried using this new phonegap push plugin as old one is deprecated, and it keeps giving me an error in console: Uncaught ReferenceError: module is not defined --- Line 154 Push.js and i dont have much experience with cordova, so can anyone assist me ? [\#128](https://github.com/phonegap/phonegap-plugin-push/issues/128) -- INVALID\_REGISTRATION when http post request with to IOS [\#123](https://github.com/phonegap/phonegap-plugin-push/issues/123) -- Andriod :More than 2 notifications in status bar it is not works. [\#121](https://github.com/phonegap/phonegap-plugin-push/issues/121) -- Release notes for 1.2.x [\#119](https://github.com/phonegap/phonegap-plugin-push/issues/119) -- Google cloud messaging GCM - Push Notification not being sent \(Server Side\) [\#110](https://github.com/phonegap/phonegap-plugin-push/issues/110) +* Know which version is used in build service [\#151](https://github.com/phonegap/phonegap-plugin-push/issues/151) +* Registration is not working in IOS9 [\#150](https://github.com/phonegap/phonegap-plugin-push/issues/150) +* build fail on android [\#149](https://github.com/phonegap/phonegap-plugin-push/issues/149) +* iconColor does not set icon background on Android [\#146](https://github.com/phonegap/phonegap-plugin-push/issues/146) +* Prevent windows toast notification when in foreground [\#145](https://github.com/phonegap/phonegap-plugin-push/issues/145) +* How to implement push notification for ios with this plug-in? [\#143](https://github.com/phonegap/phonegap-plugin-push/issues/143) +* After installing this plugin I can't build on Android [\#141](https://github.com/phonegap/phonegap-plugin-push/issues/141) +* version 1.2.3 [\#134](https://github.com/phonegap/phonegap-plugin-push/issues/134) +* New inbox style on android [\#131](https://github.com/phonegap/phonegap-plugin-push/issues/131) +* impossible to install the phonegap-plugin-push Error [\#130](https://github.com/phonegap/phonegap-plugin-push/issues/130) +* Hello, i am developing a cordova app which requires push notifications to be sent to users android phone, so i tried using this new phonegap push plugin as old one is deprecated, and it keeps giving me an error in console: Uncaught ReferenceError: module is not defined --- Line 154 Push.js and i dont have much experience with cordova, so can anyone assist me ? [\#128](https://github.com/phonegap/phonegap-plugin-push/issues/128) +* INVALID_REGISTRATION when http post request with to IOS [\#123](https://github.com/phonegap/phonegap-plugin-push/issues/123) +* Andriod :More than 2 notifications in status bar it is not works. [\#121](https://github.com/phonegap/phonegap-plugin-push/issues/121) +* Release notes for 1.2.x [\#119](https://github.com/phonegap/phonegap-plugin-push/issues/119) +* Google cloud messaging GCM - Push Notification not being sent \(Server Side\) [\#110](https://github.com/phonegap/phonegap-plugin-push/issues/110) ## [1.2.3](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.3) (2015-09-08) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.2...1.2.3) **Fixed bugs:** -- Notification not showing..... [\#101](https://github.com/phonegap/phonegap-plugin-push/issues/101) -- Same data payload for messages with action buttons [\#90](https://github.com/phonegap/phonegap-plugin-push/issues/90) +* Notification not showing..... [\#101](https://github.com/phonegap/phonegap-plugin-push/issues/101) +* Same data payload for messages with action buttons [\#90](https://github.com/phonegap/phonegap-plugin-push/issues/90) **Closed issues:** -- Notification doesn't show the app icon [\#112](https://github.com/phonegap/phonegap-plugin-push/issues/112) -- Notification doesn't show the app icon [\#111](https://github.com/phonegap/phonegap-plugin-push/issues/111) -- Issue with plugin facebook connect [\#107](https://github.com/phonegap/phonegap-plugin-push/issues/107) -- Cordova Support [\#99](https://github.com/phonegap/phonegap-plugin-push/issues/99) -- Uncaught ReferenceError: cordova is not defined, http://localhost:8100/lib/push.js, Line: 7 [\#98](https://github.com/phonegap/phonegap-plugin-push/issues/98) -- Notifications never received on Android [\#96](https://github.com/phonegap/phonegap-plugin-push/issues/96) -- How know the way the app was launched [\#95](https://github.com/phonegap/phonegap-plugin-push/issues/95) -- Android, example doesn't work when it goes into background [\#94](https://github.com/phonegap/phonegap-plugin-push/issues/94) -- Utilizing push plugin [\#91](https://github.com/phonegap/phonegap-plugin-push/issues/91) +* Notification doesn't show the app icon [\#112](https://github.com/phonegap/phonegap-plugin-push/issues/112) +* Notification doesn't show the app icon [\#111](https://github.com/phonegap/phonegap-plugin-push/issues/111) +* Issue with plugin facebook connect [\#107](https://github.com/phonegap/phonegap-plugin-push/issues/107) +* Cordova Support [\#99](https://github.com/phonegap/phonegap-plugin-push/issues/99) +* Uncaught ReferenceError: cordova is not defined, http://localhost:8100/lib/push.js, Line: 7 [\#98](https://github.com/phonegap/phonegap-plugin-push/issues/98) +* Notifications never received on Android [\#96](https://github.com/phonegap/phonegap-plugin-push/issues/96) +* How know the way the app was launched [\#95](https://github.com/phonegap/phonegap-plugin-push/issues/95) +* Android, example doesn't work when it goes into background [\#94](https://github.com/phonegap/phonegap-plugin-push/issues/94) +* Utilizing push plugin [\#91](https://github.com/phonegap/phonegap-plugin-push/issues/91) ## [1.2.2](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.2) (2015-08-31) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.1...1.2.2) **Closed issues:** -- PushPlugin notification icon is too big [\#88](https://github.com/phonegap/phonegap-plugin-push/issues/88) +* PushPlugin notification icon is too big [\#88](https://github.com/phonegap/phonegap-plugin-push/issues/88) ## [1.2.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.1) (2015-08-31) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.2.0...1.2.1) **Implemented enhancements:** -- Question about GCM Notifications and data in the message payload [\#87](https://github.com/phonegap/phonegap-plugin-push/issues/87) +* Question about GCM Notifications and data in the message payload [\#87](https://github.com/phonegap/phonegap-plugin-push/issues/87) **Fixed bugs:** -- Notification callback for pushes without a message [\#80](https://github.com/phonegap/phonegap-plugin-push/issues/80) +* Notification callback for pushes without a message [\#80](https://github.com/phonegap/phonegap-plugin-push/issues/80) **Closed issues:** -- Android: No notification displayed on device. Notification event never called. [\#86](https://github.com/phonegap/phonegap-plugin-push/issues/86) -- it seem no wp8 version for now [\#56](https://github.com/phonegap/phonegap-plugin-push/issues/56) +* Android: No notification displayed on device. Notification event never called. [\#86](https://github.com/phonegap/phonegap-plugin-push/issues/86) +* it seem no wp8 version for now [\#56](https://github.com/phonegap/phonegap-plugin-push/issues/56) ## [1.2.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.2.0) (2015-08-25) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.1...1.2.0) **Implemented enhancements:** -- Implement Inbox style for Android [\#74](https://github.com/phonegap/phonegap-plugin-push/issues/74) -- multi-line text support [\#63](https://github.com/phonegap/phonegap-plugin-push/issues/63) +* Implement Inbox style for Android [\#74](https://github.com/phonegap/phonegap-plugin-push/issues/74) +* multi-line text support [\#63](https://github.com/phonegap/phonegap-plugin-push/issues/63) **Fixed bugs:** -- Pushes being deleted from notification bar when cold start [\#67](https://github.com/phonegap/phonegap-plugin-push/issues/67) +* Pushes being deleted from notification bar when cold start [\#67](https://github.com/phonegap/phonegap-plugin-push/issues/67) **Closed issues:** -- oficial push plugin and windows and wp8 compatibility [\#71](https://github.com/phonegap/phonegap-plugin-push/issues/71) -- On Android, GCMIntentService.onError\(\) doesn't get passed to the JavaScript "error" event [\#65](https://github.com/phonegap/phonegap-plugin-push/issues/65) -- Android: add property to vibrate phone on received notification [\#61](https://github.com/phonegap/phonegap-plugin-push/issues/61) -- push.on =\> "registration" will trigger twice times that only in iOS [\#57](https://github.com/phonegap/phonegap-plugin-push/issues/57) +* oficial push plugin and windows and wp8 compatibility [\#71](https://github.com/phonegap/phonegap-plugin-push/issues/71) +* On Android, GCMIntentService.onError\(\) doesn't get passed to the JavaScript "error" event [\#65](https://github.com/phonegap/phonegap-plugin-push/issues/65) +* Android: add property to vibrate phone on received notification [\#61](https://github.com/phonegap/phonegap-plugin-push/issues/61) +* push.on =\> "registration" will trigger twice times that only in iOS [\#57](https://github.com/phonegap/phonegap-plugin-push/issues/57) ## [1.1.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.1) (2015-07-27) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.1.0...1.1.1) ## [1.1.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.1.0) (2015-07-27) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.1...1.1.0) **Implemented enhancements:** -- iOS doesn't add foreground key [\#41](https://github.com/phonegap/phonegap-plugin-push/issues/41) -- Android: Notification icon problem [\#20](https://github.com/phonegap/phonegap-plugin-push/issues/20) -- iOS badge number [\#18](https://github.com/phonegap/phonegap-plugin-push/issues/18) -- How i can set icons for push notifications in status bar and push view in android [\#14](https://github.com/phonegap/phonegap-plugin-push/issues/14) -- Support Win8.1 + Phone 8.1 Universal Apps \(WNS\), drop support for WP8.0 \(MPNS\) [\#13](https://github.com/phonegap/phonegap-plugin-push/issues/13) +* iOS doesn't add foreground key [\#41](https://github.com/phonegap/phonegap-plugin-push/issues/41) +* Android: Notification icon problem [\#20](https://github.com/phonegap/phonegap-plugin-push/issues/20) +* iOS badge number [\#18](https://github.com/phonegap/phonegap-plugin-push/issues/18) +* How i can set icons for push notifications in status bar and push view in android [\#14](https://github.com/phonegap/phonegap-plugin-push/issues/14) +* Support Win8.1 + Phone 8.1 Universal Apps \(WNS\), drop support for WP8.0 \(MPNS\) [\#13](https://github.com/phonegap/phonegap-plugin-push/issues/13) **Fixed bugs:** -- iOS only reads out "aps" payload [\#29](https://github.com/phonegap/phonegap-plugin-push/issues/29) -- Event not fired when in background [\#24](https://github.com/phonegap/phonegap-plugin-push/issues/24) -- Custom notification sound in background mode? [\#17](https://github.com/phonegap/phonegap-plugin-push/issues/17) +* iOS only reads out "aps" payload [\#29](https://github.com/phonegap/phonegap-plugin-push/issues/29) +* Event not fired when in background [\#24](https://github.com/phonegap/phonegap-plugin-push/issues/24) +* Custom notification sound in background mode? [\#17](https://github.com/phonegap/phonegap-plugin-push/issues/17) **Closed issues:** -- iOS only receives first notification in foreground [\#42](https://github.com/phonegap/phonegap-plugin-push/issues/42) -- Cannot register on iOS [\#30](https://github.com/phonegap/phonegap-plugin-push/issues/30) -- Fix Android paths in src folder [\#23](https://github.com/phonegap/phonegap-plugin-push/issues/23) -- PushNotification not defined [\#21](https://github.com/phonegap/phonegap-plugin-push/issues/21) -- Error trying to remove the plugin [\#19](https://github.com/phonegap/phonegap-plugin-push/issues/19) -- Handling multiple notifications on Android devices [\#12](https://github.com/phonegap/phonegap-plugin-push/issues/12) -- PGB \(build.phonegap.com\) problem [\#11](https://github.com/phonegap/phonegap-plugin-push/issues/11) -- reporting location via gcm [\#6](https://github.com/phonegap/phonegap-plugin-push/issues/6) +* iOS only receives first notification in foreground [\#42](https://github.com/phonegap/phonegap-plugin-push/issues/42) +* Cannot register on iOS [\#30](https://github.com/phonegap/phonegap-plugin-push/issues/30) +* Fix Android paths in src folder [\#23](https://github.com/phonegap/phonegap-plugin-push/issues/23) +* PushNotification not defined [\#21](https://github.com/phonegap/phonegap-plugin-push/issues/21) +* Error trying to remove the plugin [\#19](https://github.com/phonegap/phonegap-plugin-push/issues/19) +* Handling multiple notifications on Android devices [\#12](https://github.com/phonegap/phonegap-plugin-push/issues/12) +* PGB \(build.phonegap.com\) problem [\#11](https://github.com/phonegap/phonegap-plugin-push/issues/11) +* reporting location via gcm [\#6](https://github.com/phonegap/phonegap-plugin-push/issues/6) **Merged pull requests:** -- Updating Readme to document toast capable setting [\#47](https://github.com/phonegap/phonegap-plugin-push/pull/47) ([rakatyal](https://github.com/rakatyal)) -- fix issue \#41 [\#44](https://github.com/phonegap/phonegap-plugin-push/pull/44) ([Deminetix](https://github.com/Deminetix)) -- fix issue \#42 [\#43](https://github.com/phonegap/phonegap-plugin-push/pull/43) ([Deminetix](https://github.com/Deminetix)) -- Adding hyperlinks to README [\#40](https://github.com/phonegap/phonegap-plugin-push/pull/40) ([rakatyal](https://github.com/rakatyal)) -- Updating Readme [\#37](https://github.com/phonegap/phonegap-plugin-push/pull/37) ([rakatyal](https://github.com/rakatyal)) -- Adding windows support to plugin [\#36](https://github.com/phonegap/phonegap-plugin-push/pull/36) ([rakatyal](https://github.com/rakatyal)) -- Raghav/update [\#35](https://github.com/phonegap/phonegap-plugin-push/pull/35) ([rakatyal](https://github.com/rakatyal)) -- Adding behavior for different notification types [\#28](https://github.com/phonegap/phonegap-plugin-push/pull/28) ([rakatyal](https://github.com/rakatyal)) -- Initial commit to add support for windows universal platform [\#15](https://github.com/phonegap/phonegap-plugin-push/pull/15) ([rakatyal](https://github.com/rakatyal)) +* Updating Readme to document toast capable setting [\#47](https://github.com/phonegap/phonegap-plugin-push/pull/47) ([rakatyal](https://github.com/rakatyal)) +* fix issue \#41 [\#44](https://github.com/phonegap/phonegap-plugin-push/pull/44) ([Deminetix](https://github.com/Deminetix)) +* fix issue \#42 [\#43](https://github.com/phonegap/phonegap-plugin-push/pull/43) ([Deminetix](https://github.com/Deminetix)) +* Adding hyperlinks to README [\#40](https://github.com/phonegap/phonegap-plugin-push/pull/40) ([rakatyal](https://github.com/rakatyal)) +* Updating Readme [\#37](https://github.com/phonegap/phonegap-plugin-push/pull/37) ([rakatyal](https://github.com/rakatyal)) +* Adding windows support to plugin [\#36](https://github.com/phonegap/phonegap-plugin-push/pull/36) ([rakatyal](https://github.com/rakatyal)) +* Raghav/update [\#35](https://github.com/phonegap/phonegap-plugin-push/pull/35) ([rakatyal](https://github.com/rakatyal)) +* Adding behavior for different notification types [\#28](https://github.com/phonegap/phonegap-plugin-push/pull/28) ([rakatyal](https://github.com/rakatyal)) +* Initial commit to add support for windows universal platform [\#15](https://github.com/phonegap/phonegap-plugin-push/pull/15) ([rakatyal](https://github.com/rakatyal)) ## [1.0.1](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.1) (2015-06-08) + [Full Changelog](https://github.com/phonegap/phonegap-plugin-push/compare/1.0.0...1.0.1) **Closed issues:** -- documentation "senderId" correction [\#10](https://github.com/phonegap/phonegap-plugin-push/issues/10) -- add to our ci page [\#9](https://github.com/phonegap/phonegap-plugin-push/issues/9) -- Update installation instructions [\#7](https://github.com/phonegap/phonegap-plugin-push/issues/7) +* documentation "senderId" correction [\#10](https://github.com/phonegap/phonegap-plugin-push/issues/10) +* add to our ci page [\#9](https://github.com/phonegap/phonegap-plugin-push/issues/9) +* Update installation instructions [\#7](https://github.com/phonegap/phonegap-plugin-push/issues/7) ## [1.0.0](https://github.com/phonegap/phonegap-plugin-push/tree/1.0.0) (2015-06-05) -**Closed issues:** - -- Update code using enabledRemoteNotificationTypes because it is β€œnot supported in iOS 8” [\#8](https://github.com/phonegap/phonegap-plugin-push/issues/8) -- Register method not working [\#4](https://github.com/phonegap/phonegap-plugin-push/issues/4) -- Publish plugin to npm [\#3](https://github.com/phonegap/phonegap-plugin-push/issues/3) -- Update example to use new API [\#2](https://github.com/phonegap/phonegap-plugin-push/issues/2) -- Lowercase Example/ directory [\#1](https://github.com/phonegap/phonegap-plugin-push/issues/1) +**Closed issues:** +* Update code using enabledRemoteNotificationTypes because it is β€œnot supported in iOS 8” [\#8](https://github.com/phonegap/phonegap-plugin-push/issues/8) +* Register method not working [\#4](https://github.com/phonegap/phonegap-plugin-push/issues/4) +* Publish plugin to npm [\#3](https://github.com/phonegap/phonegap-plugin-push/issues/3) +* Update example to use new API [\#2](https://github.com/phonegap/phonegap-plugin-push/issues/2) +* Lowercase Example/ directory [\#1](https://github.com/phonegap/phonegap-plugin-push/issues/1) -\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)* +\* _This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)_ From 8828629f43ed4873a15533e6566a53b9621ca584 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 1 Mar 2018 14:09:34 -0500 Subject: [PATCH 07/59] =?UTF-8?q?=F0=9F=90=9B=20Issue=20#2237:=20Installat?= =?UTF-8?q?ion=20problems?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 - plugin.xml | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index b39e94237..04d1ef93b 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,6 @@ "2.2.0": { "cordova-ios": ">=4.5.0", "cordova-android": ">=7.1.0", - "cordova-browser": ">=5.0.3", "cordova": ">=7.1.0" } } diff --git a/plugin.xml b/plugin.xml index 074bbbc14..f28d0e866 100755 --- a/plugin.xml +++ b/plugin.xml @@ -9,7 +9,6 @@ - @@ -94,4 +93,4 @@ - \ No newline at end of file + From 5c0943d31b4efbe4b4e892051342f2e193f5f990 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 1 Mar 2018 14:09:59 -0500 Subject: [PATCH 08/59] :bookmark: Bumping plugin version to 2.2.1 --- plugin.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.xml b/plugin.xml index f28d0e866..cee49a60b 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,5 +1,5 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -93,4 +93,4 @@ - + \ No newline at end of file From b046cc92799238b2ed9d2a720cef0c97ba2eb1ab Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 1 Mar 2018 14:10:01 -0500 Subject: [PATCH 09/59] 2.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 04d1ef93b..76fde6b62 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "phonegap-plugin-push", "description": "Register and receive push notifications.", "types": "./types/index.d.ts", - "version": "2.2.0", + "version": "2.2.1", "homepage": "http://github.com/phonegap/phonegap-plugin-push#readme", "repository": { "type": "git", From c891053bd0b03b7ce21c5c234f815b89228e5e3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Nepusz?= Date: Wed, 7 Mar 2018 00:55:08 +0100 Subject: [PATCH 10/59] :sparkles: PushNotification.hasPermission() is now supported in the browser (#2236) --- www/browser/push.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/www/browser/push.js b/www/browser/push.js index 1badd77bc..664ddafd6 100644 --- a/www/browser/push.js +++ b/www/browser/push.js @@ -367,7 +367,10 @@ module.exports = { }, hasPermission: function(successCallback, errorCallback) { - successCallback(true); + const granted = Notification && Notification.permission === 'granted'; + successCallback({ + isEnabled: granted + }); }, unregister: function(successCallback, errorCallback, options) { From eaec03b3978fc029f95af7e221654a30a60802d8 Mon Sep 17 00:00:00 2001 From: dpeacock Date: Tue, 6 Mar 2018 19:23:13 -0500 Subject: [PATCH 11/59] Android fix to check if the channel is setup. Previously we only created our channel if no channels were created, there could be other channels created already so this would leave us without our channel. We should explicitly check if our channel exists, and not assume we are the only channel. (#2249) --- .../com/adobe/phonegap/push/PushPlugin.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/android/com/adobe/phonegap/push/PushPlugin.java b/src/android/com/adobe/phonegap/push/PushPlugin.java index 21f4e3c6f..a70a64de4 100644 --- a/src/android/com/adobe/phonegap/push/PushPlugin.java +++ b/src/android/com/adobe/phonegap/push/PushPlugin.java @@ -129,18 +129,24 @@ private void createChannel(JSONObject channel) throws JSONException { @TargetApi(26) private void createDefaultNotificationChannelIfNeeded(JSONObject options) { + String id; // only call on Android O and above if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { final NotificationManager notificationManager = (NotificationManager) cordova.getActivity() .getSystemService(Context.NOTIFICATION_SERVICE); List channels = notificationManager.getNotificationChannels(); - if (channels.size() == 0) { - NotificationChannel mChannel = new NotificationChannel(DEFAULT_CHANNEL_ID, "PhoneGap PushPlugin", - NotificationManager.IMPORTANCE_DEFAULT); - mChannel.enableVibration(options.optBoolean(VIBRATE, true)); - mChannel.setShowBadge(true); - notificationManager.createNotificationChannel(mChannel); + + for (int i=0; i Date: Tue, 6 Mar 2018 19:42:19 -0500 Subject: [PATCH 12/59] =?UTF-8?q?=E2=AC=86=EF=B8=8F=F0=9F=90=A7?= =?UTF-8?q?=F0=9F=90=9B=20Issue=20#2229:=20Multiple=20dex=20files=20define?= =?UTF-8?q?=20Landroid/support/v13/view/inputmethod/InputConnectionCompat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.xml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/plugin.xml b/plugin.xml index cee49a60b..56ec733e2 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,5 +1,9 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -38,11 +42,12 @@ - + + + - @@ -93,4 +98,4 @@ - \ No newline at end of file + From 432330d3549a4193f4c28c1a8cfa945206978746 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 8 Mar 2018 17:45:40 -0500 Subject: [PATCH 13/59] :bug::apple: Issue #2251: Apple rejected my app update because of VoIP introduced with phonegap-plugin-push v2.2.0 --- docs/API.md | 487 ++++++++++++++++++++++++++++------------------------ plugin.xml | 1 - 2 files changed, 267 insertions(+), 221 deletions(-) diff --git a/docs/API.md b/docs/API.md index de44728c6..189c2a64d 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1,22 +1,22 @@ # API -- [.init()](#pushnotificationinitoptions) -- [.hasPermission()](#pushnotificationhaspermissionsuccesshandler) -- [.createChannel() - Android only](#pushnotificationcreatechannel) -- [.deleteChannel() - Android only](#pushnotificationdeletechannel) -- [.listChannels() - Android only](#pushnotificationlistchannels) -- [push.on()](#pushonevent-callback) - - [push.on('registration')](#pushonregistration-callback) - - [push.on('notification')](#pushonnotification-callback) - - [push.on('error')](#pushonerror-callback) -- [push.off()](#pushoffevent-callback) -- [push.unregister()](#pushunregistersuccesshandler-errorhandler-topics) -- [push.subscribe()](#pushsubscribetopic-successhandler-errorhandler) -- [push.unsubscribe()](#pushunsubscribetopic-successhandler-errorhandler) -- [push.setApplicationIconBadgeNumber() - iOS & Android only](#pushsetapplicationiconbadgenumbersuccesshandler-errorhandler-count---ios--android-only) -- [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) -- [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) -- [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) +* [.init()](#pushnotificationinitoptions) +* [.hasPermission()](#pushnotificationhaspermissionsuccesshandler) +* [.createChannel() - Android only](#pushnotificationcreatechannel) +* [.deleteChannel() - Android only](#pushnotificationdeletechannel) +* [.listChannels() - Android only](#pushnotificationlistchannels) +* [push.on()](#pushonevent-callback) + * [push.on('registration')](#pushonregistration-callback) + * [push.on('notification')](#pushonnotification-callback) + * [push.on('error')](#pushonerror-callback) +* [push.off()](#pushoffevent-callback) +* [push.unregister()](#pushunregistersuccesshandler-errorhandler-topics) +* [push.subscribe()](#pushsubscribetopic-successhandler-errorhandler) +* [push.unsubscribe()](#pushunsubscribetopic-successhandler-errorhandler) +* [push.setApplicationIconBadgeNumber() - iOS & Android only](#pushsetapplicationiconbadgenumbersuccesshandler-errorhandler-count---ios--android-only) +* [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) +* [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) +* [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) ## PushNotification.init(options) @@ -28,58 +28,59 @@ Initializes the plugin on the native side. ### Returns -- Instance of `PushNotification`. +* Instance of `PushNotification`. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`options` | `Object` | `{}` | An object describing relevant specific options for all target platforms. +| Parameter | Type | Default | Description | +| --------- | -------- | ------- | ------------------------------------------------------------------------ | +| `options` | `Object` | `{}` | An object describing relevant specific options for all target platforms. | All available option attributes are described bellow. Currently, there are no Windows specific options. #### Android -Attribute | Type | Default | Description ---------- | ---- | ------- | ----------- -`android.icon` | `string` | | Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension. -`android.iconColor` | `string` | | Optional. Sets the background color of the small icon on Android 5.0 and greater. [Supported Formats](http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)) -`android.sound` | `boolean` | `true` | Optional. If `true` it plays the sound specified in the push data or the default system sound. -`android.vibrate` | `boolean` | `true` | Optional. If `true` the device vibrates on receipt of notification. -`android.clearBadge` | `boolean` | `false` | Optional. If `true` the icon badge will be cleared on init and before push messages are processed. -`android.clearNotifications` | `boolean` | `true` | Optional. If `true` the app clears all pending notifications when it is closed. -`android.forceShow` | `boolean` | `false` | Optional. Controls the behavior of the notification when app is in foreground. If `true` and app is in foreground, it will show a notification in the notification drawer, the same way as when the app is in background (and `on('notification')` callback will be called *only when the user clicks the notification*). When `false` and app is in foreground, the `on('notification')` callback will be called immediately. -`android.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. -`android.messageKey` | `string` | `message` | Optional. The key to search for text of notification. -`android.titleKey` | `string` | `'title'` | Optional. The key to search for title of notification. +| Attribute | Type | Default | Description | +| ---------------------------- | --------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `android.icon` | `string` | | Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension. | +| `android.iconColor` | `string` | | Optional. Sets the background color of the small icon on Android 5.0 and greater. [Supported Formats]() | +| `android.sound` | `boolean` | `true` | Optional. If `true` it plays the sound specified in the push data or the default system sound. | +| `android.vibrate` | `boolean` | `true` | Optional. If `true` the device vibrates on receipt of notification. | +| `android.clearBadge` | `boolean` | `false` | Optional. If `true` the icon badge will be cleared on init and before push messages are processed. | +| `android.clearNotifications` | `boolean` | `true` | Optional. If `true` the app clears all pending notifications when it is closed. | +| `android.forceShow` | `boolean` | `false` | Optional. Controls the behavior of the notification when app is in foreground. If `true` and app is in foreground, it will show a notification in the notification drawer, the same way as when the app is in background (and `on('notification')` callback will be called _only when the user clicks the notification_). When `false` and app is in foreground, the `on('notification')` callback will be called immediately. | +| `android.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. | +| `android.messageKey` | `string` | `message` | Optional. The key to search for text of notification. | +| `android.titleKey` | `string` | `'title'` | Optional. The key to search for title of notification. | #### Browser -Attribute | Type | Default | Description ---------- | ---- | ------- | ----------- -`browser.pushServiceURL` | `string` | `http://push.api.phonegap.com/v1/push` | Optional. URL for the push server you want to use. -`browser.applicationServerKey` | `string` | `` | Optional. Your GCM API key if you are using VAPID keys. +| Attribute | Type | Default | Description | +| ------------------------------ | -------- | ------------------------------------------------------------ | -------------------------------------------------- | +| `browser.pushServiceURL` | `string` | `http://push.api.phonegap.com/v1/push` | Optional. URL for the push server you want to use. | +| `browser.applicationServerKey` | `string` | `` | Optional. Your GCM API key if you are using VAPID keys. | #### iOS All iOS boolean options can also be specified as `string` -Attribute | Type | Default | Description ---------- | ---- | ------- | ----------- -`ios.voip` | `boolean` | `false` | Optional. If `true` the device will be set up to receive VoIP Push notifications and the other options will be ignored since VoIP notifications are silent notifications that should be handled in the "notification" event. -`ios.alert` | `boolean` | `false` | Optional. If `true` the device shows an alert on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. -`ios.badge` | `boolean` | `false` | Optional. If `true` the device sets the badge number on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. -`ios.sound` | `boolean` | `false` | Optional. If `true` the device plays a sound on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. -`ios.clearBadge` | `boolean` | `false` | Optional. If `true` the badge will be cleared on app startup. -`ios.categories` | `Object` | `{}` | Optional. The data required in order to enabled Action Buttons for iOS. See [Action Buttons on iOS](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#action-buttons-1) for more details. +| Attribute | Type | Default | Description | +| ---------------- | --------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ios.voip` | `boolean` | `false` | Optional. If `true` the device will be set up to receive VoIP Push notifications and the other options will be ignored since VoIP notifications are silent notifications that should be handled in the "notification" event. | +| `ios.alert` | `boolean` | `false` | Optional. If `true` the device shows an alert on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. | +| `ios.badge` | `boolean` | `false` | Optional. If `true` the device sets the badge number on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. | +| `ios.sound` | `boolean` | `false` | Optional. If `true` the device plays a sound on receipt of notification. **Note:** the value you set this option to the first time you call the init method will be how the application always acts. Once this is set programmatically in the init method it can only be changed manually by the user in Settings>Notifications>`App Name`. This is normal iOS behaviour. | +| `ios.clearBadge` | `boolean` | `false` | Optional. If `true` the badge will be cleared on app startup. | +| `ios.categories` | `Object` | `{}` | Optional. The data required in order to enabled Action Buttons for iOS. See [Action Buttons on iOS](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#action-buttons-1) for more details. | #### iOS GCM support The following properties are used if you want use GCM on iOS. -Attribute | Type | Default | Description ---------- | ---- | ------- | ----------- -`ios.fcmSandbox` | `boolean` | `false` | Whether to use prod or sandbox GCM setting. Defaults to false. +| Attribute | Type | Default | Description | +| ---------------- | --------- | ------- | -------------------------------------------------------------- | +| `ios.fcmSandbox` | `boolean` | `false` | Whether to use prod or sandbox GCM setting. Defaults to false. | + options `ios.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. @@ -93,10 +94,10 @@ When you send a message to GCM using that ID, what it does is look up the APNS r Make sure that the certificate you build with matches your `fcmSandbox` value. -- If you build your app as development and set `fcmSandbox: false` it will fail. -- If you build your app as production and set `fcmSandbox: true` it will fail. -- If you build your app as development and set `fcmSandbox: true` but haven't uploaded the development certs to Google it will fail. -- If you build your app as production and set `fcmSandbox: false` but haven't uploaded the production certs to Google it will fail. +* If you build your app as development and set `fcmSandbox: false` it will fail. +* If you build your app as production and set `fcmSandbox: true` it will fail. +* If you build your app as development and set `fcmSandbox: true` but haven't uploaded the development certs to Google it will fail. +* If you build your app as production and set `fcmSandbox: false` but haven't uploaded the production certs to Google it will fail. > Note: The integration between GCM and APNS is a bit finicky. Personally, I feel it is much better to send pushes to Android using GCM and pushes to iOS using APNS which this plugin does support. @@ -109,15 +110,27 @@ This type of notifications consist only of payload data, so the developer is the In order to use the VoIP Notifications, you have to create a VoIP Services Certificate. There are a lot of tutorials on the web to achieve this. Once created, you must use this certificate in order to communicate with the APN Service. To set up the VoIP Notification in ios do: + ```javascript const push = PushNotification.init({ ios: { - voip: true - } + voip: true + } }); ``` + Once set up the voip parameter to true, the rest of the options will be ignored. +You will also need to setup your app to receive `voip` messages in the apps pList. In your apps config.xml add the following in the `` tag. Only do this if you are setup to receive `voip` messages. If your app does not use `voip` messages the Apple App Store will reject your app. + +``` + + + voip + + +``` + The "hasPermission" success callback will return data.isEnabled to false since there is no need to approve to use this type of notifications. The "finish" method has not use too when the VoIP notifications are enabled. @@ -126,17 +139,16 @@ The "finish" method has not use too when the VoIP notifications are enabled. ```javascript const push = PushNotification.init({ - android: { - }, - browser: { - pushServiceURL: 'http://push.api.phonegap.com/v1/push' - }, - ios: { - alert: "true", - badge: true, - sound: 'false' - }, - windows: {} + android: {}, + browser: { + pushServiceURL: 'http://push.api.phonegap.com/v1/push' + }, + ios: { + alert: 'true', + badge: true, + sound: 'false' + }, + windows: {} }); ``` @@ -146,25 +158,25 @@ Checks whether the push notification permission has been granted. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully retrieves the details on the permission. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ---------------------------------------------------------------------------- | +| `successHandler` | `Function` | | Is called when the api successfully retrieves the details on the permission. | ### Callback parameters #### `successHandler` -Parameter | Type | Description ---------- | ---- | ----------- -`data.isEnabled` | `Boolean` | Whether the permission for push notifications has been granted. +| Parameter | Type | Description | +| ---------------- | --------- | --------------------------------------------------------------- | +| `data.isEnabled` | `Boolean` | Whether the permission for push notifications has been granted. | ### Example ```javascript -PushNotification.hasPermission((data) => { - if (data.isEnabled) { - console.log('isEnabled'); - } +PushNotification.hasPermission(data => { + if (data.isEnabled) { + console.log('isEnabled'); + } }); ``` @@ -174,24 +186,28 @@ Create a new notification channel for Android O and above. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully creates a channel. -`failureHandler` | `Function` | | Is called when the api fails to create a channel. -`channel` | `Object` | | The options for the channel. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------ | +| `successHandler` | `Function` | | Is called when the api successfully creates a channel. | +| `failureHandler` | `Function` | | Is called when the api fails to create a channel. | +| `channel` | `Object` | | The options for the channel. | ### Example ```javascript -PushNotification.createChannel(() => { - console.log('success'); -}, () => { - console.log('error'); -}, { - id: "testchannel1", - description: "My first test channel", - importance: 3 -}); +PushNotification.createChannel( + () => { + console.log('success'); + }, + () => { + console.log('error'); + }, + { + id: 'testchannel1', + description: 'My first test channel', + importance: 3 + } +); ``` The above will create a channel for your app. You'll need to provide the `id`, `description` and `importance` properties. The importance property goes from 1 = Lowest, 2 = Low, 3 = Normal, 4 = High and 5 = Highest. @@ -202,20 +218,24 @@ Delete a notification channel for Android O and above. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully creates a channel. -`failureHandler` | `Function` | | Is called when the api fails to create a channel. -`channelId` | `String` | | The ID of the channel. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------ | +| `successHandler` | `Function` | | Is called when the api successfully creates a channel. | +| `failureHandler` | `Function` | | Is called when the api fails to create a channel. | +| `channelId` | `String` | | The ID of the channel. | ### Example ```javascript -PushNotification.deleteChannel(() => { - console.log('success'); -}, () => { - console.log('error'); -}, 'testchannel1'); +PushNotification.deleteChannel( + () => { + console.log('success'); + }, + () => { + console.log('error'); + }, + 'testchannel1' +); ``` ## PushNotification.listChannels(successHandler) @@ -224,25 +244,25 @@ Returns a list of currently configured channels. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully retrieves the list of channels. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------------------- | +| `successHandler` | `Function` | | Is called when the api successfully retrieves the list of channels. | ### Callback parameters #### `successHandler` -Parameter | Type | Description ---------- | ---- | ----------- -`channels` | `JSONArrary` | List of channel objects. +| Parameter | Type | Description | +| ---------- | ------------ | ------------------------ | +| `channels` | `JSONArrary` | List of channel objects. | ### Example ```javascript -PushNotification.listChannels((channels) => { - for(let channel of channels) { - console.log(`ID: ${channel.id} Description: ${channel.description}`); - } +PushNotification.listChannels(channels => { + for (let channel of channels) { + console.log(`ID: ${channel.id} Description: ${channel.description}`); + } }); ``` @@ -250,10 +270,10 @@ PushNotification.listChannels((channels) => { ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`event` | `string` | | Name of the event to listen to. See below for all the event names. -`callback` | `Function` | | Is called when the event is triggered. +| Parameter | Type | Default | Description | +| ---------- | ---------- | ------- | ------------------------------------------------------------------ | +| `event` | `string` | | Name of the event to listen to. See below for all the event names. | +| `callback` | `Function` | | Is called when the event is triggered. | ## push.on('registration', callback) @@ -261,15 +281,15 @@ The event `registration` will be triggered on each successful registration with ### Callback parameters -Parameter | Type | Description ---------- | ---- | ----------- -`data.registrationId` | `string` | The registration ID provided by the 3rd party remote push service. -`data.registrationType` | `string` | The registration type of the 3rd party remote push service. Either FCM or APNS. +| Parameter | Type | Description | +| ----------------------- | -------- | ------------------------------------------------------------------------------- | +| `data.registrationId` | `string` | The registration ID provided by the 3rd party remote push service. | +| `data.registrationType` | `string` | The registration type of the 3rd party remote push service. Either FCM or APNS. | ### Example ```javascript -push.on('registration', (data) => { +push.on('registration', data => { console.log(data.registrationId); console.log(data.registrationType); }); @@ -279,8 +299,6 @@ For APNS users: the `registrationId` you will get will be a production or sandbo > Note: There is a separate persistent connection to the push service for each environment. The operating system establishes a persistent connection to the sandbox environment for development builds; ad hoc and distribution builds connect to the production environment. - - ### Common Problems #### Got JSON Exception TIMEOUT @@ -299,29 +317,29 @@ The event `notification` will be triggered each time a push notification is rece ### Callback parameters -Parameter | Type | Description ---------- | ---- | ----------- -`data.message` | `string` | The text of the push message sent from the 3rd party service. -`data.title` | `string` | The optional title of the push message sent from the 3rd party service. -`data.count` | `string` | The number of messages to be displayed in the badge in iOS/Android or message count in the notification shade in Android. For windows, it represents the value in the badge notification which could be a number or a status glyph. -`data.sound` | `string` | The name of the sound file to be played upon receipt of the notification. -`data.image` | `string` | The path of the image file to be displayed in the notification. -`data.launchArgs` | `string` | The args to be passed to the application on launch from push notification. This works when notification is received in background. (Windows Only) -`data.additionalData` | `Object` | An optional collection of data sent by the 3rd party push service that does not fit in the above properties. -`data.additionalData.foreground` | `boolean` | Whether the notification was received while the app was in the foreground -`data.additionalData.coldstart` | `boolean` | Will be `true` if the application is started by clicking on the push notification, `false` if the app is already started. -`data.additionalData.dismissed` | `boolean` | Is set to `true` if the notification was dismissed by the user +| Parameter | Type | Description | +| -------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `data.message` | `string` | The text of the push message sent from the 3rd party service. | +| `data.title` | `string` | The optional title of the push message sent from the 3rd party service. | +| `data.count` | `string` | The number of messages to be displayed in the badge in iOS/Android or message count in the notification shade in Android. For windows, it represents the value in the badge notification which could be a number or a status glyph. | +| `data.sound` | `string` | The name of the sound file to be played upon receipt of the notification. | +| `data.image` | `string` | The path of the image file to be displayed in the notification. | +| `data.launchArgs` | `string` | The args to be passed to the application on launch from push notification. This works when notification is received in background. (Windows Only) | +| `data.additionalData` | `Object` | An optional collection of data sent by the 3rd party push service that does not fit in the above properties. | +| `data.additionalData.foreground` | `boolean` | Whether the notification was received while the app was in the foreground | +| `data.additionalData.coldstart` | `boolean` | Will be `true` if the application is started by clicking on the push notification, `false` if the app is already started. | +| `data.additionalData.dismissed` | `boolean` | Is set to `true` if the notification was dismissed by the user | ### Example ```javascript -push.on('notification', (data) => { - console.log(data.message); - console.log(data.title); - console.log(data.count); - console.log(data.sound); - console.log(data.image); - console.log(data.additionalData); +push.on('notification', data => { + console.log(data.message); + console.log(data.title); + console.log(data.count); + console.log(data.sound); + console.log(data.image); + console.log(data.additionalData); }); ``` @@ -331,15 +349,15 @@ The event `error` will trigger when an internal error occurs and the cache is ab ### Callback parameters -Parameter | Type | Description ---------- | ---- | ----------- -`e` | `Error` | Standard JavaScript error object that describes the error. +| Parameter | Type | Description | +| --------- | ------- | ---------------------------------------------------------- | +| `e` | `Error` | Standard JavaScript error object that describes the error. | ### Example ```javascript -push.on('error', (e) => { - console.log(e.message); +push.on('error', e => { + console.log(e.message); }); ``` @@ -349,14 +367,17 @@ Removes a previously registered callback for an event. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`event` | `string` | | Name of the event type. The possible event names are the same as for the `push.on` function. -`callback` | `Function` | | The same callback used to register with `push.on`. +| Parameter | Type | Default | Description | +| ---------- | ---------- | ------- | -------------------------------------------------------------------------------------------- | +| `event` | `string` | | Name of the event type. The possible event names are the same as for the `push.on` function. | +| `callback` | `Function` | | The same callback used to register with `push.on`. | ### Example + ```javascript -const callback = (data) => { /*...*/}; +const callback = data => { + /*...*/ +}; //Adding handler for notification event push.on('notification', callback); @@ -375,20 +396,23 @@ If you provide a list of topics as an optional parameter then the application wi ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully unregisters. -`errorHandler` | `Function` | | Is called when the api encounters an error while unregistering. -`topics` | `Array` | | A list of topics to unsubscribe from. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | --------------------------------------------------------------- | +| `successHandler` | `Function` | | Is called when the api successfully unregisters. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while unregistering. | +| `topics` | `Array` | | A list of topics to unsubscribe from. | ### Example ```javascript -push.unregister(() => { - console.log('success'); -}, () => { - console.log('error'); -}); +push.unregister( + () => { + console.log('success'); + }, + () => { + console.log('error'); + } +); ``` ## push.subscribe(topic, successHandler, errorHandler) @@ -397,41 +421,50 @@ The subscribe method is used when the application wants to subscribe a new topic ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`topic` | `String` | | Topic to subscribe to. -`successHandler` | `Function` | | Is called when the api successfully subscribes. -`errorHandler` | `Function` | | Is called when the api encounters an error while subscribing. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------------- | +| `topic` | `String` | | Topic to subscribe to. | +| `successHandler` | `Function` | | Is called when the api successfully subscribes. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while subscribing. | ### Example ```javascript -push.subscribe('my-topic', () => { - console.log('success'); -}, (e) => { - console.log('error:', e); -}); +push.subscribe( + 'my-topic', + () => { + console.log('success'); + }, + e => { + console.log('error:', e); + } +); ``` + ## push.unsubscribe(topic, successHandler, errorHandler) The unsubscribe method is used when the application no longer wants to receive push notifications from a specific topic but continue to receive other push messages. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`topic` | `String` | | Topic to unsubscribe from. -`successHandler` | `Function` | | Is called when the api successfully unsubscribe. -`errorHandler` | `Function` | | Is called when the api encounters an error while unsubscribing. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | --------------------------------------------------------------- | +| `topic` | `String` | | Topic to unsubscribe from. | +| `successHandler` | `Function` | | Is called when the api successfully unsubscribe. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while unsubscribing. | ### Example ```javascript -push.unsubscribe('my-topic', () => { - console.log('success'); -}, (e) => { - console.log('error:', e); -}); +push.unsubscribe( + 'my-topic', + () => { + console.log('success'); + }, + e => { + console.log('error:', e); + } +); ``` ## push.setApplicationIconBadgeNumber(successHandler, errorHandler, count) - iOS & Android only @@ -442,20 +475,24 @@ Set the badge count visible when the app is not running ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully sets the icon badge number. -`errorHandler` | `Function` | | Is called when the api encounters an error while trying to set the icon badge number. -`count` | `number` | | Indicates what number should show up in the badge. Passing 0 will clear the badge. Each `notification` event contains a `data.count` value which can be used to set the badge to correct number. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `successHandler` | `Function` | | Is called when the api successfully sets the icon badge number. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while trying to set the icon badge number. | +| `count` | `number` | | Indicates what number should show up in the badge. Passing 0 will clear the badge. Each `notification` event contains a `data.count` value which can be used to set the badge to correct number. | ### Example ```javascript -push.setApplicationIconBadgeNumber(() => { - console.log('success'); -}, () => { - console.log('error'); -}, 2); +push.setApplicationIconBadgeNumber( + () => { + console.log('success'); + }, + () => { + console.log('error'); + }, + 2 +); ``` ## push.getApplicationIconBadgeNumber(successHandler, errorHandler) - iOS & Android only @@ -464,27 +501,30 @@ Get the current badge count visible when the app is not running ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully retrieves the icon badge number. -`errorHandler` | `Function` | | Is called when the api encounters an error while trying to retrieve the icon badge number. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ------------------------------------------------------------------------------------------ | +| `successHandler` | `Function` | | Is called when the api successfully retrieves the icon badge number. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while trying to retrieve the icon badge number. | ### Callback parameters #### `successHandler` -Parameter | Type | Description ---------- | ---- | ----------- -`n` | `number` | An integer which is the current badge count. +| Parameter | Type | Description | +| --------- | -------- | -------------------------------------------- | +| `n` | `number` | An integer which is the current badge count. | ### Example ```javascript -push.getApplicationIconBadgeNumber((n) => { - console.log('success', n); -}, () => { - console.log('error'); -}); +push.getApplicationIconBadgeNumber( + n => { + console.log('success', n); + }, + () => { + console.log('error'); + } +); ``` ## push.finish(successHandler, errorHandler, id) - iOS only @@ -493,20 +533,24 @@ Tells the OS that you are done processing a background push notification. ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully completes background push processing. -`errorHandler` | `Function` | | Is called when the api encounters an error while processing and completing the background push. -`id` | `String` | | Tells the OS which background process is complete. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | ----------------------------------------------------------------------------------------------- | +| `successHandler` | `Function` | | Is called when the api successfully completes background push processing. | +| `errorHandler` | `Function` | | Is called when the api encounters an error while processing and completing the background push. | +| `id` | `String` | | Tells the OS which background process is complete. | ### Example ```javascript -push.finish(() => { - console.log('success'); -}, () => { - console.log('error'); -}, 'push-1'); +push.finish( + () => { + console.log('success'); + }, + () => { + console.log('error'); + }, + 'push-1' +); ``` ## push.clearAllNotifications(successHandler, errorHandler) - iOS & Android only @@ -515,17 +559,20 @@ Tells the OS to clear all notifications from the Notification Center ### Parameters -Parameter | Type | Default | Description ---------- | ---- | ------- | ----------- -`successHandler` | `Function` | | Is called when the api successfully clears the notifications. -`errorHandler` | `Function` | | Is called when the api encounters an error when attempting to clears the notifications. +| Parameter | Type | Default | Description | +| ---------------- | ---------- | ------- | --------------------------------------------------------------------------------------- | +| `successHandler` | `Function` | | Is called when the api successfully clears the notifications. | +| `errorHandler` | `Function` | | Is called when the api encounters an error when attempting to clears the notifications. | ### Example ```javascript -push.clearAllNotifications(() => { - console.log('success'); -}, () => { - console.log('error'); -}); +push.clearAllNotifications( + () => { + console.log('success'); + }, + () => { + console.log('error'); + } +); ``` diff --git a/plugin.xml b/plugin.xml index 56ec733e2..d57d1b562 100755 --- a/plugin.xml +++ b/plugin.xml @@ -73,7 +73,6 @@ remote-notification - voip From 24d5110c5321b1adb95071ec6114afc1044fd838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederico=20Galv=C3=A3o?= Date: Thu, 8 Mar 2018 21:19:12 -0300 Subject: [PATCH 14/59] :memo: Formatting table of options for ios. --- docs/API.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/API.md b/docs/API.md index 189c2a64d..e9ef9143b 100644 --- a/docs/API.md +++ b/docs/API.md @@ -80,9 +80,7 @@ The following properties are used if you want use GCM on iOS. | Attribute | Type | Default | Description | | ---------------- | --------- | ------- | -------------------------------------------------------------- | | `ios.fcmSandbox` | `boolean` | `false` | Whether to use prod or sandbox GCM setting. Defaults to false. | - -options -`ios.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. +| `ios.topics` | `array` | `[]` | Optional. If the array contains one or more strings each string will be used to subscribe to a FcmPubSub topic. | ##### How GCM on iOS works. From ee18f1a796882ee962ef8062e2e729b1aa1164da Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Fri, 9 Mar 2018 11:34:14 -0500 Subject: [PATCH 15/59] :bookmark: Bumping plugin version to 2.2.2 --- plugin.xml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/plugin.xml b/plugin.xml index d57d1b562..2d5062d79 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,9 +1,5 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -42,7 +38,7 @@ - + @@ -97,4 +93,4 @@ - + \ No newline at end of file From bd868ea17d7e8d3a38228206b7d782cf1a2a92f9 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Fri, 9 Mar 2018 11:34:15 -0500 Subject: [PATCH 16/59] 2.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 76fde6b62..34d18d8c9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "phonegap-plugin-push", "description": "Register and receive push notifications.", "types": "./types/index.d.ts", - "version": "2.2.1", + "version": "2.2.2", "homepage": "http://github.com/phonegap/phonegap-plugin-push#readme", "repository": { "type": "git", From 4d89cc7acd086df9026075f3d3ecb1ec044667d0 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 26 Mar 2018 15:54:58 -0400 Subject: [PATCH 17/59] =?UTF-8?q?=F0=9F=93=9D=20Remove=20link=20to=20works?= =?UTF-8?q?hop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f0b018cfe..777051649 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ of the `Firebase Cloud Messaging` library. More details are available in the # Do you like tutorial? You get tutorial! * [PhoneGap Day US Push Workshop 2016 (using node-gcm)](http://macdonst.github.io/push-workshop/) -* [PhoneGap Day EU Push Workshop 2016 (using PhoneGap Push)](http://macdonst.github.io/push-workshop-eu/) # Thanks to all our contributors From fe6cb91cb250a3dad894857ece81da553af37d09 Mon Sep 17 00:00:00 2001 From: Maksim Chemerisuk Date: Mon, 9 Apr 2018 16:43:52 +0300 Subject: [PATCH 18/59] :heavy_plus_sign: add dependency on cordova-support-google-services (#2293) --- plugin.xml | 1 + push.gradle | 17 ----------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/plugin.xml b/plugin.xml index 2d5062d79..54dcc0dbd 100755 --- a/plugin.xml +++ b/plugin.xml @@ -44,6 +44,7 @@ + diff --git a/push.gradle b/push.gradle index 39fcb559a..a67197093 100644 --- a/push.gradle +++ b/push.gradle @@ -17,20 +17,3 @@ android { applicationId = doExtractStringFromManifest("package") } } - -buildscript { - repositories { - jcenter() - mavenLocal() - } - dependencies { - classpath 'com.android.tools.build:gradle:+' - classpath 'com.google.gms:google-services:3.0.0' - } -} - -// apply plugin: 'com.google.gms.google-services' -// class must be used instead of id(string) to be able to apply plugin from non-root gradle file -ext.postBuildExtras = { - apply plugin: com.google.gms.googleservices.GoogleServicesPlugin -} From a2be6999696243100f84d6e8c7fa9606e6633c57 Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 26 Apr 2018 17:01:23 +0200 Subject: [PATCH 19/59] Added description of sample JSON message format for Android and iOS to PAYLOAD.md (#2306) * Added description of sample JSON message format to PAYLOAD.md * minor fix in link * added "sound" to sample JSON message, fixed whitespace in indent * fixed again broken link in PAYLOAD.md * added new section on Message Format Overview to TOC, fixed some typos, fixed content_available -> content-available, added sub headings --- docs/PAYLOAD.md | 149 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 142 insertions(+), 7 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 30886dcab..9d5de9cee 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -2,6 +2,7 @@ - [Foreground Events](#push-message-arrives-with-app-in-foreground) - [Background Events](#push-message-arrives-with-app-in-background) - [Tap Events](#user-clicks-on-notification-in-notification-center) +- [Push Notification Message Format Overview](#push-notification-message-format-overview) - [Android Behaviour](#android-behaviour) - [Notification vs Data Payloads](#notification-vs-data-payloads) - [Localization](#localization) @@ -16,7 +17,7 @@ - [Priority in Notifications](#priority-in-notifications) - [Picture Messages](#picture-messages) - [Background Notifications](#background-notifications) - - [Use of content_available: true](#use-of-content-available-true) + - [Use of content_available: true](#use-of-content_available-true) - [Caching](#caching) - [Huawei and Xiaomi Phones](#huawei-and-xiaomi-phones) - [Application force closed](#application-force-closed) @@ -72,6 +73,140 @@ Some ways to handle this *double* event are: - send two pushes, one to be processed in the background, and the other to show up in the shade. - include a unique ID in your push so you can check to see if you've already processed this event. +# Push Notification Message Format Overview + +## Android Message Format + +The JSON push message can contain the following fields, see https://developers.google.com/cloud-messaging/http-server-ref for a complete list. + +```javascript +var content = { + "priority": "normal", // Valid values are "normal" and "high." + "data": { + "title": "A short string describing the purpose of the notification", + "message": "The text of the alert message", // "body" can be used as alias, is converted to "message" + // localization of message is possible + "count": 5, // set the badge notification count at app icon + "sound": "default", // play default sound ... or "soundname", see [Android Sound](#sound) section + "notId": 1, // unique ID for the message, used for grouping, see below + "content-available": "0", // configure background updates, see below + "custom_key1": "value1", + "custom_key2": "value2" + } +} +``` + +### Using AWS-SNS with GCM + +This is the JSON-encoded format you can e.g. send via AWS-SNS's web UI. +Note, that the core message is json-encoded twice, so if we take the `content` from above you convert it this way + +```javascript + var gcm_message = JSON.stringify({ + "GCM": JSON.stringify(content), + "default": "plain text message again" + }); +``` + +```json +{"GCM": + "{\"priority\":\"normal\",\"data\":{\"title\":\"A short string describing the purpose of the notification\",\"message\":\"The text of the alert message\",\"count\":5,\"sound\": \"default\",\"notId\":1,\"content-available\":\"0\",\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}}", + "default": "plain text message again" +} +``` + +### Message Received in JavaScript + +This message is received in the `push.on("notification")` handler as follows. +Note that the properties are "normalized" across platforms, so this is passed to the app on android: + +```json +{ + "count": "5", + "message": "The text of the alert message", + "sound": "default", + "title": "A short string describing the purpose of the notification", + "additionalData": { + "custom_key1": "value1", + "custom_key2": "value2", + "notId": "1", + "content_available": "0", + "dismissed": false, + "google.message_id": "...", + "coldstart": false, + "foreground": false + } +} +``` + +## iOS Message Format + +The JSON message can contain the following fields, see [Apple developer docs](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW5) for a complete list + +```json +{ + "aps": { + "alert": { // alternatively just a string: "Your Message", + "title": "A short string describing the purpose of the notification", + "body": "The text of the alert message", + // localization of message is possible + "launch-image": "The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider" + }, + "badge": 5, // Number to show at App icon + "content-available": "0", // configure background updates, see below + "category": "identifier", // Provide this key with a string value that represents the notification’s type + "thread-id": "id", // Provide this key with a string value that represents the app-specific identifier for grouping notifications + "sound": "default" // play default sound, or custom sound, see [iOS Sound](#sound-1) section + }, + "custom_key1": "value1", + "custom_key2": "value2" +} +``` + +### Using AWS-SNS with APNS + +This is the JSON-encoded format you can send via AWS-SNS's web UI: + +```json +{"APNS_SANDBOX": + "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" +} +``` + +Note: use "APNS" to send to an app signed and released to production or "APNS_SANDBOX" or to send to an app signed and released for development. You can include both keys (APNS and APNS_SANDBOX) in the message if you want to send both to apps signed for production and apps signed for development. + +```json +{ + "APNS": "{\"aps\":...}", + "APNS_SANDBOX": "{\"aps\":...}", + "default": "plain text message again" +} +``` + +### Message Received in JavaScript + +This message is received in the `push.on("notification")` handler as follows. +Note that the properties are "normalized" accross platforms, so this is passed to the app on iOS: + +```json +{ + "count": 5, // "badge" is converted to "count" + "message": "The text of the alert message", + "sound": "default", + "title": "A short string describing the purpose of the notification", + "additionalData": { + "category": "identifier", + "coldstart": false, + "foreground": false, + "content-available": "0", + "custom_key1": "value1", + "custom_key2": "value2", + "launch-image": "The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider", + "thread-id": "id" + } +} +``` + # Android Behaviour ## Notification vs Data Payloads @@ -80,7 +215,7 @@ Notifications behave differently depending on the foreground/background state of For instance if you send the following payload: -``` +```json { "notification": { "title": "Test Notification", @@ -94,7 +229,7 @@ When your app is in the foreground, any `on('notification')` handlers you have r If you send a payload with a mix of `notification` & `data` objects like this: -``` +```json { "notification": { "title": "Test Notification", @@ -111,7 +246,7 @@ When your app is in the foreground any `on('notification')` handlers you have re My recommended format for your push payload when using this plugin (while it differs from Google's docs) works 100% of the time: -``` +```json { "data" : { "title": "Test Notification", @@ -124,7 +259,7 @@ My recommended format for your push payload when using this plugin (while it dif When your app is in the foreground any `on('notification')` handlers you have registered will be called. If your app is in the background, then the notification will show up in the system tray. Clicking on the notification in the system tray will start the app, and your `on('notification')` handler will be called with the following data: -``` +```json { "message": "This offer expires at 11:30 or whatever", "title": "Test Notification", @@ -1138,7 +1273,7 @@ On Android if you want your `on('notification')` event handler to be called when First the JSON you send from GCM will need to include `"content-available": "1"`. This will tell the push plugin to call your `on('notification')` event handler no matter what other data is in the push notification. -```javascript +```json { "registration_ids": ["my device id"], "data": { @@ -1182,7 +1317,7 @@ fcm.send(message, (err, response) => { or if you want the payload to be delivered directly to your app without anything showing up in the notification center, just omit the tite/message from the payload like so: -```javascript +```json { "registration_ids": ["my device id"], "data": { From df985166555822d703aed24babbf2ec04f870d64 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 26 Apr 2018 11:04:50 -0400 Subject: [PATCH 20/59] :memo: Fix syntax highlighting in payload doc --- docs/PAYLOAD.md | 949 +++++++++++++++++++++++++----------------------- 1 file changed, 493 insertions(+), 456 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 9d5de9cee..5f535ebbf 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -1,46 +1,45 @@ -- [Overview](#overview) - - [Foreground Events](#push-message-arrives-with-app-in-foreground) - - [Background Events](#push-message-arrives-with-app-in-background) - - [Tap Events](#user-clicks-on-notification-in-notification-center) -- [Push Notification Message Format Overview](#push-notification-message-format-overview) -- [Android Behaviour](#android-behaviour) - - [Notification vs Data Payloads](#notification-vs-data-payloads) - - [Localization](#localization) - - [Images](#images) - - [Sound](#sound) - - [Stacking](#stacking) - - [Inbox Stacking](#inbox-stacking) - - [Action Buttons](#action-buttons) - - [In Line Replies](#in-line-replies) - - [Led in Notifications](#led-in-notifications) - - [Vibration Pattern in Notifications](#vibration-pattern-in-notifications) - - [Priority in Notifications](#priority-in-notifications) - - [Picture Messages](#picture-messages) - - [Background Notifications](#background-notifications) - - [Use of content_available: true](#use-of-content_available-true) - - [Caching](#caching) - - [Huawei and Xiaomi Phones](#huawei-and-xiaomi-phones) - - [Application force closed](#application-force-closed) - - [Visibility](#visibility-of-notifications) - - [Ongoing Notifications](#ongoing-notifications) - - [Badges](#badges) - - [Support for Twilio Notify](#support-for-twilio-notify) - - [Notification ID](#notification-id) - - [Clicking Notification Does Not Bring App to Foreground](#clicking-notification-does-not-bring-app-to-foreground) - - [Notification Channels](#notification-channels) -- [iOS Behaviour](#ios-behaviour) - - [Sound](#sound-1) - - [Background Notifications](#background-notifications-1) - - [VoIP Notifications](#voip-notifications) - - [Action Buttons](#action-buttons-1) - - [Action Buttons using GCM on iOS](#action-buttons-using-gcm-on-ios) - - [GCM and Additional Data](#gcm-and-additional-data) -- [Windows Behaviour](#windows-behaviour) - - [Notifications](#notifications) - - [Setting Toast Capable Option for Windows](#setting-toast-capable-option-for-windows) - - [Disabling the default processing of notifications by Windows](#disabling-the-default-processing-of-notifications-by-windows) - - [Background Notifications](#background-notifications-2) - +* [Overview](#overview) + * [Foreground Events](#push-message-arrives-with-app-in-foreground) + * [Background Events](#push-message-arrives-with-app-in-background) + * [Tap Events](#user-clicks-on-notification-in-notification-center) +* [Push Notification Message Format Overview](#push-notification-message-format-overview) +* [Android Behaviour](#android-behaviour) + * [Notification vs Data Payloads](#notification-vs-data-payloads) + * [Localization](#localization) + * [Images](#images) + * [Sound](#sound) + * [Stacking](#stacking) + * [Inbox Stacking](#inbox-stacking) + * [Action Buttons](#action-buttons) + * [In Line Replies](#in-line-replies) + * [Led in Notifications](#led-in-notifications) + * [Vibration Pattern in Notifications](#vibration-pattern-in-notifications) + * [Priority in Notifications](#priority-in-notifications) + * [Picture Messages](#picture-messages) + * [Background Notifications](#background-notifications) + * [Use of content_available: true](#use-of-content_available-true) + * [Caching](#caching) + * [Huawei and Xiaomi Phones](#huawei-and-xiaomi-phones) + * [Application force closed](#application-force-closed) + * [Visibility](#visibility-of-notifications) + * [Ongoing Notifications](#ongoing-notifications) + * [Badges](#badges) + * [Support for Twilio Notify](#support-for-twilio-notify) + * [Notification ID](#notification-id) + * [Clicking Notification Does Not Bring App to Foreground](#clicking-notification-does-not-bring-app-to-foreground) + * [Notification Channels](#notification-channels) +* [iOS Behaviour](#ios-behaviour) + * [Sound](#sound-1) + * [Background Notifications](#background-notifications-1) + * [VoIP Notifications](#voip-notifications) + * [Action Buttons](#action-buttons-1) + * [Action Buttons using GCM on iOS](#action-buttons-using-gcm-on-ios) + * [GCM and Additional Data](#gcm-and-additional-data) +* [Windows Behaviour](#windows-behaviour) + * [Notifications](#notifications) + * [Setting Toast Capable Option for Windows](#setting-toast-capable-option-for-windows) + * [Disabling the default processing of notifications by Windows](#disabling-the-default-processing-of-notifications-by-windows) + * [Background Notifications](#background-notifications-2) # Overview @@ -50,28 +49,28 @@ The following flowchart attempts to give you a picture of what happens when a pu ## Push message arrives with app in foreground -- The push plugin receives the data from the remote push service and calls all of your `on('notification')` event handlers. -- The message is *not* displayed in the devices' notification center, as that is not normal behaviour for Android or iOS. +* The push plugin receives the data from the remote push service and calls all of your `on('notification')` event handlers. +* The message is _not_ displayed in the devices' notification center, as that is not normal behaviour for Android or iOS. ## Push message arrives with app in background -- The push plugin receives the data from the remote push service and checks to see if there is a title or message in the received data object. If there is, then the message will be displayed in the devices notification center. -- Then the push plugin checks to see if the app is running. If the user has killed the application, then no further processing of the push data will occur. -- If the app is running in the background the push plugin then checks to see if `content-available` exists in the push data. -- If `content-available` is set to `1`, then the plugin calls all of your `notification` event handlers. +* The push plugin receives the data from the remote push service and checks to see if there is a title or message in the received data object. If there is, then the message will be displayed in the devices notification center. +* Then the push plugin checks to see if the app is running. If the user has killed the application, then no further processing of the push data will occur. +* If the app is running in the background the push plugin then checks to see if `content-available` exists in the push data. +* If `content-available` is set to `1`, then the plugin calls all of your `notification` event handlers. ## User clicks on notification in notification center -- The app starts. -- Then the plugin calls all of your `notification` event handlers. +* The app starts. +* Then the plugin calls all of your `notification` event handlers. > Note: if the push payload contained `content-available: 1` then your `notification` event handler has already been called. It is up to you to handle the double event. -Some ways to handle this *double* event are: +Some ways to handle this _double_ event are: -- don't include title/message in the push so it doesn't show up in the shader. -- send two pushes, one to be processed in the background, and the other to show up in the shade. -- include a unique ID in your push so you can check to see if you've already processed this event. +* don't include title/message in the push so it doesn't show up in the shader. +* send two pushes, one to be processed in the background, and the other to show up in the shade. +* include a unique ID in your push so you can check to see if you've already processed this event. # Push Notification Message Format Overview @@ -81,19 +80,19 @@ The JSON push message can contain the following fields, see https://developers.g ```javascript var content = { - "priority": "normal", // Valid values are "normal" and "high." - "data": { - "title": "A short string describing the purpose of the notification", - "message": "The text of the alert message", // "body" can be used as alias, is converted to "message" + priority: 'normal', // Valid values are "normal" and "high." + data: { + title: 'A short string describing the purpose of the notification', + message: 'The text of the alert message', // "body" can be used as alias, is converted to "message" // localization of message is possible - "count": 5, // set the badge notification count at app icon - "sound": "default", // play default sound ... or "soundname", see [Android Sound](#sound) section - "notId": 1, // unique ID for the message, used for grouping, see below - "content-available": "0", // configure background updates, see below - "custom_key1": "value1", - "custom_key2": "value2" + count: 5, // set the badge notification count at app icon + sound: 'default', // play default sound ... or "soundname", see [Android Sound](#sound) section + notId: 1, // unique ID for the message, used for grouping, see below + 'content-available': '0', // configure background updates, see below + custom_key1: 'value1', + custom_key2: 'value2' } -} +}; ``` ### Using AWS-SNS with GCM @@ -102,15 +101,16 @@ This is the JSON-encoded format you can e.g. send via AWS-SNS's web UI. Note, that the core message is json-encoded twice, so if we take the `content` from above you convert it this way ```javascript - var gcm_message = JSON.stringify({ - "GCM": JSON.stringify(content), - "default": "plain text message again" - }); +var gcm_message = JSON.stringify({ + GCM: JSON.stringify(content), + default: 'plain text message again' +}); ``` ```json -{"GCM": - "{\"priority\":\"normal\",\"data\":{\"title\":\"A short string describing the purpose of the notification\",\"message\":\"The text of the alert message\",\"count\":5,\"sound\": \"default\",\"notId\":1,\"content-available\":\"0\",\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}}", +{ + "GCM": + "{\"priority\":\"normal\",\"data\":{\"title\":\"A short string describing the purpose of the notification\",\"message\":\"The text of the alert message\",\"count\":5,\"sound\": \"default\",\"notId\":1,\"content-available\":\"0\",\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}}", "default": "plain text message again" } ``` @@ -143,7 +143,7 @@ Note that the properties are "normalized" across platforms, so this is passed to The JSON message can contain the following fields, see [Apple developer docs](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW5) for a complete list -```json +```javascript { "aps": { "alert": { // alternatively just a string: "Your Message", @@ -168,8 +168,9 @@ The JSON message can contain the following fields, see [Apple developer docs](ht This is the JSON-encoded format you can send via AWS-SNS's web UI: ```json -{"APNS_SANDBOX": - "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" +{ + "APNS_SANDBOX": + "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" } ``` @@ -188,7 +189,7 @@ Note: use "APNS" to send to an app signed and released to production or "APNS_SA This message is received in the `push.on("notification")` handler as follows. Note that the properties are "normalized" accross platforms, so this is passed to the app on iOS: -```json +```javascript { "count": 5, // "badge" is converted to "count" "message": "The text of the alert message", @@ -217,11 +218,11 @@ For instance if you send the following payload: ```json { - "notification": { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10 - } + "notification": { + "title": "Test Notification", + "body": "This offer expires at 11:30 or whatever", + "notId": 10 + } } ``` @@ -231,14 +232,14 @@ If you send a payload with a mix of `notification` & `data` objects like this: ```json { - "notification": { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10 - }, - "data" : { - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } + "notification": { + "title": "Test Notification", + "body": "This offer expires at 11:30 or whatever", + "notId": 10 + }, + "data": { + "surveyID": "ewtawgreg-gragrag-rgarhthgbad" + } } ``` @@ -248,12 +249,12 @@ My recommended format for your push payload when using this plugin (while it dif ```json { - "data" : { - "title": "Test Notification", - "body": "This offer expires at 11:30 or whatever", - "notId": 10, - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } + "data": { + "title": "Test Notification", + "body": "This offer expires at 11:30 or whatever", + "notId": 10, + "surveyID": "ewtawgreg-gragrag-rgarhthgbad" + } } ``` @@ -261,11 +262,11 @@ When your app is in the foreground any `on('notification')` handlers you have re ```json { - "message": "This offer expires at 11:30 or whatever", - "title": "Test Notification", - "additionalData": { - "surveyID": "ewtawgreg-gragrag-rgarhthgbad" - } + "message": "This offer expires at 11:30 or whatever", + "title": "Test Notification", + "additionalData": { + "surveyID": "ewtawgreg-gragrag-rgarhthgbad" + } } ``` @@ -302,26 +303,26 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: {"locKey": "push_app_title"}, - message: 'Simple non-localizable text for message!' - // Constant with formatted params - // message: {"locKey": "push_message_fox", "locData": ["fox", "dog"]}); - } + to: deviceID, + data: { + title: { locKey: 'push_app_title' }, + message: 'Simple non-localizable text for message!' + // Constant with formatted params + // message: {"locKey": "push_message_fox", "locData": ["fox", "dog"]}); + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -340,17 +341,16 @@ By default the icon displayed in your push notification will be your apps icon. ```javascript const push = PushNotification.init({ - "android": { - }, - "browser": { - pushServiceURL: 'http://push.api.phonegap.com/v1/push' - }, - "ios": { - "alert": "true", - "badge": "true", - "sound": "true" - }, - "windows": {} + android: {}, + browser: { + pushServiceURL: 'http://push.api.phonegap.com/v1/push' + }, + ios: { + alert: 'true', + badge: 'true', + sound: 'true' + }, + windows: {} }); ``` @@ -364,23 +364,23 @@ In order to get a better user experience, you can specify an alternate icon and ```javascript const push = PushNotification.init({ - "android": { - "icon": "phonegap", - "iconColor": "blue" - }, - "browser": { - pushServiceURL: 'http://push.api.phonegap.com/v1/push' - }, - "ios": { - "alert": "true", - "badge": "true", - "sound": "true" - }, - "windows": {} + android: { + icon: 'phonegap', + iconColor: 'blue' + }, + browser: { + pushServiceURL: 'http://push.api.phonegap.com/v1/push' + }, + ios: { + alert: 'true', + badge: 'true', + sound: 'true' + }, + windows: {} }); ``` -Where *icon* is the name of an `.png` image file in the Android `res/drawable` folder. For example: `platforms/android/res/drawable/phonegap.png` +Where _icon_ is the name of an `.png` image file in the Android `res/drawable` folder. For example: `platforms/android/res/drawable/phonegap.png` Writing a hook to describe how to copy an image to the Android `res/drawable` folder is out of scope for this README but there is an [excellent tutorial](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) that you can copy. `iconColor` is one of the supported formats #RRGGBB or #AARRGGBB or one of the following names: 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow', 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey', 'aqua', 'fuchsia', 'lime', 'maroon', 'navy', 'olive', 'purple', 'silver', 'teal'. `iconColor` is supported on Android 5.0 and greater. @@ -409,34 +409,34 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from drawables folder.', - image: 'twitter' - } + to: deviceID, + data: { + title: 'Large Icon', + message: 'Loaded from drawables folder.', + image: 'twitter' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` -Would look for the *twitter* image in the `res/drawable` folder and produce the following notification. +Would look for the _twitter_ image in the `res/drawable` folder and produce the following notification. ![2015-07-24 02 34 41](https://cloud.githubusercontent.com/assets/353180/8866903/2df48028-3190-11e5-8176-fe8b3f7c5aab.png) -The second is the *assets* folder in your app. This JSON sent from GCM: +The second is the _assets_ folder in your app. This JSON sent from GCM: ```javascript { @@ -454,35 +454,34 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from assets folder.', - image: 'www/image/logo.png' - } + to: deviceID, + data: { + title: 'Large Icon', + message: 'Loaded from assets folder.', + image: 'www/image/logo.png' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` -Would look for the *logo.png* file in the assets/www/img folder. Since your apps www folder gets copied into the Android assets folder it is an excellent spot to store the images without needing to write a hook to copy them to the `res/drawable` folder. It produces the following notification. +Would look for the _logo.png_ file in the assets/www/img folder. Since your apps www folder gets copied into the Android assets folder it is an excellent spot to store the images without needing to write a hook to copy them to the `res/drawable` folder. It produces the following notification. ![2015-07-24 02 20 02](https://cloud.githubusercontent.com/assets/353180/8866901/2df19052-3190-11e5-8c16-a355c59209f3.png) - -The third is the remote *URL*. This JSON sent from GCM: +The third is the remote _URL_. This JSON sent from GCM: ```javascript { @@ -500,25 +499,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Large Icon', - message: 'Loaded from URL', - image: 'https://dl.dropboxusercontent.com/u/887989/antshot.png' - } + to: deviceID, + data: { + title: 'Large Icon', + message: 'Loaded from URL', + image: 'https://dl.dropboxusercontent.com/u/887989/antshot.png' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -546,17 +545,20 @@ Here is an example using node-gcm that sends the above JSON: ```javascript const gcm = require('node-gcm'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const service = new gcm.Sender(apiKey); const message = new gcm.Message(); message.addData('title', 'Large Circular Icon'); message.addData('message', 'Loaded from URL'); -message.addData('image', 'https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg'); +message.addData( + 'image', + 'https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg' +); message.addData('image-type', 'circular'); -service.send(message, { registrationTokens: [ deviceID ] }, (err, response) => { - if(err) console.error(err); - else console.log(response); +service.send(message, { registrationTokens: [deviceID] }, (err, response) => { + if (err) console.error(err); + else console.log(response); }); ``` @@ -591,6 +593,7 @@ Then second is `ringtone` which will play the phones default ringtone sound. } } ``` + The third is the empty string which will cause for the playing of sound to be skipped. ```javascript @@ -622,30 +625,30 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Sound Test', - message: 'Loaded res/raw', - soundname: 'test' - } + to: deviceID, + data: { + title: 'Sound Test', + message: 'Loaded res/raw', + soundname: 'test' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` -*Note:* when you specify the custom sound file name omit the file's extension. +_Note:_ when you specify the custom sound file name omit the file's extension. ## Stacking @@ -668,24 +671,24 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 1' - } + to: deviceID, + data: { + title: 'Test Push', + message: 'Push number 1' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -707,24 +710,24 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 2' - } + to: deviceID, + data: { + title: 'Test Push', + message: 'Push number 2' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -747,25 +750,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 1', - notId: 1 - } + to: deviceID, + data: { + title: 'Test Push', + message: 'Push number 1', + notId: 1 + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -788,25 +791,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Test Push', - message: 'Push number 2', - notId: 2 - } + to: deviceID, + data: { + title: 'Test Push', + message: 'Push number 2', + notId: 2 + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -834,26 +837,26 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'My Title', - message: 'My first message', - style: 'inbox', - summaryText: 'There are %n% notifications' - } + to: deviceID, + data: { + title: 'My Title', + message: 'My first message', + style: 'inbox', + summaryText: 'There are %n% notifications' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -881,26 +884,26 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'My Title', - message: 'My second message', - style: 'inbox', - summaryText: 'There are %n% notifications' - } + to: deviceID, + data: { + title: 'My Title', + message: 'My second message', + style: 'inbox', + summaryText: 'There are %n% notifications' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -917,16 +920,15 @@ Your notification can include a maximum of three action buttons. You register th ```javascript const push = PushNotification.init({ - "android": { - } + android: {} }); // data contains the push payload just like a notification event -push.on('emailGuests', (data) => { +push.on('emailGuests', data => { console.log('I should email my guests'); }); -push.on('snooze', (data) => { +push.on('snooze', data => { console.log('Remind me later'); }); ``` @@ -952,28 +954,34 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'AUX Scrum', - message: 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.', - actions: [ - { icon: "emailGuests", title: "EMAIL GUESTS", callback: "emailGuests", foreground: true}, - { icon: "snooze", title: "SNOOZE", callback: "snooze", foreground: false}, - ] - } + to: deviceID, + data: { + title: 'AUX Scrum', + message: + 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.', + actions: [ + { + icon: 'emailGuests', + title: 'EMAIL GUESTS', + callback: 'emailGuests', + foreground: true + }, + { icon: 'snooze', title: 'SNOOZE', callback: 'snooze', foreground: false } + ] + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1009,28 +1017,36 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'AUX Scrum', - message: 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.', - actions: [ - { "icon": "emailGuests", "title": "EMAIL GUESTS", "callback": "emailGuests", "foreground": false, "inline": true, "replyLabel": "Enter your reply here" }, - { "icon": "snooze", "title": "SNOOZE", "callback": "snooze", "foreground": false}, - ] - } + to: deviceID, + data: { + title: 'AUX Scrum', + message: + 'Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.', + actions: [ + { + icon: 'emailGuests', + title: 'EMAIL GUESTS', + callback: 'emailGuests', + foreground: false, + inline: true, + replyLabel: 'Enter your reply here' + }, + { icon: 'snooze', title: 'SNOOZE', callback: 'snooze', foreground: false } + ] + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1075,14 +1091,14 @@ and the text data that the user typed would be located in `data.additionalData.i #### Attributes -Attribute | Type | Default | Description ---------- | ---- | ------- | ----------- -`icon` | `string` | | Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension. -`title` | `string` | | Required. The label to display for the action button. -`callback` | `string` | | Required. The event to be emitted when the action button is pressed. -`foreground` | `boolean` | `true` | Optional. Whether or not to bring the app to the foreground when the action button is pressed. -`inline` | `boolean` | `false` | Optional. Whether or not to provide a quick reply text field to the user when the button is clicked. -`replyLabel` | `string` | `Enter your reply here` | Optional. If you don't include a `replyLabel` in your action the default will be used. +| Attribute | Type | Default | Description | +| ------------ | --------- | ----------------------- | -------------------------------------------------------------------------------------------------------------- | +| `icon` | `string` | | Optional. The name of a drawable resource to use as the small-icon. The name should not include the extension. | +| `title` | `string` | | Required. The label to display for the action button. | +| `callback` | `string` | | Required. The event to be emitted when the action button is pressed. | +| `foreground` | `boolean` | `true` | Optional. Whether or not to bring the app to the foreground when the action button is pressed. | +| `inline` | `boolean` | `false` | Optional. Whether or not to provide a quick reply text field to the user when the button is clicked. | +| `replyLabel` | `string` | `Enter your reply here` | Optional. If you don't include a `replyLabel` in your action the default will be used. | ## Led in Notifications @@ -1104,25 +1120,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Green LED', - message: 'This is my message with a Green LED', - ledColor: [0, 0, 255, 0] - } + to: deviceID, + data: { + title: 'Green LED', + message: 'This is my message with a Green LED', + ledColor: [0, 0, 255, 0] + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1147,25 +1163,26 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Vibration Pattern', - message: 'Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms', - vibrationPattern: [2000, 1000, 500, 500] - } + to: deviceID, + data: { + title: 'Vibration Pattern', + message: + 'Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms', + vibrationPattern: [2000, 1000, 500, 500] + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1190,25 +1207,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'This is a maximum priority Notification', - message: 'This notification should appear in front of all others', - priority: 2 - } + to: deviceID, + data: { + title: 'This is a maximum priority Notification', + message: 'This notification should appear in front of all others', + priority: 2 + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1237,26 +1254,27 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Big Picture', - message: 'This is my big picture message', - picture: 'http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg', - summaryText: 'The internet is built on cat pictures' - } + to: deviceID, + data: { + title: 'Big Picture', + message: 'This is my big picture message', + picture: + 'http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg', + summaryText: 'The internet is built on cat pictures' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1275,13 +1293,13 @@ First the JSON you send from GCM will need to include `"content-available": "1"` ```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 1", - "info": "super secret info", - "content-available": "1" - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 1", + "info": "super secret info", + "content-available": "1" + } } ``` @@ -1290,40 +1308,39 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - "to": deviceID, - "data": { - "title": 'Test Push', - "message": 'Push number 1', - "info": 'super secret info', - "content-available": '1' - } + to: deviceID, + data: { + title: 'Test Push', + message: 'Push number 1', + info: 'super secret info', + 'content-available': '1' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` or if you want the payload to be delivered directly to your app without anything showing up in the notification center, just omit the tite/message from the payload like so: - ```json { - "registration_ids": ["my device id"], - "data": { - "info": "super secret info", - "content-available": "1" - } + "registration_ids": ["my device id"], + "data": { + "info": "super secret info", + "content-available": "1" + } } ``` @@ -1332,24 +1349,24 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - "to": deviceID, - "data": { - "info": 'super secret info', - "content-available": '1' - } + to: deviceID, + data: { + info: 'super secret info', + 'content-available': '1' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1374,7 +1391,7 @@ The [GCM docs](https://developers.google.com/cloud-messaging/http-server-ref#dow Where the `content_available` property is part of the main payload object. Setting the property in this part of the payload will result in the PushPlugin not getting the data correctly. Setting `content_available: true` will cause the Android OS to handle the push payload for you and not pass the data to the PushPlugin. -Instead move `content_available: true` into the `data` object of the payload. The property name changes slightly to use a `-` instead of an `_`. So, `content_available` becomes `content-available` and `true` becomes `1` as per the example below: +Instead move `content_available: true` into the `data` object of the payload. The property name changes slightly to use a `-` instead of an `_`. So, `content_available` becomes `content-available` and `true` becomes `1` as per the example below: ```javascript { @@ -1392,9 +1409,9 @@ Instead move `content_available: true` into the `data` object of the payload. Th These phones have a particular quirk that when the app is force closed that you will no longer be able to receive notifications until the app is restarted. In order for you to receive background notifications: -- On your Huawei device go to Settings > Protected apps > check "My App" where. -- On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. -- On your Asus make sure your phone has the "Auto-start" property enabled for your app. +* On your Huawei device go to Settings > Protected apps > check "My App" where. +* On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. +* On your Asus make sure your phone has the "Auto-start" property enabled for your app. ### Application force closed @@ -1445,25 +1462,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - "data": { - "title": 'Force Start', - "message": 'This notification should restart the app', - "force-start": '1' - } + to: deviceID, + data: { + title: 'Force Start', + message: 'This notification should restart the app', + 'force-start': '1' + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1504,25 +1521,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'This is a public Notification', - message: 'You should be able to read this notification on your lock screen', - visibility: 1 - } + to: deviceID, + data: { + title: 'This is a public Notification', + message: 'You should be able to read this notification on your lock screen', + visibility: 1 + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1547,25 +1564,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript var FCM = require('fcm-node'); // Replace these with your own values. -var apiKey = "replace with API key"; -var deviceID = "my device id"; +var apiKey = 'replace with API key'; +var deviceID = 'my device id'; var fcm = new FCM(apiKey); var message = { - to: deviceID, - data: { - title: 'This is an ongoing Notification', - message: 'Some people also call me a sticky notification', - ongoing: true - } + to: deviceID, + data: { + title: 'This is an ongoing Notification', + message: 'Some people also call me a sticky notification', + ongoing: true + } }; -fcm.send(message, function(err, response){ +fcm.send(message, function(err, response) { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1592,25 +1609,25 @@ Here is an example using fcm-node that sends the above JSON: ```javascript const FCM = require('fcm-node'); // Replace these with your own values. -const apiKey = "replace with API key"; -const deviceID = "my device id"; +const apiKey = 'replace with API key'; +const deviceID = 'my device id'; const fcm = new FCM(apiKey); const message = { - to: deviceID, - data: { - title: 'Badge Test', - message: 'Badges, we don\'t need no stinking badges', - badge: 7 - } + to: deviceID, + data: { + title: 'Badge Test', + message: "Badges, we don't need no stinking badges", + badge: 7 + } }; fcm.send(message, (err, response) => { if (err) { console.log(err); - console.log("Something has gone wrong!"); + console.log('Something has gone wrong!'); } else { - console.log("Successfully sent with response: ", response); + console.log('Successfully sent with response: ', response); } }); ``` @@ -1619,9 +1636,9 @@ fcm.send(message, (err, response) => { This plugin seamlessly supports payloads generated by Twilio Notify on Android. Specifically the parameters passed in to the Twilio REST API are available in the message payload passed to your app as follows: -- `Title` --> `data.title` -- `Body` --> `data.message` -- `Sound` --> `data.sound` +* `Title` --> `data.title` +* `Body` --> `data.message` +* `Sound` --> `data.sound` Here is an example request to Twilio REST API and the corresponding JSON received by your app. @@ -1667,8 +1684,7 @@ For instance if you register for push notifications like normal: ```javascript const push = PushNotification.init({ - "android": { - } + android: {} }); ``` @@ -1727,7 +1743,7 @@ If you want the default sound to play upon receipt of push, use this payload: On iOS if you want your `on('notification')` event handler to be called when your app is in the background you will need to do a few things. -First the JSON you send from APNS will need to include `"content-available": 1` to the `aps` object. The `"content-available": 1` property in your push message is a signal to iOS to wake up your app and give it up to 30 seconds of background processing. If do not want this type of behaviour just omit `"content-available": 1` from your push data. As well you *should* set a `notId` property in the root of payload object. This is the parameter you pass to the `finish` method in order to tell the operating system that the processing of the push event is done. +First the JSON you send from APNS will need to include `"content-available": 1` to the `aps` object. The `"content-available": 1` property in your push message is a signal to iOS to wake up your app and give it up to 30 seconds of background processing. If do not want this type of behaviour just omit `"content-available": 1` from your push data. As well you _should_ set a `notId` property in the root of payload object. This is the parameter you pass to the `finish` method in order to tell the operating system that the processing of the push event is done. For instance the following JSON: @@ -1764,27 +1780,33 @@ For example: ```javascript const push = PushNotification.init({ - "ios": { - "sound": "true", - "alert": "true", - "badge": "true", - "clearBadge": "true" - } + ios: { + sound: 'true', + alert: 'true', + badge: 'true', + clearBadge: 'true' + } }); -push.on('registration', (data) => { - // send data.registrationId to push service +push.on('registration', data => { + // send data.registrationId to push service }); - -push.on('notification', (data) => { - // do something with the push data - // then call finish to let the OS know we are done - push.finish(() => { - console.log("processing of push data is finished"); - }, () => { - console.log("something went wrong with push.finish for ID =", data.additionalData.notId) - }, data.additionalData.notId); +push.on('notification', data => { + // do something with the push data + // then call finish to let the OS know we are done + push.finish( + () => { + console.log('processing of push data is finished'); + }, + () => { + console.log( + 'something went wrong with push.finish for ID =', + data.additionalData.notId + ); + }, + data.additionalData.notId + ); }); ``` @@ -1806,32 +1828,47 @@ Your notification can include action buttons. For iOS 8+ you must setup the poss ```javascript const push = PushNotification.init({ - "ios": { - "sound": true, - "alert": true, - "badge": true, - "categories": { - "invite": { - "yes": { - "callback": "accept", "title": "Accept", "foreground": true, "destructive": false - }, - "no": { - "callback": "reject", "title": "Reject", "foreground": true, "destructive": false - }, - "maybe": { - "callback": "maybe", "title": "Maybe", "foreground": true, "destructive": false - } - }, - "delete": { - "yes": { - "callback": "doDelete", "title": "Delete", "foreground": true, "destructive": true - }, - "no": { - "callback": "cancel", "title": "Cancel", "foreground": true, "destructive": false - } - } - } - } + ios: { + sound: true, + alert: true, + badge: true, + categories: { + invite: { + yes: { + callback: 'accept', + title: 'Accept', + foreground: true, + destructive: false + }, + no: { + callback: 'reject', + title: 'Reject', + foreground: true, + destructive: false + }, + maybe: { + callback: 'maybe', + title: 'Maybe', + foreground: true, + destructive: false + } + }, + delete: { + yes: { + callback: 'doDelete', + title: 'Delete', + foreground: true, + destructive: true + }, + no: { + callback: 'cancel', + title: 'Cancel', + foreground: true, + destructive: false + } + } + } + } }); ``` @@ -1873,7 +1910,7 @@ push.on('maybe', (data) => { You may notice that the `finish` method now takes `success`, `failure` and `id` parameters. The `id` parameter let's the operating system know which background process to stop. You'll set it in the next step. -Then you will need to set the `category` value in your `aps` payload to match one of the objects in the `categories` object. As well you *should* set a `notId` property in the root of payload object. This is the parameter you pass to the `finish` method in order to tell the operating system that the processing of the push event is done. +Then you will need to set the `category` value in your `aps` payload to match one of the objects in the `categories` object. As well you _should_ set a `notId` property in the root of payload object. This is the parameter you pass to the `finish` method in order to tell the operating system that the processing of the push event is done. ```javascript { @@ -1987,7 +2024,7 @@ This plugin automatically sets the toast capable flag to be true for Cordova 5.1 The default handling can be disabled by setting the 'cancel' property in the notification object. ```javascript -data.additionalData.pushNotificationReceivedEventArgs.cancel = true +data.additionalData.pushNotificationReceivedEventArgs.cancel = true; ``` ## Background Notifications From 98c805c69bd3744b45b302414b64f5a820c2de44 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 26 Apr 2018 11:10:59 -0400 Subject: [PATCH 21/59] :memo: Update installation requirements table --- docs/INSTALLATION.md | 88 +++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index c36efa4bd..3155aae2c 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -1,41 +1,43 @@ # Installation -- [Installation Requirements](#installation-requirements) -- [Android details](#android-details) - - [Compilation](#compilation) - - [Co-existing with Facebook Plugin](#co-existing-with-facebook-plugin) - - [Co-existing with plugins that use Firebase](#co-existing-with-plugins-that-use-firebase) - - [Common errors](#common-errors) - - [minSdkVersion === 14](#minsdkversion--14) - - [Multidex](#multidex) - - [More than one library with package name 'com.google.android.gms'](#more-than-one-library-with-package-name-comgoogleandroidgms) -- [Browser details](#browser-details) - - [Browser quirks](#browser-quirks) - - [Browser Support](#browser-support) -- [iOS details](#ios-details) - - [Xcode](#xcode) - - [Bitcode](#bitcode) - - [CocoaPods](#cocoapods) - - [Common CocoaPod Installation issues](#common-cocoapod-installation-issues) - - [CocoaPod Disk Space](#cocoapod-disk-space) - - [Library not found for -lPods-Appname](#library-not-found-for--lpods-appname) - - [Library not found for -lGoogleToolboxForMac](#library-not-found-for--lgoogletoolboxformac) - - [Module FirebaseInstanceID not found](#module-firebaseinstanceid-not-found) -- [Additional Resources](#additional-resources) +* [Installation Requirements](#installation-requirements) +* [Android details](#android-details) + * [Compilation](#compilation) + * [Co-existing with Facebook Plugin](#co-existing-with-facebook-plugin) + * [Co-existing with plugins that use Firebase](#co-existing-with-plugins-that-use-firebase) + * [Common errors](#common-errors) + * [minSdkVersion === 14](#minsdkversion--14) - [Multidex](#multidex) - [More than one library with package name 'com.google.android.gms'](#more-than-one-library-with-package-name-comgoogleandroidgms) +* [Browser details](#browser-details) + * [Browser quirks](#browser-quirks) + * [Browser Support](#browser-support) +* [iOS details](#ios-details) + * [Xcode](#xcode) + * [Bitcode](#bitcode) + * [CocoaPods](#cocoapods) + * [Common CocoaPod Installation issues](#common-cocoapod-installation-issues) + * [CocoaPod Disk Space](#cocoapod-disk-space) + * [Library not found for -lPods-Appname](#library-not-found-for--lpods-appname) + * [Library not found for -lGoogleToolboxForMac](#library-not-found-for--lgoogletoolboxformac) + * [Module FirebaseInstanceID not found](#module-firebaseinstanceid-not-found) +* [Additional Resources](#additional-resources) ## Installation Requirements -Plugin version | Cordova CLI | Cordova Android | Cordova iOS | CocoaPods ----- | ---- | ---- | ---- | ---- -2.0.0 | 7.0.0 | 6.2.1 | 4.4.0 | 1.1.1 -1.9.0 | 6.4.0 | 6.0.0 | 4.3.0 | 1.1.1 -1.8.0 | 3.6.3 | 4.0.0 | 4.1.0 | N/A +| Plugin version | Cordova CLI | Cordova Android | Cordova iOS | CocoaPods | +| -------------- | ----------- | --------------- | ----------- | --------- | +| 2.2.0 | 7.1.0 | 7.1.0 | 4.5.0 | 1.1.1 | +| 2.1.2 | 7.1.0 | 6.3.0 | 4.5.0 | 1.1.1 | +| 2.1.0 | 7.1.0 | 6.3.0 | 4.4.0 | 1.1.1 | +| 2.0.0 | 7.0.0 | 6.2.1 | 4.4.0 | 1.1.1 | +| 1.9.0 | 6.4.0 | 6.0.0 | 4.3.0 | 1.1.1 | +| 1.8.0 | 3.6.3 | 4.0.0 | 4.1.0 | N/A | To install from the command line: ``` phonegap plugin add phonegap-plugin-push ``` + or ``` @@ -90,7 +92,7 @@ By default, on iOS, the plugin will register with APNS. If you want to use FCM o ] ``` -> Note: You need to specify the SENDER_ID variable in your config.xml if you plan on installing/restoring plugins using the prepare method. The prepare method will skip installing the plugin otherwise. +> Note: You need to specify the SENDER_ID variable in your config.xml if you plan on installing/restoring plugins using the prepare method. The prepare method will skip installing the plugin otherwise. ``` @@ -102,13 +104,13 @@ By default, on iOS, the plugin will register with APNS. If you want to use FCM o As of version 2.1.0 the plugin has been switched to using pinned version of Gradle libraries. You will need to ensure that you have installed the following items through the Android SDK Manager: -- Android Support Repository version 47+ +* Android Support Repository version 47+ ![android support library](https://user-images.githubusercontent.com/353180/33042340-7ea60aaa-ce0f-11e7-99f7-4631e4c3d7be.png) For more detailed instructions on how to install the Android Support Library visit [Google's documentation](https://developer.android.com/tools/support-library/setup.html). -*Note:* if you are using an IDE to like Eclipse, Xamarin, etc. then the Android SDK installed by those tools may not be the same version as the one used by the Cordova/PhoneGap CLI while building. Please make sure your command line tooling is up to date with the software versions above. An easy way to make sure you up to date is to run the following command: +_Note:_ if you are using an IDE to like Eclipse, Xamarin, etc. then the Android SDK installed by those tools may not be the same version as the one used by the Cordova/PhoneGap CLI while building. Please make sure your command line tooling is up to date with the software versions above. An easy way to make sure you up to date is to run the following command: ``` android update sdk --no-ui --filter "extra" @@ -123,6 +125,7 @@ To add to your app: ``` phonegap plugin add --save cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name" ``` + or ``` @@ -135,23 +138,26 @@ Problems may arise when push plugin is used along plugins that implement Firebas To make the two work together, you need to migrate your GCM project from Google console to Firebase console: -1) In Firebase console - [import your existing GCM project](https://firebase.google.com/support/guides/google-android#migrate_your_console_project), don't create a new one. -2) Set your `SENDER_ID` variable to match the id of your imported Firebase project. In case of cordova, your `config.xml` would look something like this: +1. In Firebase console - [import your existing GCM project](https://firebase.google.com/support/guides/google-android#migrate_your_console_project), don't create a new one. +2. Set your `SENDER_ID` variable to match the id of your imported Firebase project. In case of cordova, your `config.xml` would look something like this: + ```xml ``` -3) In your JavaScript, when you init the PushPlugin, senderID remains the same format as before: + +3. In your JavaScript, when you init the PushPlugin, senderID remains the same format as before: + ```javascript PushNotification.init({ - android: { - senderID: 956432534015 - } + android: { + senderID: 956432534015 + } }); ``` -*Note:* No changes on the back-end side are needed: [even though recommended](https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_server_endpoints), it isn't yet required and sending messages through GCM gateway should work just fine. +_Note:_ No changes on the back-end side are needed: [even though recommended](https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_server_endpoints), it isn't yet required and sending messages through GCM gateway should work just fine. ### Common errors @@ -206,7 +212,7 @@ Then at least one other plugin you have installed is using an outdated way to de This causes gradle to fail, and you'll need to identify which plugin is causing it and request an update to the plugin author, so that it uses the proper way to declare dependencies for cordova. See [this for the reference on the cordova plugin specification](https://cordova.apache.org/docs/en/5.4.0/plugin_ref/spec.html#link-18), it'll be usefull to mention it when creating an issue or requesting that plugin to be updated. -Common plugins to suffer from this outdated dependency management are plugins related to *facebook*, *google+*, *notifications*, *crosswalk* and *google maps*. +Common plugins to suffer from this outdated dependency management are plugins related to _facebook_, _google+_, _notifications_, _crosswalk_ and _google maps_. #### More than one library with package name 'com.google.android.gms' @@ -238,7 +244,7 @@ When you run `phonegap serve` to test browser push point your browser at `http:/ ### Browser Support -Chrome 49+ +Chrome 49+ Firefox 46+ ## iOS details @@ -269,14 +275,12 @@ Required `cordova-ios` minimum version: `4.3.0` Required `CocoaPods` minimum version: `1.0.1` - To install CocoaPods, please follow the installation instructions [here](https://guides.cocoapods.org/using/getting-started). After installing CocoaPods, please run: pod setup This will clone the required CocoaPods specs-repo into your home folder at `~/.cocoapods/repos`, so it might take a while. See the [CocoaPod Disk Space](#cocoapod-disk-space) section below for more information. - Version `2.0.0` (and above) of this plugin supports [CocoaPods](https://cocoapods.org) installation of the [Firebase Cloud Messaging](https://cocoapods.org/pods/FirebaseMessaging) library. If you are installing this plugin using `npm`, and you are using version `6.1.0` or greater of the `cordova-cli`, it will automatically download the right version of this plugin for both your platform and cli. @@ -284,6 +288,7 @@ If you are installing this plugin using `npm`, and you are using version `6.1.0` If you are on a `cordova-cli` version less than `6.1.0`, you will either have to upgrade your `cordova-cli` version, or install the plugin explicitly: i.e. + ``` cordova plugin add phonegap-plugin-push@1.8.1 ``` @@ -366,7 +371,6 @@ You can now use the `resource-file` tag to deliver the image and sound files to or if you wanted to include a sound file for iOS: - ``` From 2a21a6ef0dac89b951c4832591b5fa6dd5acb857 Mon Sep 17 00:00:00 2001 From: Steve Leigh Date: Sat, 12 May 2018 03:39:09 +1000 Subject: [PATCH 22/59] Clarify Android push icon color issues (#2345) --- docs/PAYLOAD.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 5f535ebbf..026ad7c1d 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -358,9 +358,19 @@ The result will look much like this: ![2015-07-24 02 52 00](https://cloud.githubusercontent.com/assets/353180/8866899/2df00c3c-3190-11e5-8552-96201fb4424b.png) -This is because Android now uses Material design and the default icon for push will be completely white. +Note the application icon has gone from being the default, rich, multicolored cordova icon muti-colored, to plain white white. What going on here? -In order to get a better user experience, you can specify an alternate icon and background color to be shown when receiving a push notification. The code would look like this: +With Android now using Material design, push notifications are forced to be single-color only - this can be difficult to diagnose, as a lot of icons just show as a white square. + +You should design one with these guidelines in mind: + +* 96x96 pixels +* Transparent background +* White foreground + +**Note:** ny color foreground will work - any non-transparent pixels are just rendered white. + +To specify an alternate icon and background color to be shown when receiving a push notification, use the following: ```javascript const push = PushNotification.init({ From 3ec6c960565cd98cd8057705598fa97ecdd5828e Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Fri, 11 May 2018 13:40:31 -0400 Subject: [PATCH 23/59] Update PAYLOAD.md Fix mis-spelling. --- docs/PAYLOAD.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 026ad7c1d..7fdabddb2 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -368,7 +368,7 @@ You should design one with these guidelines in mind: * Transparent background * White foreground -**Note:** ny color foreground will work - any non-transparent pixels are just rendered white. +**Note:** any color foreground will work - any non-transparent pixels are just rendered white. To specify an alternate icon and background color to be shown when receiving a push notification, use the following: From cb85fbf69c2c7d64a3b0d403517e6c1c533aa0a2 Mon Sep 17 00:00:00 2001 From: KirbySSmith Date: Fri, 11 May 2018 13:55:35 -0400 Subject: [PATCH 24/59] Android channel vibration (#2353) * Fixes android channel vibration setting Allow users to change default Android channel settings on init * Update API doc with Android channel properties --- docs/API.md | 24 +++++++++++++---- .../com/adobe/phonegap/push/PushPlugin.java | 27 ++++++++++++++----- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/docs/API.md b/docs/API.md index e9ef9143b..871f27fa6 100644 --- a/docs/API.md +++ b/docs/API.md @@ -2,9 +2,9 @@ * [.init()](#pushnotificationinitoptions) * [.hasPermission()](#pushnotificationhaspermissionsuccesshandler) -* [.createChannel() - Android only](#pushnotificationcreatechannel) -* [.deleteChannel() - Android only](#pushnotificationdeletechannel) -* [.listChannels() - Android only](#pushnotificationlistchannels) +* [.createChannel() - Android only](#pushnotificationcreatechannelsuccesshandler-failurehandler-channel) +* [.deleteChannel() - Android only](#pushnotificationdeletechannelsuccesshandler-failurehandler-channelid) +* [.listChannels() - Android only](#pushnotificationlistchannelssuccesshandler) * [push.on()](#pushonevent-callback) * [push.on('registration')](#pushonregistration-callback) * [push.on('notification')](#pushonnotification-callback) @@ -203,12 +203,26 @@ PushNotification.createChannel( { id: 'testchannel1', description: 'My first test channel', - importance: 3 + importance: 3, + vibration: true } ); ``` -The above will create a channel for your app. You'll need to provide the `id`, `description` and `importance` properties. The importance property goes from 1 = Lowest, 2 = Low, 3 = Normal, 4 = High and 5 = Highest. +The above will create a channel for your app. You'll need to provide the `id`, `description` and `importance` properties. + +A default channel with the id "PushPluginChannel" is created automatically. To make changes to the default channel's settings, create a channel with the id "PushPluginChannel" before calling the PushNotification.init function. + +### Channel properties + +| Property | Type | Description | +| -------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | `String` | The id of the channel. Must be unique per package. The value may be truncated if it is too long. | +| `description` | `String` | The user visible name of the channel. The recommended maximum length is 40 characters; the value may be truncated if it is too long. | +| `importance` | `Int` | The importance of the channel. This controls how interruptive notifications posted to this channel are. The importance property goes from 1 = Lowest, 2 = Low, 3 = Normal, 4 = High and 5 = Highest. | +| `sound` | `String` | The name of the sound file to be played upon receipt of the notification in this channel. Cannot be changed after channel is created. | +| `vibration` | `Boolean` or `Array` | Boolean sets whether notification posted to this channel should vibrate. Array sets custom vibration pattern. Example - vibration: `[2000, 1000, 500, 500]`. Cannot be changed after channel is created. | +| `visibility` | `Int` | Sets whether notifications posted to this channel appear on the lockscreen or not, and if so, whether they appear in a redacted form. 0 = Private, 1 = Public, -1 = Secret. | ## PushNotification.deleteChannel(successHandler, failureHandler, channelId) diff --git a/src/android/com/adobe/phonegap/push/PushPlugin.java b/src/android/com/adobe/phonegap/push/PushPlugin.java index a70a64de4..dc81f1c5b 100644 --- a/src/android/com/adobe/phonegap/push/PushPlugin.java +++ b/src/android/com/adobe/phonegap/push/PushPlugin.java @@ -120,8 +120,19 @@ private void createChannel(JSONObject channel) throws JSONException { mChannel.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI, audioAttributes); } - //JSONArray pattern = channel.optJSONArray(CHANNEL_VIBRATION); - //mChannel.setVibrationPattern(); + // If vibration settings is an array set vibration pattern, else set enable vibration. + JSONArray pattern = channel.optJSONArray(CHANNEL_VIBRATION); + if (pattern != null) { + int patternLength = pattern.length(); + long[] patternArray = new long[patternLength]; + for (int i = 0; i < patternLength; i++) { + patternArray[i] = pattern.optLong(i); + } + mChannel.setVibrationPattern(patternArray); + } else { + boolean vibrate = channel.optBoolean(CHANNEL_VIBRATION, true); + mChannel.enableVibration(vibrate); + } notificationManager.createNotificationChannel(mChannel); } @@ -142,11 +153,13 @@ private void createDefaultNotificationChannelIfNeeded(JSONObject options) { return; } } - NotificationChannel mChannel = new NotificationChannel(DEFAULT_CHANNEL_ID, "PhoneGap PushPlugin", - NotificationManager.IMPORTANCE_DEFAULT); - mChannel.enableVibration(options.optBoolean(VIBRATE, true)); - mChannel.setShowBadge(true); - notificationManager.createNotificationChannel(mChannel); + try { + options.put(CHANNEL_ID, DEFAULT_CHANNEL_ID); + options.putOpt(CHANNEL_DESCRIPTION, "PhoneGap PushPlugin"); + createChannel(options); + } catch (JSONException e) { + Log.e(LOG_TAG, "execute: Got JSON Exception " + e.getMessage()); + } } } From 7d8d6338a4005b2672eb170e505812aa768c0ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frederico=20Galv=C3=A3o?= Date: Fri, 11 May 2018 22:20:48 -0300 Subject: [PATCH 25/59] :memo: Fixing typos, links to official iconography --- docs/PAYLOAD.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 7fdabddb2..cb0d9254a 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -358,9 +358,9 @@ The result will look much like this: ![2015-07-24 02 52 00](https://cloud.githubusercontent.com/assets/353180/8866899/2df00c3c-3190-11e5-8552-96201fb4424b.png) -Note the application icon has gone from being the default, rich, multicolored cordova icon muti-colored, to plain white white. What going on here? +Note that the notification icon has gone from the default, rich, multicolored cordova icon, to a white-on-gray one. What's going on here? -With Android now using Material design, push notifications are forced to be single-color only - this can be difficult to diagnose, as a lot of icons just show as a white square. +With Android now greatly using Material design since 5.0 (Lollipop), push notification icons are forced to be monochromatic - this can be difficult to diagnose, as a lot of icons just show as a white square if not properly designed. You should design one with these guidelines in mind: @@ -368,6 +368,10 @@ You should design one with these guidelines in mind: * Transparent background * White foreground +For more details, please read: +- https://material.io/tools/icons +- https://material.io/design/iconography/ + **Note:** any color foreground will work - any non-transparent pixels are just rendered white. To specify an alternate icon and background color to be shown when receiving a push notification, use the following: From 9fdeff1b878a18329a455a1b4c57081acd00a6f9 Mon Sep 17 00:00:00 2001 From: jcesarmobile Date: Fri, 18 May 2018 17:46:52 +0200 Subject: [PATCH 26/59] Remove the setting applicationId code (#2367) --- push.gradle | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/push.gradle b/push.gradle index a67197093..9e84891d9 100644 --- a/push.gradle +++ b/push.gradle @@ -1,19 +1,5 @@ -import java.util.regex.Pattern - -def doExtractStringFromManifest(name) { - def manifestFile = file("AndroidManifest.xml") - if (!manifestFile.exists()) { - manifestFile = file("src/main/AndroidManifest.xml") - } - def pattern = Pattern.compile(name + "=\"(.*?)\"") - def matcher = pattern.matcher(manifestFile.getText()) - matcher.find() - return matcher.group(1) -} - android { defaultConfig { multiDexEnabled true - applicationId = doExtractStringFromManifest("package") } } From 7390a82359dd0073e7b1852feac122a1d90e3a57 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 22 May 2018 19:30:54 -0400 Subject: [PATCH 27/59] :heavy_plus_sign: adding dependency to phonegap-plugin-multidex --- plugin.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugin.xml b/plugin.xml index 54dcc0dbd..170b5dbc1 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,5 +1,9 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -43,8 +47,8 @@ - + @@ -94,4 +98,4 @@ - \ No newline at end of file + From 866f9505a03260589cb4a43e4ff152ef27b2acb5 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 22 May 2018 19:33:53 -0400 Subject: [PATCH 28/59] :bookmark: Bumping plugin version to 2.2.3 --- plugin.xml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/plugin.xml b/plugin.xml index 170b5dbc1..36d9c6fd2 100755 --- a/plugin.xml +++ b/plugin.xml @@ -1,9 +1,5 @@ - + PushPlugin This plugin allows your application to receive push notifications on Android, iOS and Windows devices. Android uses Firebase Cloud Messaging. iOS uses Apple APNS Notifications. Windows uses Microsoft WNS Notifications. MIT @@ -98,4 +94,4 @@ - + \ No newline at end of file From d5f3e70eda2420f3e7e6f117a4dd2c7a990cf6b0 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 22 May 2018 19:35:11 -0400 Subject: [PATCH 29/59] 2.2.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34d18d8c9..a77d3d9d8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "phonegap-plugin-push", "description": "Register and receive push notifications.", "types": "./types/index.d.ts", - "version": "2.2.2", + "version": "2.2.3", "homepage": "http://github.com/phonegap/phonegap-plugin-push#readme", "repository": { "type": "git", From 368450a5ed6b03166ab62e999a6437a407ef3e67 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 22 May 2018 22:30:55 -0400 Subject: [PATCH 30/59] :memo: Issue #2381: Plugin conflict error --- docs/INSTALLATION.md | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 3155aae2c..7377b5219 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -134,29 +134,19 @@ cordova plugin add --save cordova-plugin-facebook4 --variable APP_ID="App ID" -- ### Co-existing with plugins that use Firebase -Problems may arise when push plugin is used along plugins that implement Firebase functionality (cordova-plugin-firebase-analytics, for example). Firebase uses `@string/google_app_id`, as does the push plugin, though the value format differs, causing problems like this: `Invalid google_app_id. Firebase Analytics disabled`. +Problems may arise when push plugin is used along plugins that implement Firebase functionality (cordova-plugin-firebase-analytics, for example). Both plugins include a version of the FCM libraries. To make the two work together, you need to migrate your GCM project from Google console to Firebase console: 1. In Firebase console - [import your existing GCM project](https://firebase.google.com/support/guides/google-android#migrate_your_console_project), don't create a new one. -2. Set your `SENDER_ID` variable to match the id of your imported Firebase project. In case of cordova, your `config.xml` would look something like this: +2. Set your `FCM_VERSION` variable to match the version used in the other plugin. In case of cordova, your `config.xml` would look something like this: ```xml - - + + ``` -3. In your JavaScript, when you init the PushPlugin, senderID remains the same format as before: - -```javascript -PushNotification.init({ - android: { - senderID: 956432534015 - } -}); -``` - _Note:_ No changes on the back-end side are needed: [even though recommended](https://developers.google.com/cloud-messaging/android/android-migrate-fcm#update_server_endpoints), it isn't yet required and sending messages through GCM gateway should work just fine. ### Common errors From 1383dd9649d9eee7cbaa4f734fbe001b9fdc509f Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Fri, 25 May 2018 07:02:34 -0400 Subject: [PATCH 31/59] =?UTF-8?q?=F0=9F=93=9D=20Issue=20#2388:=20Is=20it?= =?UTF-8?q?=20possible=20to=20update=20PHONEGAP=5FBUILD.md=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/PHONEGAP_BUILD.md | 103 ++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 52 deletions(-) diff --git a/docs/PHONEGAP_BUILD.md b/docs/PHONEGAP_BUILD.md index 7f460738c..11ba6c9e7 100644 --- a/docs/PHONEGAP_BUILD.md +++ b/docs/PHONEGAP_BUILD.md @@ -1,15 +1,13 @@ # Cloud Build Services -- [PhoneGap Build Support](#phonegap-build-support) - - [Including the plugin](#including-the-plugin) - - [Adding Resources](#adding-resources) -- [IntelXDK Support](#intelxdk-support) -- [Ionic Cloud Build](#ionic-cloud-build) +* [PhoneGap Build Support](#phonegap-build-support) + * [Including the plugin](#including-the-plugin) + * [Adding Resources](#adding-resources) +* [IntelXDK Support](#intelxdk-support) +* [Ionic Cloud Build](#ionic-cloud-build) ## PhoneGap Build Support -> PhoneGap Build now support version 1.9.0 of the plugin. - ### Including the plugin Including this plugin in a project that is built by PhoneGap Build is as easy as adding (replacing `123456789` with your own, that is): @@ -32,7 +30,7 @@ Note: version 1.3.0 of this plugin begins to use Gradle to install the Android S ### Adding resources -Because PhoneGap Build does not support running hooks if you want to include custom image or sounds you will need to use a *beta* feature to include these files. +Because PhoneGap Build does not support running hooks if you want to include custom image or sounds you will need to use a _beta_ feature to include these files. #### Android @@ -48,48 +46,48 @@ Existing directories will be merged, but at this time any individual files you i ## IntelXDK Support -1. Do pre-requisite setup on [the iOS Provisioning Portal](https://developer.apple.com/account/ios/identifier/bundle). Refer to [this guide](https://www.raywenderlich.com/123862/push-notifications-tutorial) or Apple docs for detailed steps. -a. make a new App ID (you'll need to set this in Intel XDK config later) -b. enable push notifications -c. iOS Distribution cert: create (if needed), download and install (if needed), export as a .p12 (set and remember the password as you'll need this to import into Intel XDK later) -**NOTE**: Intel XDK does not support Development certs, so you MUST use your Distribution cert. -d. Make an AdHoc Provisioning Profile using your App ID from (1a) and your cert from (1c). Make sure your test device is enabled. Download and save with a name you will recognize. (you'll need to add this to your Intel XDK project later) -e. make a push cert, download it, install it, export it to .p12, convert it to .pem (this is for the push server that will send the notification - you'll need this later to test your Intel XDK app) - -2. In Intel XDK, make a new Cordova CLI 5.4.1 project using the HTML5+Cordova Blank Template, then replace the contents of www with [the contents of www from the PhoneGap Push Template](https://github.com/phonegap/phonegap-template-push/tree/master/template_src/www). - -3. Delete www/config.xml (optional? Intel XDK does not use config.xml) - -4. Intel XDK Project Settings -a. set the iOS App ID to match the App ID from (1a) -b. (if needed) import your .p12 from (1c) - Account Settings->Developer Certificates->iOS, then select it as the Developer Certificate for the project -c. Select "adhoc" for Provisioning Profile -d. copy your provisioning profile from (1d) into www/, then click "Ad hoc Provisioning Profile" and select the profile -e. Add the latest version of phonegap-plugin-push as a "Third-Party Plugin" (at time of testing this was 1.6.4) -f. **After the plugin is added, you will need to edit plugins/phonegap-plugin-push/plugin.xml**. Intel XDK 3357 does not support plugins with gradle references, so the gradle reference must be commented out (this will prevent this version of the plugin from working for Android but is needed for the iOS build to succeed): -`` -A future version of Intel XDK will support gradle references. - -5. XDK Build Tab -a. Enable iOS build (click the checkmark) -b. Unlock your iOS certificate (click the lock and enter the password from (1c)) -c. click Start Builds -d. once the build completes, download and install the app - -6. connect test device by USB and open XCode Devices window (probably could also use Safari Web Inspector + Cordova Console plugin) - start the app and a log message should be written into the console that looks like "Push Plugin register success: \" - -7. exit the app (close with home button then swipe it off the multitask view) - -8. The angle brackets and everything between (from (5)) is the device token - copy it into a text file - -9. Add the device token to your server and send a push notification -a. I used [phonegap-plugin-push/example/server/pushAPNS.rb](https://github.com/phonegap/phonegap-plugin-push/blob/master/example/server/pushAPNS.rb) for this -b. APNS.host = 'gateway.push.apple.com' -c. APNS.pem = 'PGPush926Prod.pem' #path to your pem file from (1e) -d. device_token = '\' #the device token from (7) -e. edit the alert message and badge number -f. you probably need to install the required gem (`gem install pushmeup`) -g. send the notification (`ruby pushAPNS.rb`) +1. Do pre-requisite setup on [the iOS Provisioning Portal](https://developer.apple.com/account/ios/identifier/bundle). Refer to [this guide](https://www.raywenderlich.com/123862/push-notifications-tutorial) or Apple docs for detailed steps. + a. make a new App ID (you'll need to set this in Intel XDK config later) + b. enable push notifications + c. iOS Distribution cert: create (if needed), download and install (if needed), export as a .p12 (set and remember the password as you'll need this to import into Intel XDK later) + **NOTE**: Intel XDK does not support Development certs, so you MUST use your Distribution cert. + d. Make an AdHoc Provisioning Profile using your App ID from (1a) and your cert from (1c). Make sure your test device is enabled. Download and save with a name you will recognize. (you'll need to add this to your Intel XDK project later) + e. make a push cert, download it, install it, export it to .p12, convert it to .pem (this is for the push server that will send the notification - you'll need this later to test your Intel XDK app) + +2. In Intel XDK, make a new Cordova CLI 5.4.1 project using the HTML5+Cordova Blank Template, then replace the contents of www with [the contents of www from the PhoneGap Push Template](https://github.com/phonegap/phonegap-template-push/tree/master/template_src/www). + +3. Delete www/config.xml (optional? Intel XDK does not use config.xml) + +4. Intel XDK Project Settings + a. set the iOS App ID to match the App ID from (1a) + b. (if needed) import your .p12 from (1c) - Account Settings->Developer Certificates->iOS, then select it as the Developer Certificate for the project + c. Select "adhoc" for Provisioning Profile + d. copy your provisioning profile from (1d) into www/, then click "Ad hoc Provisioning Profile" and select the profile + e. Add the latest version of phonegap-plugin-push as a "Third-Party Plugin" (at time of testing this was 1.6.4) + f. **After the plugin is added, you will need to edit plugins/phonegap-plugin-push/plugin.xml**. Intel XDK 3357 does not support plugins with gradle references, so the gradle reference must be commented out (this will prevent this version of the plugin from working for Android but is needed for the iOS build to succeed): + `` + A future version of Intel XDK will support gradle references. + +5. XDK Build Tab + a. Enable iOS build (click the checkmark) + b. Unlock your iOS certificate (click the lock and enter the password from (1c)) + c. click Start Builds + d. once the build completes, download and install the app + +6. connect test device by USB and open XCode Devices window (probably could also use Safari Web Inspector + Cordova Console plugin) - start the app and a log message should be written into the console that looks like "Push Plugin register success: \" + +7. exit the app (close with home button then swipe it off the multitask view) + +8. The angle brackets and everything between (from (5)) is the device token - copy it into a text file + +9. Add the device token to your server and send a push notification + a. I used [phonegap-plugin-push/example/server/pushAPNS.rb](https://github.com/phonegap/phonegap-plugin-push/blob/master/example/server/pushAPNS.rb) for this + b. APNS.host = 'gateway.push.apple.com' + c. APNS.pem = 'PGPush926Prod.pem' #path to your pem file from (1e) + d. device_token = '\' #the device token from (7) + e. edit the alert message and badge number + f. you probably need to install the required gem (`gem install pushmeup`) + g. send the notification (`ruby pushAPNS.rb`) 10. See notification on device! @@ -97,14 +95,15 @@ g. send the notification (`ruby pushAPNS.rb`) Users have reported issues with Ionic Cloud Build. Apparently there are some differences in the way variables are handled. If your app has an issue where the `PushNotification` object can't be found try the following. -1. Remove the inclusion of `phonegap-plugin-push` from config.xml. That is delete lines that look like this: +1. Remove the inclusion of `phonegap-plugin-push` from config.xml. That is delete lines that look like this: ``` ``` -2. Add the following lines into `package.json` in the `cordovaPlugins` array. + +2. Add the following lines into `package.json` in the `cordovaPlugins` array. ``` { From a806b03f50e31914a41d504a32f477aad626cbb1 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 28 May 2018 09:41:43 -0400 Subject: [PATCH 32/59] :fire: Remove push.gradle file --- push.gradle | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 push.gradle diff --git a/push.gradle b/push.gradle deleted file mode 100644 index 9e84891d9..000000000 --- a/push.gradle +++ /dev/null @@ -1,5 +0,0 @@ -android { - defaultConfig { - multiDexEnabled true - } -} From 80b8453976574e036c271fc6c9e143a1012527d7 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Sat, 2 Jun 2018 20:20:12 -0400 Subject: [PATCH 33/59] =?UTF-8?q?=F0=9F=94=A7=20Add=20lockbot=20to=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/lock.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/lock.yml diff --git a/.github/lock.yml b/.github/lock.yml new file mode 100644 index 000000000..ff10dccfe --- /dev/null +++ b/.github/lock.yml @@ -0,0 +1,25 @@ +# Configuration for lock-threads - https://github.com/dessant/lock-threads + +# Number of days of inactivity before a closed issue or pull request is locked +daysUntilLock: 30 + +# Issues and pull requests with these labels will not be locked. Set to `[]` to disable +exemptLabels: [] + +# Label to add before locking, such as `outdated`. Set to `false` to disable +lockLabel: false + +# Comment to post before locking. Set to `false` to disable +lockComment: This thread has been automatically locked. + +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings just for `issues` or `pulls` +# issues: +# exemptLabels: +# - help-wanted +# lockLabel: outdated + +# pulls: +# daysUntilLock: 30 From 1263fd25e279cefef9132636f2a0647731e153bc Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Sat, 2 Jun 2018 20:27:49 -0400 Subject: [PATCH 34/59] =?UTF-8?q?=F0=9F=94=A7=20Adding=20stale=20issue=20b?= =?UTF-8?q?ot=20config=20to=20repo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/stale.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000..e46056fae --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - bug + - enhancement + - feature +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false From 3bc6c4d3720e9b27b64c988f51aa9cc5fa5b03dc Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 4 Jun 2018 11:42:10 -0400 Subject: [PATCH 35/59] :wrench: Add retest label to prevent issue from becoming stale --- .github/stale.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/stale.yml b/.github/stale.yml index e46056fae..945547a00 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -7,6 +7,7 @@ exemptLabels: - bug - enhancement - feature + - retest # Label to use when marking an issue as stale staleLabel: wontfix # Comment to post when marking an issue as stale. Set to `false` to disable From 62168aeba394a6292b68415977ff26441025c8c1 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 4 Jun 2018 12:04:41 -0400 Subject: [PATCH 36/59] :memo: Issue #2095: No notification received on Oppo,Mi --- docs/PAYLOAD.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index cb0d9254a..b40fbfa49 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -19,7 +19,7 @@ * [Background Notifications](#background-notifications) * [Use of content_available: true](#use-of-content_available-true) * [Caching](#caching) - * [Huawei and Xiaomi Phones](#huawei-and-xiaomi-phones) + * [Chinese Android Phones](#chinese-android-phones) * [Application force closed](#application-force-closed) * [Visibility](#visibility-of-notifications) * [Ongoing Notifications](#ongoing-notifications) @@ -358,7 +358,7 @@ The result will look much like this: ![2015-07-24 02 52 00](https://cloud.githubusercontent.com/assets/353180/8866899/2df00c3c-3190-11e5-8552-96201fb4424b.png) -Note that the notification icon has gone from the default, rich, multicolored cordova icon, to a white-on-gray one. What's going on here? +Note that the notification icon has gone from the default, rich, multicolored cordova icon, to a white-on-gray one. What's going on here? With Android now greatly using Material design since 5.0 (Lollipop), push notification icons are forced to be monochromatic - this can be difficult to diagnose, as a lot of icons just show as a white square if not properly designed. @@ -369,8 +369,9 @@ You should design one with these guidelines in mind: * White foreground For more details, please read: -- https://material.io/tools/icons -- https://material.io/design/iconography/ + +* https://material.io/tools/icons +* https://material.io/design/iconography/ **Note:** any color foreground will work - any non-transparent pixels are just rendered white. @@ -1419,7 +1420,9 @@ Instead move `content_available: true` into the `data` object of the payload. Th } ``` -### Huawei and Xiaomi Phones +### Chinese Android Phones + +> Huawei, Oppo and Xiaomi These phones have a particular quirk that when the app is force closed that you will no longer be able to receive notifications until the app is restarted. In order for you to receive background notifications: @@ -1427,6 +1430,8 @@ These phones have a particular quirk that when the app is force closed that you * On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. * On your Asus make sure your phone has the "Auto-start" property enabled for your app. +More explicit instructions can be read on [Forbes website](https://www.forbes.com/sites/bensin/2017/07/28/how-to-fix-push-notifications-on-oppo-phones/#72a523371735). + ### Application force closed In order to take advantage of this feature, you will need to be using cordova-android 6.0.0 or higher. In order to check if the change has been properly applied look at `platforms/android/**/MainActivity.java`. You should see an `onCreate` method that looks like this: From e528b1cc3e2ef730c6e675c0407670c02209e845 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 4 Jun 2018 12:10:48 -0400 Subject: [PATCH 37/59] :wrench: add docs label to stale exempt list --- .github/stale.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/stale.yml b/.github/stale.yml index 945547a00..11aee5a1d 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -5,6 +5,7 @@ daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: - bug + - docs - enhancement - feature - retest From d2367cf603b736304b207d593e0784ca5d2489ad Mon Sep 17 00:00:00 2001 From: Johny Jugianto Date: Tue, 5 Jun 2018 03:47:02 +0700 Subject: [PATCH 38/59] AWS Pinpoint Enhancement (#2398) --- src/android/com/adobe/phonegap/push/FCMService.java | 4 +++- src/android/com/adobe/phonegap/push/PushConstants.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/android/com/adobe/phonegap/push/FCMService.java b/src/android/com/adobe/phonegap/push/FCMService.java index 18f147241..48c01bbdb 100644 --- a/src/android/com/adobe/phonegap/push/FCMService.java +++ b/src/android/com/adobe/phonegap/push/FCMService.java @@ -195,7 +195,7 @@ private String localizeKey(Context context, String key, String value) { */ private String normalizeKey(String key, String messageKey, String titleKey) { if (key.equals(BODY) || key.equals(ALERT) || key.equals(MP_MESSAGE) || key.equals(GCM_NOTIFICATION_BODY) - || key.equals(TWILIO_BODY) || key.equals(messageKey)) { + || key.equals(TWILIO_BODY) || key.equals(messageKey) || key.equals(AWS_PINPOINT_BODY)) { return MESSAGE; } else if (key.equals(TWILIO_TITLE) || key.equals(SUBJECT) || key.equals(titleKey)) { return TITLE; @@ -210,6 +210,8 @@ private String normalizeKey(String key, String messageKey, String titleKey) { } else if (key.startsWith(UA_PREFIX)) { key = key.substring(UA_PREFIX.length() + 1, key.length()); return key.toLowerCase(); + } else if (key.startsWith(AWS_PINPOINT_PREFIX)) { + return key.substring(AWS_PINPOINT_PREFIX.length() + 1, key.length()); } else { return key; } diff --git a/src/android/com/adobe/phonegap/push/PushConstants.java b/src/android/com/adobe/phonegap/push/PushConstants.java index 47f254295..9a20a61f2 100644 --- a/src/android/com/adobe/phonegap/push/PushConstants.java +++ b/src/android/com/adobe/phonegap/push/PushConstants.java @@ -71,6 +71,8 @@ public interface PushConstants { public static final String TWILIO_BODY = "twi_body"; public static final String TWILIO_TITLE = "twi_title"; public static final String TWILIO_SOUND = "twi_sound"; + public static final String AWS_PINPOINT_BODY = "pinpoint.notification.body"; + public static final String AWS_PINPOINT_PREFIX = "pinpoint.notification"; public static final String MP_MESSAGE = "mp_message"; public static final String START_IN_BACKGROUND = "cdvStartInBackground"; public static final String FORCE_START = "force-start"; From 4b1671c12b5c73c5c3008485036a9e513db040f3 Mon Sep 17 00:00:00 2001 From: Miquel Date: Wed, 6 Jun 2018 15:32:41 +0200 Subject: [PATCH 39/59] Update API.md (#2409) --- docs/API.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/API.md b/docs/API.md index 871f27fa6..0807e73f5 100644 --- a/docs/API.md +++ b/docs/API.md @@ -355,6 +355,8 @@ push.on('notification', data => { }); ``` +Android quirk: Please note that some payloads may cause this event not to be always fired: [data vs notification payloads](https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#notification-vs-data-payloads) + ## push.on('error', callback) The event `error` will trigger when an internal error occurs and the cache is aborted. From bd135d9a0f7e1779e41389603e20d7898ebf7b20 Mon Sep 17 00:00:00 2001 From: Johny Jugianto Date: Thu, 7 Jun 2018 19:41:51 +0700 Subject: [PATCH 40/59] AWS Pinpoint Enhancement - picture message (#2411) * AWS Pinpoint Enhancement * AWS Pinpoin Enhancement - picture message --- .../com/adobe/phonegap/push/FCMService.java | 15 +++++++++------ .../com/adobe/phonegap/push/PushConstants.java | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/android/com/adobe/phonegap/push/FCMService.java b/src/android/com/adobe/phonegap/push/FCMService.java index 48c01bbdb..af9ebb028 100644 --- a/src/android/com/adobe/phonegap/push/FCMService.java +++ b/src/android/com/adobe/phonegap/push/FCMService.java @@ -193,7 +193,7 @@ private String localizeKey(Context context, String key, String value) { /* * Replace alternate keys with our canonical value */ - private String normalizeKey(String key, String messageKey, String titleKey) { + private String normalizeKey(String key, String messageKey, String titleKey, Bundle newExtras) { if (key.equals(BODY) || key.equals(ALERT) || key.equals(MP_MESSAGE) || key.equals(GCM_NOTIFICATION_BODY) || key.equals(TWILIO_BODY) || key.equals(messageKey) || key.equals(AWS_PINPOINT_BODY)) { return MESSAGE; @@ -203,6 +203,9 @@ private String normalizeKey(String key, String messageKey, String titleKey) { return COUNT; } else if (key.equals(SOUNDNAME) || key.equals(TWILIO_SOUND)) { return SOUND; + } else if (key.equals(AWS_PINPOINT_PICTURE)) { + newExtras.putString(STYLE, STYLE_PICTURE); + return PICTURE; } else if (key.startsWith(GCM_NOTIFICATION)) { return key.substring(GCM_NOTIFICATION.length() + 1, key.length()); } else if (key.startsWith(GCM_N)) { @@ -249,13 +252,13 @@ private Bundle normalizeExtras(Context context, Bundle extras, String messageKey Log.d(LOG_TAG, "key = data/" + jsonKey); String value = data.getString(jsonKey); - jsonKey = normalizeKey(jsonKey, messageKey, titleKey); + jsonKey = normalizeKey(jsonKey, messageKey, titleKey, newExtras); value = localizeKey(context, jsonKey, value); newExtras.putString(jsonKey, value); } } else if (data.has(LOC_KEY) || data.has(LOC_DATA)) { - String newKey = normalizeKey(key, messageKey, titleKey); + String newKey = normalizeKey(key, messageKey, titleKey, newExtras); Log.d(LOG_TAG, "replace key " + key + " with " + newKey); replaceKey(context, key, newKey, extras, newExtras); } @@ -263,7 +266,7 @@ private Bundle normalizeExtras(Context context, Bundle extras, String messageKey Log.e(LOG_TAG, "normalizeExtras: JSON exception"); } } else { - String newKey = normalizeKey(key, messageKey, titleKey); + String newKey = normalizeKey(key, messageKey, titleKey, newExtras); Log.d(LOG_TAG, "replace key " + key + " with " + newKey); replaceKey(context, key, newKey, extras, newExtras); } @@ -274,7 +277,7 @@ private Bundle normalizeExtras(Context context, Bundle extras, String messageKey String notifkey = iterator.next(); Log.d(LOG_TAG, "notifkey = " + notifkey); - String newKey = normalizeKey(notifkey, messageKey, titleKey); + String newKey = normalizeKey(notifkey, messageKey, titleKey, newExtras); Log.d(LOG_TAG, "replace key " + notifkey + " with " + newKey); String valueData = value.getString(notifkey); @@ -289,7 +292,7 @@ private Bundle normalizeExtras(Context context, Bundle extras, String messageKey // with the other "message" key (holding the body of the payload) // See issue #1663 } else { - String newKey = normalizeKey(key, messageKey, titleKey); + String newKey = normalizeKey(key, messageKey, titleKey, newExtras); Log.d(LOG_TAG, "replace key " + key + " with " + newKey); replaceKey(context, key, newKey, extras, newExtras); } diff --git a/src/android/com/adobe/phonegap/push/PushConstants.java b/src/android/com/adobe/phonegap/push/PushConstants.java index 9a20a61f2..02f885e93 100644 --- a/src/android/com/adobe/phonegap/push/PushConstants.java +++ b/src/android/com/adobe/phonegap/push/PushConstants.java @@ -72,6 +72,7 @@ public interface PushConstants { public static final String TWILIO_TITLE = "twi_title"; public static final String TWILIO_SOUND = "twi_sound"; public static final String AWS_PINPOINT_BODY = "pinpoint.notification.body"; + public static final String AWS_PINPOINT_PICTURE = "pinpoint.notification.imageUrl"; public static final String AWS_PINPOINT_PREFIX = "pinpoint.notification"; public static final String MP_MESSAGE = "mp_message"; public static final String START_IN_BACKGROUND = "cdvStartInBackground"; From a70a118dcbc6d8e860cf79890e2ab84bcdf141ba Mon Sep 17 00:00:00 2001 From: merrygobyebye Date: Thu, 7 Jun 2018 06:08:53 -0700 Subject: [PATCH 41/59] Issue #2266:Update to UNUserNotification API of iOS 10+ (#2363) * :apple: * Issue #2266 (https://github.com/phonegap/phonegap-plugin-push/issues/2266): Update to UNUserNotification API of iOS 10+ * :apple: * Issue #2266: Call requestAuthorizationWithOptions and registerForRemoteNotifications when necessary --- src/ios/AppDelegate+notification.h | 7 +- src/ios/AppDelegate+notification.m | 185 +++++++-------- src/ios/PushPlugin.h | 3 +- src/ios/PushPlugin.m | 363 ++++++++++++++++------------- 4 files changed, 302 insertions(+), 256 deletions(-) diff --git a/src/ios/AppDelegate+notification.h b/src/ios/AppDelegate+notification.h index 9970762b0..9479b1839 100644 --- a/src/ios/AppDelegate+notification.h +++ b/src/ios/AppDelegate+notification.h @@ -7,13 +7,16 @@ // #import "AppDelegate.h" +@import UserNotifications; -@interface AppDelegate (notification) +extern NSString *const pushPluginApplicationDidBecomeActiveNotification; + +@interface AppDelegate (notification) - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken; - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error; - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:( void (^)(UIBackgroundFetchResult))completionHandler; - (void)pushPluginOnApplicationDidBecomeActive:(UIApplication *)application; -- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler; +- (void)checkUserHasRemoteNotificationsEnabledWithCompletionHandler:(nonnull void (^)(BOOL))completionHandler; - (id) getCommandInstance:(NSString*)className; @property (nonatomic, retain) NSDictionary *launchNotification; diff --git a/src/ios/AppDelegate+notification.m b/src/ios/AppDelegate+notification.m index fc18dd79d..646ca3cd1 100644 --- a/src/ios/AppDelegate+notification.m +++ b/src/ios/AppDelegate+notification.m @@ -12,6 +12,8 @@ static char launchNotificationKey; static char coldstartKey; +NSString *const pushPluginApplicationDidBecomeActiveNotification = @"pushPluginApplicationDidBecomeActiveNotification"; + @implementation AppDelegate (notification) @@ -53,10 +55,9 @@ + (void)load - (AppDelegate *)pushPluginSwizzledInit { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(createNotificationChecker:) - name:UIApplicationDidFinishLaunchingNotification - object:nil]; + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + center.delegate = self; + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(pushPluginOnApplicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification @@ -67,25 +68,6 @@ - (AppDelegate *)pushPluginSwizzledInit return [self pushPluginSwizzledInit]; } -// This code will be called immediately after application:didFinishLaunchingWithOptions:. We need -// to process notifications in cold-start situations -- (void)createNotificationChecker:(NSNotification *)notification -{ - NSLog(@"createNotificationChecker"); - if (notification) - { - NSDictionary *launchOptions = [notification userInfo]; - if (launchOptions) { - NSLog(@"coldstart"); - self.launchNotification = [launchOptions objectForKey: @"UIApplicationLaunchOptionsRemoteNotificationKey"]; - self.coldstart = [NSNumber numberWithBool:YES]; - } else { - NSLog(@"not coldstart"); - self.coldstart = [NSNumber numberWithBool:NO]; - } - } -} - - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; [pushHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; @@ -96,29 +78,12 @@ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotif [pushHandler didFailToRegisterForRemoteNotificationsWithError:error]; } -- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { - NSLog(@"clicked on the shade"); - PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; - pushHandler.notificationMessage = userInfo; - pushHandler.isInline = NO; - [pushHandler notificationReceived]; -} - - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"didReceiveNotification with fetchCompletionHandler"); - // app is in the foreground so call notification callback - if (application.applicationState == UIApplicationStateActive) { - NSLog(@"app active"); - PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; - pushHandler.notificationMessage = userInfo; - pushHandler.isInline = YES; - [pushHandler notificationReceived]; - - completionHandler(UIBackgroundFetchResultNewData); - } - // app is in background or in stand by - else { + // app is in the background or inactive, so only call notification callback if this is a silent push + if (application.applicationState != UIApplicationStateActive) { + NSLog(@"app in-active"); // do some convoluted logic to find out if this should be a silent push. @@ -161,22 +126,29 @@ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(N NSLog(@"just put it in the shade"); //save it for later self.launchNotification = userInfo; - - completionHandler(UIBackgroundFetchResultNewData); } + + completionHandler(UIBackgroundFetchResultNewData); + } else { + completionHandler(UIBackgroundFetchResultNoData); } } -- (BOOL)userHasRemoteNotificationsEnabled { - UIApplication *application = [UIApplication sharedApplication]; - if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) { - return application.currentUserNotificationSettings.types != UIUserNotificationTypeNone; - } else { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - return application.enabledRemoteNotificationTypes != UIRemoteNotificationTypeNone; -#pragma GCC diagnostic pop - } +- (void)checkUserHasRemoteNotificationsEnabledWithCompletionHandler:(nonnull void (^)(BOOL))completionHandler +{ + [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { + + switch (settings.authorizationStatus) + { + case UNAuthorizationStatusDenied: + case UNAuthorizationStatusNotDetermined: + completionHandler(NO); + break; + case UNAuthorizationStatusAuthorized: + completionHandler(YES); + break; + } + }]; } - (void)pushPluginOnApplicationDidBecomeActive:(NSNotification *)notification { @@ -202,48 +174,79 @@ - (void)pushPluginOnApplicationDidBecomeActive:(NSNotification *)notification { self.coldstart = [NSNumber numberWithBool:NO]; [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO]; } + + [[NSNotificationCenter defaultCenter] postNotificationName:pushPluginApplicationDidBecomeActiveNotification object:nil]; } +- (void)userNotificationCenter:(UNUserNotificationCenter *)center + willPresentNotification:(UNNotification *)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler +{ + NSLog( @"NotificationCenter Handle push from foreground" ); + // custom code to handle push while app is in the foreground + PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; + pushHandler.notificationMessage = notification.request.content.userInfo; + pushHandler.isInline = YES; + [pushHandler notificationReceived]; + + completionHandler(UNNotificationPresentationOptionNone); +} -- (void)application:(UIApplication *) application handleActionWithIdentifier: (NSString *) identifier -forRemoteNotification: (NSDictionary *) notification completionHandler: (void (^)()) completionHandler { - - NSLog(@"Push Plugin handleActionWithIdentifier %@", identifier); - NSMutableDictionary *userInfo = [notification mutableCopy]; - [userInfo setObject:identifier forKey:@"actionCallback"]; +- (void)userNotificationCenter:(UNUserNotificationCenter *)center +didReceiveNotificationResponse:(UNNotificationResponse *)response + withCompletionHandler:(void(^)(void))completionHandler +{ + NSLog(@"Push Plugin didReceiveNotificationResponse: actionIdentifier %@, notification: %@", response.actionIdentifier, + response.notification.request.content.userInfo); + NSMutableDictionary *userInfo = [response.notification.request.content.userInfo mutableCopy]; + [userInfo setObject:response.actionIdentifier forKey:@"actionCallback"]; NSLog(@"Push Plugin userInfo %@", userInfo); - - if (application.applicationState == UIApplicationStateActive) { - PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; - pushHandler.notificationMessage = userInfo; - pushHandler.isInline = NO; - [pushHandler notificationReceived]; - } else { - void (^safeHandler)() = ^(void){ - dispatch_async(dispatch_get_main_queue(), ^{ - completionHandler(); - }); - }; - - PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; - - if (pushHandler.handlerObj == nil) { - pushHandler.handlerObj = [NSMutableDictionary dictionaryWithCapacity:2]; + + switch ([UIApplication sharedApplication].applicationState) { + case UIApplicationStateActive: + { + PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; + pushHandler.notificationMessage = userInfo; + pushHandler.isInline = NO; + [pushHandler notificationReceived]; + completionHandler(); + break; } - - id notId = [userInfo objectForKey:@"notId"]; - if (notId != nil) { - NSLog(@"Push Plugin notId %@", notId); - [pushHandler.handlerObj setObject:safeHandler forKey:notId]; - } else { - NSLog(@"Push Plugin notId handler"); - [pushHandler.handlerObj setObject:safeHandler forKey:@"handler"]; + case UIApplicationStateInactive: + { + NSLog(@"coldstart"); + self.launchNotification = response.notification.request.content.userInfo; + self.coldstart = [NSNumber numberWithBool:YES]; + break; + } + case UIApplicationStateBackground: + { + void (^safeHandler)(void) = ^(void){ + dispatch_async(dispatch_get_main_queue(), ^{ + completionHandler(); + }); + }; + + PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; + + if (pushHandler.handlerObj == nil) { + pushHandler.handlerObj = [NSMutableDictionary dictionaryWithCapacity:2]; + } + + id notId = [userInfo objectForKey:@"notId"]; + if (notId != nil) { + NSLog(@"Push Plugin notId %@", notId); + [pushHandler.handlerObj setObject:safeHandler forKey:notId]; + } else { + NSLog(@"Push Plugin notId handler"); + [pushHandler.handlerObj setObject:safeHandler forKey:@"handler"]; + } + + pushHandler.notificationMessage = userInfo; + pushHandler.isInline = NO; + + [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO]; } - - pushHandler.notificationMessage = userInfo; - pushHandler.isInline = NO; - - [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO]; } } diff --git a/src/ios/PushPlugin.h b/src/ios/PushPlugin.h index 048e2a39d..4735924c2 100644 --- a/src/ios/PushPlugin.h +++ b/src/ios/PushPlugin.h @@ -23,7 +23,8 @@ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#import +@import Foundation; +@import UserNotifications; #import #import #import diff --git a/src/ios/PushPlugin.m b/src/ios/PushPlugin.m index 983f00853..2e9278f30 100644 --- a/src/ios/PushPlugin.m +++ b/src/ios/PushPlugin.m @@ -1,16 +1,16 @@ /* Copyright 2009-2011 Urban Airship Inc. All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binaryform must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided withthe distribution. - + THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO @@ -27,6 +27,7 @@ #define GMP_NO_MODULES true #import "PushPlugin.h" +#import "AppDelegate+notification.h" @import FirebaseInstanceID; @import FirebaseMessaging; @import FirebaseAnalytics; @@ -53,11 +54,11 @@ @implementation PushPlugin : CDVPlugin -(void)initRegistration; { NSString * registrationToken = [[FIRInstanceID instanceID] token]; - + if (registrationToken != nil) { NSLog(@"FCM Registration Token: %@", registrationToken); [self setFcmRegistrationToken: registrationToken]; - + id topics = [self fcmTopics]; if (topics != nil) { for (NSString *topic in topics) { @@ -66,12 +67,12 @@ -(void)initRegistration; [pubSub subscribeToTopic:topic]; } } - + [self registerWithToken:registrationToken]; } else { NSLog(@"FCM token is null"); } - + } // FCM refresh token @@ -111,7 +112,7 @@ - (void)didDeleteMessagesOnServer { - (void)unregister:(CDVInvokedUrlCommand*)command; { NSArray* topics = [command argumentAtIndex:0]; - + if (topics != nil) { id pubSub = [FIRMessaging messaging]; for (NSString *topic in topics) { @@ -127,7 +128,7 @@ - (void)unregister:(CDVInvokedUrlCommand*)command; - (void)subscribe:(CDVInvokedUrlCommand*)command; { NSString* topic = [command argumentAtIndex:0]; - + if (topic != nil) { NSLog(@"subscribe from topic: %@", topic); id pubSub = [FIRMessaging messaging]; @@ -143,7 +144,7 @@ - (void)subscribe:(CDVInvokedUrlCommand*)command; - (void)unsubscribe:(CDVInvokedUrlCommand*)command; { NSString* topic = [command argumentAtIndex:0]; - + if (topic != nil) { NSLog(@"unsubscribe from topic: %@", topic); id pubSub = [FIRMessaging messaging]; @@ -164,9 +165,9 @@ - (void)init:(CDVInvokedUrlCommand*)command; if (([voipArg isKindOfClass:[NSString class]] && [voipArg isEqualToString:@"true"]) || [voipArg boolValue]) { [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin VoIP set to true"); - + self.callbackId = command.callbackId; - + PKPushRegistry *pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; pushRegistry.delegate = self; pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; @@ -176,50 +177,48 @@ - (void)init:(CDVInvokedUrlCommand*)command; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onTokenRefresh) name:kFIRInstanceIDTokenRefreshNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendDataMessageFailure:) name:FIRMessagingSendErrorNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendDataMessageSuccess:) name:FIRMessagingSendSuccessNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didDeleteMessagesOnServer) name:FIRMessagingMessagesDeletedNotification object:nil]; - + [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin register called"); self.callbackId = command.callbackId; - + NSArray* topics = [iosOptions objectForKey:@"topics"]; [self setFcmTopics:topics]; - - UIUserNotificationType UserNotificationTypes = UIUserNotificationTypeNone; - + + UNAuthorizationOptions authorizationOptions = UNAuthorizationOptionNone; + id badgeArg = [iosOptions objectForKey:@"badge"]; id soundArg = [iosOptions objectForKey:@"sound"]; id alertArg = [iosOptions objectForKey:@"alert"]; id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"]; - + if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue]) { - UserNotificationTypes |= UIUserNotificationTypeBadge; + authorizationOptions |= UNAuthorizationOptionBadge; } - + if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue]) { - UserNotificationTypes |= UIUserNotificationTypeSound; + authorizationOptions |= UNAuthorizationOptionSound; } - + if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue]) { - UserNotificationTypes |= UIUserNotificationTypeAlert; + authorizationOptions |= UNAuthorizationOptionAlert; } - - UserNotificationTypes |= UIUserNotificationActivationModeBackground; - + if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) { NSLog(@"PushPlugin.register: setting badge to false"); clearBadge = NO; @@ -229,84 +228,80 @@ - (void)init:(CDVInvokedUrlCommand*)command; [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge); - + isInline = NO; - + NSLog(@"PushPlugin.register: better button setup"); // setup action buttons - NSMutableSet *categories = [[NSMutableSet alloc] init]; + NSMutableSet *categories = [[NSMutableSet alloc] init]; id categoryOptions = [iosOptions objectForKey:@"categories"]; if (categoryOptions != nil && [categoryOptions isKindOfClass:[NSDictionary class]]) { for (id key in categoryOptions) { NSLog(@"categories: key %@", key); id category = [categoryOptions objectForKey:key]; - + id yesButton = [category objectForKey:@"yes"]; - UIMutableUserNotificationAction *yesAction; + UNNotificationAction *yesAction; if (yesButton != nil && [yesButton isKindOfClass:[NSDictionary class]]) { yesAction = [self createAction: yesButton]; } id noButton = [category objectForKey:@"no"]; - UIMutableUserNotificationAction *noAction; + UNNotificationAction *noAction; if (noButton != nil && [noButton isKindOfClass:[NSDictionary class]]) { noAction = [self createAction: noButton]; } id maybeButton = [category objectForKey:@"maybe"]; - UIMutableUserNotificationAction *maybeAction; + UNNotificationAction *maybeAction; if (maybeButton != nil && [maybeButton isKindOfClass:[NSDictionary class]]) { maybeAction = [self createAction: maybeButton]; } - - // First create the category - UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init]; - + // Identifier to include in your push payload and local notification - notificationCategory.identifier = key; - - NSMutableArray *categoryArray = [[NSMutableArray alloc] init]; - NSMutableArray *minimalCategoryArray = [[NSMutableArray alloc] init]; + NSString *identifier = key; + + NSMutableArray *actions = [[NSMutableArray alloc] init]; if (yesButton != nil) { - [categoryArray addObject:yesAction]; - [minimalCategoryArray addObject:yesAction]; + [actions addObject:yesAction]; } if (noButton != nil) { - [categoryArray addObject:noAction]; - [minimalCategoryArray addObject:noAction]; + [actions addObject:noAction]; } if (maybeButton != nil) { - [categoryArray addObject:maybeAction]; + [actions addObject:maybeAction]; } - - // Add the actions to the category and set the action context - [notificationCategory setActions:categoryArray forContext:UIUserNotificationActionContextDefault]; - - // Set the actions to present in a minimal context - [notificationCategory setActions:minimalCategoryArray forContext:UIUserNotificationActionContextMinimal]; - + + UNNotificationCategory *notificationCategory = [UNNotificationCategory categoryWithIdentifier:identifier + actions:actions + intentIdentifiers:@[] + options:UNNotificationCategoryOptionNone]; + NSLog(@"Adding category %@", key); [categories addObject:notificationCategory]; } - + } - - if ([[UIApplication sharedApplication]respondsToSelector:@selector(registerUserNotificationSettings:)]) { - UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UserNotificationTypes categories:categories]; - dispatch_async(dispatch_get_main_queue(), ^{ - [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; - [[UIApplication sharedApplication] registerForRemoteNotifications]; - }); - } - + + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + [center setNotificationCategories:categories]; + [self handleNotificationSettingsWithAuthorizationOptions:[NSNumber numberWithInteger:authorizationOptions]]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleNotificationSettings:) + name:pushPluginApplicationDidBecomeActiveNotification + object:nil]; + + + // Read GoogleService-Info.plist NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - + // Load the file content and read the data into arrays NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; - + NSLog(@"FCM Sender ID %@", fcmSenderId); - + // GCM options [self setFcmSenderId: fcmSenderId]; if(isGcmEnabled && [[self fcmSenderId] length] > 0) { @@ -322,7 +317,7 @@ - (void)init:(CDVInvokedUrlCommand*)command; [self setUsesFCM:NO]; } id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; - + [self setFcmSandbox:@NO]; if ([self usesFCM] && (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || @@ -331,40 +326,33 @@ - (void)init:(CDVInvokedUrlCommand*)command; NSLog(@"Using FCM Sandbox"); [self setFcmSandbox:@YES]; } - + if (notificationMessage) { // if there is a pending startup notification dispatch_async(dispatch_get_main_queue(), ^{ // delay to allow JS event handlers to be setup [self performSelector:@selector(notificationReceived) withObject:nil afterDelay: 0.5]; }); } - + }]; } } -- (UIMutableUserNotificationAction *)createAction:(NSDictionary *)dictionary { - - UIMutableUserNotificationAction *myAction = [[UIMutableUserNotificationAction alloc] init]; - - myAction = [[UIMutableUserNotificationAction alloc] init]; - myAction.identifier = [dictionary objectForKey:@"callback"]; - myAction.title = [dictionary objectForKey:@"title"]; - id mode =[dictionary objectForKey:@"foreground"]; - if (mode == nil || ([mode isKindOfClass:[NSString class]] && [mode isEqualToString:@"false"]) || ![mode boolValue]) { - myAction.activationMode = UIUserNotificationActivationModeBackground; - } else { - myAction.activationMode = UIUserNotificationActivationModeForeground; +- (UNNotificationAction *)createAction:(NSDictionary *)dictionary { + NSString *identifier = [dictionary objectForKey:@"callback"]; + NSString *title = [dictionary objectForKey:@"title"]; + UNNotificationActionOptions options = UNNotificationActionOptionNone; + + id mode = [dictionary objectForKey:@"foreground"]; + if (mode != nil && (([mode isKindOfClass:[NSString class]] && [mode isEqualToString:@"true"]) || [mode boolValue])) { + options |= UNNotificationActionOptionForeground; } id destructive = [dictionary objectForKey:@"destructive"]; - if (destructive == nil || ([destructive isKindOfClass:[NSString class]] && [destructive isEqualToString:@"false"]) || ![destructive boolValue]) { - myAction.destructive = NO; - } else { - myAction.destructive = YES; + if (destructive != nil && (([destructive isKindOfClass:[NSString class]] && [destructive isEqualToString:@"true"]) || [destructive boolValue])) { + options |= UNNotificationActionOptionDestructive; } - myAction.authenticationRequired = NO; - - return myAction; + + return [UNNotificationAction actionWithIdentifier:identifier title:title options:options]; } - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { @@ -373,54 +361,59 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { return; } NSLog(@"Push Plugin register success: %@", deviceToken); - + NSMutableDictionary *results = [NSMutableDictionary dictionary]; NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString: @" " withString: @""]; [results setValue:token forKey:@"deviceToken"]; - + #if !TARGET_IPHONE_SIMULATOR // Get Bundle Info for Remote Registration (handy if you have more than one app) [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] forKey:@"appName"]; [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] forKey:@"appVersion"]; - + // Check what Notifications the user has turned on. We registered for all three, but they may have manually disabled some or all of them. - - NSUInteger rntypes = [[[UIApplication sharedApplication] currentUserNotificationSettings] types]; - - // Set the defaults to disabled unless we find otherwise... - NSString *pushBadge = @"disabled"; - NSString *pushAlert = @"disabled"; - NSString *pushSound = @"disabled"; - - // Check what Registered Types are turned on. This is a bit tricky since if two are enabled, and one is off, it will return a number 2... not telling you which - // one is actually disabled. So we are literally checking to see if rnTypes matches what is turned on, instead of by number. The "tricky" part is that the - // single notification types will only match if they are the ONLY one enabled. Likewise, when we are checking for a pair of notifications, it will only be - // true if those two notifications are on. This is why the code is written this way - if(rntypes & UIUserNotificationTypeBadge){ - pushBadge = @"enabled"; - } - if(rntypes & UIUserNotificationTypeAlert) { - pushAlert = @"enabled"; - } - if(rntypes & UIUserNotificationTypeSound) { - pushSound = @"enabled"; - } - - [results setValue:pushBadge forKey:@"pushBadge"]; - [results setValue:pushAlert forKey:@"pushAlert"]; - [results setValue:pushSound forKey:@"pushSound"]; - - // Get the users Device Model, Display Name, Token & Version Number - UIDevice *dev = [UIDevice currentDevice]; - [results setValue:dev.name forKey:@"deviceName"]; - [results setValue:dev.model forKey:@"deviceModel"]; - [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"]; - - if(![self usesFCM]) { - [self registerWithToken: token]; - } + + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + __weak PushPlugin *weakSelf = self; + [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { + + // Set the defaults to disabled unless we find otherwise... + NSString *pushBadge = @"disabled"; + NSString *pushAlert = @"disabled"; + NSString *pushSound = @"disabled"; + + // Check what Registered Types are turned on. This is a bit tricky since if two are enabled, and one is off, it will return a number 2... not telling you which + // one is actually disabled. So we are literally checking to see if rnTypes matches what is turned on, instead of by number. The "tricky" part is that the + // single notification types will only match if they are the ONLY one enabled. Likewise, when we are checking for a pair of notifications, it will only be + // true if those two notifications are on. This is why the code is written this way + if(settings.authorizationStatus & UNAuthorizationOptionBadge){ + pushBadge = @"enabled"; + } + if(settings.authorizationStatus & UNAuthorizationOptionAlert) { + pushAlert = @"enabled"; + } + if(settings.authorizationStatus & UNAuthorizationOptionSound) { + pushSound = @"enabled"; + } + + [results setValue:pushBadge forKey:@"pushBadge"]; + [results setValue:pushAlert forKey:@"pushAlert"]; + [results setValue:pushSound forKey:@"pushSound"]; + + // Get the users Device Model, Display Name, Token & Version Number + UIDevice *dev = [UIDevice currentDevice]; + [results setValue:dev.name forKey:@"deviceName"]; + [results setValue:dev.model forKey:@"deviceModel"]; + [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"]; + + if(![weakSelf usesFCM]) { + [weakSelf registerWithToken: token]; + } + }]; + + #endif } @@ -436,21 +429,21 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error - (void)notificationReceived { NSLog(@"Notification received"); - + if (notificationMessage && self.callbackId != nil) { NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:4]; NSMutableDictionary* additionalData = [NSMutableDictionary dictionaryWithCapacity:4]; - - + + for (id key in notificationMessage) { if ([key isEqualToString:@"aps"]) { id aps = [notificationMessage objectForKey:@"aps"]; - + for(id key in aps) { NSLog(@"Push Plugin key: %@", key); id value = [aps objectForKey:key]; - + if ([key isEqualToString:@"alert"]) { if ([value isKindOfClass:[NSDictionary class]]) { for (id messageKey in value) { @@ -483,26 +476,26 @@ - (void)notificationReceived { [additionalData setObject:[notificationMessage objectForKey:key] forKey:key]; } } - + if (isInline) { [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"foreground"]; } else { [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"foreground"]; } - + if (coldstart) { [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"coldstart"]; } else { [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"coldstart"]; } - + [message setObject:additionalData forKey:@"additionalData"]; - + // send notification message CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; [pluginResult setKeepCallbackAsBool:YES]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; - + self.coldstart = NO; self.notificationMessage = nil; } @@ -512,9 +505,9 @@ - (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command { NSMutableDictionary* options = [command.arguments objectAtIndex:0]; int badge = [[options objectForKey:@"badge"] intValue] ?: 0; - + [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge]; - + NSString* message = [NSString stringWithFormat:@"app badge count set to %d", badge]; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; @@ -523,7 +516,7 @@ - (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command - (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command { NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber; - + CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)badge]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; } @@ -531,7 +524,7 @@ - (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command - (void)clearAllNotifications:(CDVInvokedUrlCommand *)command { [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; - + NSString* message = [NSString stringWithFormat:@"cleared all notifications"]; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; @@ -539,16 +532,15 @@ - (void)clearAllNotifications:(CDVInvokedUrlCommand *)command - (void)hasPermission:(CDVInvokedUrlCommand *)command { - BOOL enabled = NO; id appDelegate = [UIApplication sharedApplication].delegate; - if ([appDelegate respondsToSelector:@selector(userHasRemoteNotificationsEnabled)]) { - enabled = [appDelegate performSelector:@selector(userHasRemoteNotificationsEnabled)]; + if ([appDelegate respondsToSelector:@selector(checkUserHasRemoteNotificationsEnabledWithCompletionHandler:)]) { + [appDelegate performSelector:@selector(checkUserHasRemoteNotificationsEnabledWithCompletionHandler:) withObject:^(BOOL isEnabled) { + NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1]; + [message setObject:[NSNumber numberWithBool:isEnabled] forKey:@"isEnabled"]; + CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; + [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; + }]; } - - NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:1]; - [message setObject:[NSNumber numberWithBool:enabled] forKey:@"isEnabled"]; - CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; - [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; } -(void)successWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message @@ -565,9 +557,9 @@ -(void)registerWithToken:(NSString*)token; { NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:2]; [message setObject:token forKey:@"registrationId"]; if ([self usesFCM]) { - [message setObject:@"FCM" forKey:@"registrationType"]; + [message setObject:@"FCM" forKey:@"registrationType"]; } else { - [message setObject:@"APNS" forKey:@"registrationType"]; + [message setObject:@"APNS" forKey:@"registrationType"]; } CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; [pluginResult setKeepCallbackAsBool:YES]; @@ -579,17 +571,17 @@ -(void)failWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message with { NSString *errorMessage = (error) ? [NSString stringWithFormat:@"%@ - %@", message, [error localizedDescription]] : message; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:errorMessage]; - + [self.commandDelegate sendPluginResult:commandResult callbackId:myCallbackId]; } -(void) finish:(CDVInvokedUrlCommand*)command { NSLog(@"Push Plugin finish called"); - + [self.commandDelegate runInBackground:^ { NSString* notId = [command.arguments objectAtIndex:0]; - + dispatch_async(dispatch_get_main_queue(), ^{ [NSTimer scheduledTimerWithTimeInterval:0.1 target:self @@ -597,7 +589,7 @@ -(void) finish:(CDVInvokedUrlCommand*)command userInfo:notId repeats:NO]; }); - + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; }]; @@ -606,9 +598,9 @@ -(void) finish:(CDVInvokedUrlCommand*)command -(void)stopBackgroundTask:(NSTimer*)timer { UIApplication *app = [UIApplication sharedApplication]; - + NSLog(@"Push Plugin stopBackgroundTask called"); - + if (handlerObj) { NSLog(@"Push Plugin handlerObj"); completionHandler = [handlerObj[[timer userInfo]] copy]; @@ -627,14 +619,14 @@ - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPush NSLog(@"VoIPPush Plugin register error - No device token:"); return; } - + NSLog(@"VoIPPush Plugin register success"); const unsigned *tokenBytes = [credentials.token bytes]; NSString *sToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; - + [self registerWithToken:sToken]; } @@ -645,4 +637,51 @@ - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayloa [self notificationReceived]; } +- (void)handleNotificationSettings:(NSNotification *)notification +{ + [self handleNotificationSettingsWithAuthorizationOptions:nil]; +} + +- (void)handleNotificationSettingsWithAuthorizationOptions:(NSNumber *)authorizationOptionsObject +{ + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + UNAuthorizationOptions authorizationOptions = [authorizationOptionsObject unsignedIntegerValue]; + + __weak UNUserNotificationCenter *weakCenter = center; + [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { + + switch (settings.authorizationStatus) { + case UNAuthorizationStatusNotDetermined: + { + [weakCenter requestAuthorizationWithOptions:authorizationOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { + if (granted) { + [self performSelectorOnMainThread:@selector(registerForRemoteNotifications) + withObject:nil + waitUntilDone:NO]; + } + }]; + break; + } + case UNAuthorizationStatusAuthorized: + { + [self performSelectorOnMainThread:@selector(registerForRemoteNotifications) + withObject:nil + waitUntilDone:NO]; + break; + } + case UNAuthorizationStatusDenied: + default: + break; + } + }]; +} + +- (void)registerForRemoteNotifications +{ + if (![[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) { + [[UIApplication sharedApplication] registerForRemoteNotifications]; + } +} + @end + From 6d38ec3e7e00241a71c50b38e5caf4cc9b9b6e2f Mon Sep 17 00:00:00 2001 From: Kenichi Naito Date: Thu, 21 Jun 2018 23:47:33 +0900 Subject: [PATCH 42/59] the completionHandler moved in the else statement (#2417) --- src/ios/AppDelegate+notification.m | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/ios/AppDelegate+notification.m b/src/ios/AppDelegate+notification.m index 646ca3cd1..3c04295ae 100644 --- a/src/ios/AppDelegate+notification.m +++ b/src/ios/AppDelegate+notification.m @@ -57,7 +57,7 @@ - (AppDelegate *)pushPluginSwizzledInit { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; - + [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(pushPluginOnApplicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification @@ -83,7 +83,7 @@ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(N // app is in the background or inactive, so only call notification callback if this is a silent push if (application.applicationState != UIApplicationStateActive) { - + NSLog(@"app in-active"); // do some convoluted logic to find out if this should be a silent push. @@ -126,9 +126,9 @@ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(N NSLog(@"just put it in the shade"); //save it for later self.launchNotification = userInfo; + completionHandler(UIBackgroundFetchResultNewData); } - - completionHandler(UIBackgroundFetchResultNewData); + } else { completionHandler(UIBackgroundFetchResultNoData); } @@ -137,7 +137,7 @@ - (void)application:(UIApplication *)application didReceiveRemoteNotification:(N - (void)checkUserHasRemoteNotificationsEnabledWithCompletionHandler:(nonnull void (^)(BOOL))completionHandler { [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { - + switch (settings.authorizationStatus) { case UNAuthorizationStatusDenied: @@ -174,7 +174,7 @@ - (void)pushPluginOnApplicationDidBecomeActive:(NSNotification *)notification { self.coldstart = [NSNumber numberWithBool:NO]; [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO]; } - + [[NSNotificationCenter defaultCenter] postNotificationName:pushPluginApplicationDidBecomeActiveNotification object:nil]; } @@ -188,7 +188,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center pushHandler.notificationMessage = notification.request.content.userInfo; pushHandler.isInline = YES; [pushHandler notificationReceived]; - + completionHandler(UNNotificationPresentationOptionNone); } @@ -201,7 +201,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center NSMutableDictionary *userInfo = [response.notification.request.content.userInfo mutableCopy]; [userInfo setObject:response.actionIdentifier forKey:@"actionCallback"]; NSLog(@"Push Plugin userInfo %@", userInfo); - + switch ([UIApplication sharedApplication].applicationState) { case UIApplicationStateActive: { @@ -226,13 +226,13 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center completionHandler(); }); }; - + PushPlugin *pushHandler = [self getCommandInstance:@"PushNotification"]; - + if (pushHandler.handlerObj == nil) { pushHandler.handlerObj = [NSMutableDictionary dictionaryWithCapacity:2]; } - + id notId = [userInfo objectForKey:@"notId"]; if (notId != nil) { NSLog(@"Push Plugin notId %@", notId); @@ -241,10 +241,10 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center NSLog(@"Push Plugin notId handler"); [pushHandler.handlerObj setObject:safeHandler forKey:@"handler"]; } - + pushHandler.notificationMessage = userInfo; pushHandler.isInline = NO; - + [pushHandler performSelectorOnMainThread:@selector(notificationReceived) withObject:pushHandler waitUntilDone:NO]; } } From 11d7a6c7db05b1c68769a11fb922c35258a5b720 Mon Sep 17 00:00:00 2001 From: jcesarmobile Date: Thu, 21 Jun 2018 16:48:24 +0200 Subject: [PATCH 43/59] Call registerForRemoteNotifications even if isRegisteredForRemoteNotifications (#2438) --- src/ios/PushPlugin.m | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ios/PushPlugin.m b/src/ios/PushPlugin.m index 2e9278f30..8649622e6 100644 --- a/src/ios/PushPlugin.m +++ b/src/ios/PushPlugin.m @@ -678,9 +678,7 @@ - (void)handleNotificationSettingsWithAuthorizationOptions:(NSNumber *)authoriza - (void)registerForRemoteNotifications { - if (![[UIApplication sharedApplication] isRegisteredForRemoteNotifications]) { - [[UIApplication sharedApplication] registerForRemoteNotifications]; - } + [[UIApplication sharedApplication] registerForRemoteNotifications]; } @end From 87ded60288958eba250a89f92b696b89287c8706 Mon Sep 17 00:00:00 2001 From: Maksim Chemerisuk Date: Tue, 3 Jul 2018 00:03:40 +0300 Subject: [PATCH 44/59] =?UTF-8?q?=E2=9E=95Update=20cordova-support-google-?= =?UTF-8?q?services=20to=201.2.0,=20change=20default=20value=20for=20FCM?= =?UTF-8?q?=5FVERSION=20(#2425)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin.xml b/plugin.xml index 36d9c6fd2..a563f3253 100755 --- a/plugin.xml +++ b/plugin.xml @@ -39,11 +39,11 @@ - + - + @@ -94,4 +94,4 @@ - \ No newline at end of file + From 683696e2fd879e36c07ff0cd3561741763cd13de Mon Sep 17 00:00:00 2001 From: David Briglio Date: Tue, 3 Jul 2018 16:19:56 -0400 Subject: [PATCH 45/59] :sparkles: Added a clearNotification method to clear a single notification (Android Only) (#2192) * Added a clearNotification method to clear a single notification (Android only) * Added changes to docs, updated formatting, added tests * Updated API.md, Moved id arg, added more error checking --- docs/API.md | 65 +++++++++++++------ spec/index.spec.js | 40 ++++++++++++ .../adobe/phonegap/push/PushConstants.java | 1 + .../com/adobe/phonegap/push/PushPlugin.java | 21 ++++++ src/js/push.js | 21 ++++++ www/push.js | 24 +++++++ 6 files changed, 151 insertions(+), 21 deletions(-) diff --git a/docs/API.md b/docs/API.md index 0807e73f5..178125c82 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1,22 +1,23 @@ # API -* [.init()](#pushnotificationinitoptions) -* [.hasPermission()](#pushnotificationhaspermissionsuccesshandler) -* [.createChannel() - Android only](#pushnotificationcreatechannelsuccesshandler-failurehandler-channel) -* [.deleteChannel() - Android only](#pushnotificationdeletechannelsuccesshandler-failurehandler-channelid) -* [.listChannels() - Android only](#pushnotificationlistchannelssuccesshandler) -* [push.on()](#pushonevent-callback) - * [push.on('registration')](#pushonregistration-callback) - * [push.on('notification')](#pushonnotification-callback) - * [push.on('error')](#pushonerror-callback) -* [push.off()](#pushoffevent-callback) -* [push.unregister()](#pushunregistersuccesshandler-errorhandler-topics) -* [push.subscribe()](#pushsubscribetopic-successhandler-errorhandler) -* [push.unsubscribe()](#pushunsubscribetopic-successhandler-errorhandler) -* [push.setApplicationIconBadgeNumber() - iOS & Android only](#pushsetapplicationiconbadgenumbersuccesshandler-errorhandler-count---ios--android-only) -* [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) -* [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) -* [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) +- [.init()](#pushnotificationinitoptions) +- [.hasPermission()](#pushnotificationhaspermissionsuccesshandler) +- [.createChannel() - Android only](#pushnotificationcreatechannel) +- [.deleteChannel() - Android only](#pushnotificationdeletechannel) +- [.listChannels() - Android only](#pushnotificationlistchannels) +- [push.on()](#pushonevent-callback) + - [push.on('registration')](#pushonregistration-callback) + - [push.on('notification')](#pushonnotification-callback) + - [push.on('error')](#pushonerror-callback) +- [push.off()](#pushoffevent-callback) +- [push.unregister()](#pushunregistersuccesshandler-errorhandler-topics) +- [push.subscribe()](#pushsubscribetopic-successhandler-errorhandler) +- [push.unsubscribe()](#pushunsubscribetopic-successhandler-errorhandler) +- [push.setApplicationIconBadgeNumber() - iOS & Android only](#pushsetapplicationiconbadgenumbersuccesshandler-errorhandler-count---ios--android-only) +- [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) +- [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) +- [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) +- [push.clearNotification() - Android only](#pushclearnotificationid-successhandler-errorhandler---android-only) ## PushNotification.init(options) @@ -573,10 +574,10 @@ Tells the OS to clear all notifications from the Notification Center ### Parameters -| Parameter | Type | Default | Description | -| ---------------- | ---------- | ------- | --------------------------------------------------------------------------------------- | -| `successHandler` | `Function` | | Is called when the api successfully clears the notifications. | -| `errorHandler` | `Function` | | Is called when the api encounters an error when attempting to clears the notifications. | +Parameter | Type | Default | Description +--------- | ---- | ------- | ----------- +`successHandler` | `Function` | | Is called when the api successfully clears the notifications. +`errorHandler` | `Function` | | Is called when the api encounters an error when attempting to clear the notifications. ### Example @@ -590,3 +591,25 @@ push.clearAllNotifications( } ); ``` + +## push.clearNotification(id, successHandler, errorHandler) - Android only + +Tells the OS to clear the notification that corresponds to the id argument, from the Notification Center + +### Parameters + +Parameter | Type | Default | Description +--------- | ---- | ------- | ----------- +`successHandler` | `Function` | | Is called when the api successfully clears the notification. +`errorHandler` | `Function` | | Is called when the api encounters an error when attempting to clear the notification. +`id` | `number` | | The ID of the notification that will be cleared. | + +### Example + +```javascript +push.clearNotification(() => { + console.log('success'); +}, () => { + console.log('error'); +}, 145); +``` \ No newline at end of file diff --git a/spec/index.spec.js b/spec/index.spec.js index 9333d4415..a7123e0af 100644 --- a/spec/index.spec.js +++ b/spec/index.spec.js @@ -75,6 +75,12 @@ describe('phonegap-plugin-push', function () { expect(push.clearAllNotifications).toBeDefined(); expect(typeof push.clearAllNotifications === 'function').toBe(true); }); + + it('should contain a clearNotification function', function () { + var push = PushNotification.init({}); + expect(push.clearNotification).toBeDefined(); + expect(typeof push.clearNotification === 'function').toBe(true); + }); it('should contain a subscribe function', function () { var push = PushNotification.init({}); @@ -423,5 +429,39 @@ describe('phonegap-plugin-push', function () { }); }); }); + + describe('clear notification method', function () { + describe('cordova.exec', function () { + it('should call cordova.exec on next process tick using number argument', function (done) { + var push = PushNotification.init(options); + push.clearNotification(function () {}, function () {}, 145); + setTimeout(function () { + expect(execSpy).toHaveBeenCalledWith( + jasmine.any(Function), + jasmine.any(Function), + 'PushNotification', + 'clearNotification', + [145] + ); + done(); + }, 100); + }); + + it('should call cordova.exec on next process tick using string argument', function (done) { + var push = PushNotification.init(options); + push.clearNotification(function () {}, function () {}, "145"); + setTimeout(function () { + expect(execSpy).toHaveBeenCalledWith( + jasmine.any(Function), + jasmine.any(Function), + 'PushNotification', + 'clearNotification', + [145] + ); + done(); + }, 100); + }); + }); + }); }); }); diff --git a/src/android/com/adobe/phonegap/push/PushConstants.java b/src/android/com/adobe/phonegap/push/PushConstants.java index 02f885e93..9b4656a00 100644 --- a/src/android/com/adobe/phonegap/push/PushConstants.java +++ b/src/android/com/adobe/phonegap/push/PushConstants.java @@ -101,4 +101,5 @@ public interface PushConstants { public static final String DELETE_CHANNEL = "deleteChannel"; public static final String ONGOING = "ongoing"; public static final String LIST_CHANNELS = "listChannels"; + public static final String CLEAR_NOTIFICATION = "clearNotification"; } diff --git a/src/android/com/adobe/phonegap/push/PushPlugin.java b/src/android/com/adobe/phonegap/push/PushPlugin.java index dc81f1c5b..121bd5a25 100644 --- a/src/android/com/adobe/phonegap/push/PushPlugin.java +++ b/src/android/com/adobe/phonegap/push/PushPlugin.java @@ -407,6 +407,20 @@ public void run() { } } }); + } else if (CLEAR_NOTIFICATION.equals(action)) { + // clearing a single notification + cordova.getThreadPool().execute(new Runnable() { + public void run() { + try { + Log.v(LOG_TAG, "clearNotification"); + int id = data.getInt(0); + clearNotification(id); + callbackContext.success(); + } catch (JSONException e) { + callbackContext.error(e.getMessage()); + } + } + }); } else { Log.e(LOG_TAG, "Invalid action : " + action); callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.INVALID_ACTION)); @@ -508,6 +522,13 @@ private void clearAllNotifications() { notificationManager.cancelAll(); } + private void clearNotification(int id) { + final NotificationManager notificationManager = (NotificationManager) cordova.getActivity() + .getSystemService(Context.NOTIFICATION_SERVICE); + String appName = (String) this.cordova.getActivity().getPackageManager().getApplicationLabel(this.cordova.getActivity().getApplicationInfo()); + notificationManager.cancel(appName, id); + } + private void subscribeToTopics(JSONArray topics, String registrationToken) { if (topics != null) { String topic = null; diff --git a/src/js/push.js b/src/js/push.js index b05df8493..f952cacbf 100644 --- a/src/js/push.js +++ b/src/js/push.js @@ -203,6 +203,27 @@ class PushNotification { exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); } + + /** + * Clears notifications that have the ID specified. + * @param {Function} [successCallback] Callback function to be called on success. + * @param {Function} [errorCallback] Callback function to be called when an error is encountered. + * @param {Number} id ID of the notification to be removed. + */ + clearNotification(successCallback = () => {}, errorCallback = () => {}, id) { + const idNumber = parseInt(id, 10); + if (isNaN(idNumber) || idNumber > Number.MAX_SAFE_INTEGER || idNumber < 0) { + console.log( + 'PushNotification.clearNotification failure: id parameter must' + + 'be a valid integer.' + ); + return; + } + + exec(successCallback, errorCallback, 'PushNotification', 'clearNotification', + [idNumber]); + } + /** * Listen for an event. * diff --git a/www/push.js b/www/push.js index 3bd51b5c4..7aea0c648 100644 --- a/www/push.js +++ b/www/push.js @@ -224,6 +224,30 @@ var PushNotification = function () { exec(successCallback, errorCallback, 'PushNotification', 'clearAllNotifications', []); } + + /** + * Clears notifications that have the ID specified. + * @param {Function} [successCallback] Callback function to be called on success. + * @param {Function} [errorCallback] Callback function to be called when an error is encountered. + * @param {Number} id ID of the notification to be removed. + */ + + }, { + key: 'clearNotification', + value: function clearNotification() { + var successCallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {}; + var errorCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {}; + var id = arguments[2]; + + var idNumber = parseInt(id, 10); + if (isNaN(idNumber) || idNumber > Number.MAX_SAFE_INTEGER || idNumber < 0) { + console.log('PushNotification.clearNotification failure: id parameter must' + 'be a valid integer.'); + return; + } + + exec(successCallback, errorCallback, 'PushNotification', 'clearNotification', [idNumber]); + } + /** * Listen for an event. * From e94fb9e38ef2f99c0dc3bd86603cfe2750a1cef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s?= <10298071+andreszs@users.noreply.github.com> Date: Tue, 3 Jul 2018 17:25:00 -0300 Subject: [PATCH 46/59] Update PAYLOAD.md (#2457) * Update PAYLOAD.md All the payload details from the README refer to using the deprecated GCM service. Here I've added a small example to send push notifications to the FCM legacy HTTP server protocol, including the basic fields such as title, body, icon, color, sound, and optional payload data. * Update PAYLOAD.md --- docs/PAYLOAD.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index b40fbfa49..239ab4903 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -35,6 +35,7 @@ * [Action Buttons](#action-buttons-1) * [Action Buttons using GCM on iOS](#action-buttons-using-gcm-on-ios) * [GCM and Additional Data](#gcm-and-additional-data) +* [FCM Payload Details](#fcm-payload-details) * [Windows Behaviour](#windows-behaviour) * [Notifications](#notifications) * [Setting Toast Capable Option for Windows](#setting-toast-capable-option-for-windows) @@ -2024,6 +2025,35 @@ For some users of the plugin they are unable to get messages sent via GCM to sho } ``` +# FCM Payload Details + +Here's a sample JSON payload to send a push notification to an Android or iOS device using the FCM app server protocol: + +```php +{ + "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", + /* To send a silent push, omit the entire notification section and send only data */ + "notification": { + "title": "Test title", /* The notification's title */ + "body": "Test body.", /* The notification's body text */ + "subtitle": "Test subtitle", /* iOS: The notification's subtitle */ + "sound": "default", /* The sound to play when the device receives the notification */ + "tag": "1", /* Android: Group notifications with the same tag */ + "icon": "push_icon", /* Android: PNG icon from the res/drawable folder */ + "color": "#AABBCC" /* Android: Icon's background color in #RRGGBB format */ + }, + /* Optional payload that will be available from data.additionalData */ + "data": { + "custom_var_1": "custom value here", /* Retrieved on app as data.additionalData.custom_var_1 */ + "custom_var_2:" "custom value here" /* Retrieved on app as data.additionalData.custom_var_2 */ + } +} +``` + +More information on how to send push notifications using the FCM HTTP protocol and payload details can be found here: +- [Send messages using the legacy app server protocols](https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_using_the_legacy_app_server_protocols "Send messages using the legacy app server protocols") +- [Firebase Cloud Messaging HTTP Protocol](https://firebase.google.com/docs/cloud-messaging/http-server-ref "Firebase Cloud Messaging HTTP Protocol") + # Windows Behaviour ## Notifications From fa2434af77763e9534229f65c99b19f47d592f71 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Tue, 3 Jul 2018 16:42:41 -0400 Subject: [PATCH 47/59] :memo: Update payload with fcm instead of gcm where appropriate --- docs/PAYLOAD.md | 219 +++++++++++++++++++++++++----------------------- 1 file changed, 114 insertions(+), 105 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 239ab4903..6acf4367e 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -1,46 +1,46 @@ -* [Overview](#overview) - * [Foreground Events](#push-message-arrives-with-app-in-foreground) - * [Background Events](#push-message-arrives-with-app-in-background) - * [Tap Events](#user-clicks-on-notification-in-notification-center) -* [Push Notification Message Format Overview](#push-notification-message-format-overview) -* [Android Behaviour](#android-behaviour) - * [Notification vs Data Payloads](#notification-vs-data-payloads) - * [Localization](#localization) - * [Images](#images) - * [Sound](#sound) - * [Stacking](#stacking) - * [Inbox Stacking](#inbox-stacking) - * [Action Buttons](#action-buttons) - * [In Line Replies](#in-line-replies) - * [Led in Notifications](#led-in-notifications) - * [Vibration Pattern in Notifications](#vibration-pattern-in-notifications) - * [Priority in Notifications](#priority-in-notifications) - * [Picture Messages](#picture-messages) - * [Background Notifications](#background-notifications) - * [Use of content_available: true](#use-of-content_available-true) - * [Caching](#caching) - * [Chinese Android Phones](#chinese-android-phones) - * [Application force closed](#application-force-closed) - * [Visibility](#visibility-of-notifications) - * [Ongoing Notifications](#ongoing-notifications) - * [Badges](#badges) - * [Support for Twilio Notify](#support-for-twilio-notify) - * [Notification ID](#notification-id) - * [Clicking Notification Does Not Bring App to Foreground](#clicking-notification-does-not-bring-app-to-foreground) - * [Notification Channels](#notification-channels) -* [iOS Behaviour](#ios-behaviour) - * [Sound](#sound-1) - * [Background Notifications](#background-notifications-1) - * [VoIP Notifications](#voip-notifications) - * [Action Buttons](#action-buttons-1) - * [Action Buttons using GCM on iOS](#action-buttons-using-gcm-on-ios) - * [GCM and Additional Data](#gcm-and-additional-data) -* [FCM Payload Details](#fcm-payload-details) -* [Windows Behaviour](#windows-behaviour) - * [Notifications](#notifications) - * [Setting Toast Capable Option for Windows](#setting-toast-capable-option-for-windows) - * [Disabling the default processing of notifications by Windows](#disabling-the-default-processing-of-notifications-by-windows) - * [Background Notifications](#background-notifications-2) +- [Overview](#overview) + - [Foreground Events](#push-message-arrives-with-app-in-foreground) + - [Background Events](#push-message-arrives-with-app-in-background) + - [Tap Events](#user-clicks-on-notification-in-notification-center) +- [Push Notification Message Format Overview](#push-notification-message-format-overview) +- [Android Behaviour](#android-behaviour) + - [Notification vs Data Payloads](#notification-vs-data-payloads) + - [Localization](#localization) + - [Images](#images) + - [Sound](#sound) + - [Stacking](#stacking) + - [Inbox Stacking](#inbox-stacking) + - [Action Buttons](#action-buttons) + - [In Line Replies](#in-line-replies) + - [Led in Notifications](#led-in-notifications) + - [Vibration Pattern in Notifications](#vibration-pattern-in-notifications) + - [Priority in Notifications](#priority-in-notifications) + - [Picture Messages](#picture-messages) + - [Background Notifications](#background-notifications) + - [Use of content_available: true](#use-of-content_available-true) + - [Caching](#caching) + - [Chinese Android Phones](#chinese-android-phones) + - [Application force closed](#application-force-closed) + - [Visibility](#visibility-of-notifications) + - [Ongoing Notifications](#ongoing-notifications) + - [Badges](#badges) + - [Support for Twilio Notify](#support-for-twilio-notify) + - [Notification ID](#notification-id) + - [Clicking Notification Does Not Bring App to Foreground](#clicking-notification-does-not-bring-app-to-foreground) + - [Notification Channels](#notification-channels) +- [iOS Behaviour](#ios-behaviour) + - [Sound](#sound-1) + - [Background Notifications](#background-notifications-1) + - [VoIP Notifications](#voip-notifications) + - [Action Buttons](#action-buttons-1) + - [Action Buttons using FCM on iOS](#action-buttons-using-fcm-on-ios) + - [FCM and Additional Data](#fcm-and-additional-data) +- [FCM Payload Details](#fcm-payload-details) +- [Windows Behaviour](#windows-behaviour) + - [Notifications](#notifications) + - [Setting Toast Capable Option for Windows](#setting-toast-capable-option-for-windows) + - [Disabling the default processing of notifications by Windows](#disabling-the-default-processing-of-notifications-by-windows) + - [Background Notifications](#background-notifications-2) # Overview @@ -50,28 +50,28 @@ The following flowchart attempts to give you a picture of what happens when a pu ## Push message arrives with app in foreground -* The push plugin receives the data from the remote push service and calls all of your `on('notification')` event handlers. -* The message is _not_ displayed in the devices' notification center, as that is not normal behaviour for Android or iOS. +- The push plugin receives the data from the remote push service and calls all of your `on('notification')` event handlers. +- The message is _not_ displayed in the devices' notification center, as that is not normal behaviour for Android or iOS. ## Push message arrives with app in background -* The push plugin receives the data from the remote push service and checks to see if there is a title or message in the received data object. If there is, then the message will be displayed in the devices notification center. -* Then the push plugin checks to see if the app is running. If the user has killed the application, then no further processing of the push data will occur. -* If the app is running in the background the push plugin then checks to see if `content-available` exists in the push data. -* If `content-available` is set to `1`, then the plugin calls all of your `notification` event handlers. +- The push plugin receives the data from the remote push service and checks to see if there is a title or message in the received data object. If there is, then the message will be displayed in the devices notification center. +- Then the push plugin checks to see if the app is running. If the user has killed the application, then no further processing of the push data will occur. +- If the app is running in the background the push plugin then checks to see if `content-available` exists in the push data. +- If `content-available` is set to `1`, then the plugin calls all of your `notification` event handlers. ## User clicks on notification in notification center -* The app starts. -* Then the plugin calls all of your `notification` event handlers. +- The app starts. +- Then the plugin calls all of your `notification` event handlers. > Note: if the push payload contained `content-available: 1` then your `notification` event handler has already been called. It is up to you to handle the double event. Some ways to handle this _double_ event are: -* don't include title/message in the push so it doesn't show up in the shader. -* send two pushes, one to be processed in the background, and the other to show up in the shade. -* include a unique ID in your push so you can check to see if you've already processed this event. +- don't include title/message in the push so it doesn't show up in the shader. +- send two pushes, one to be processed in the background, and the other to show up in the shade. +- include a unique ID in your push so you can check to see if you've already processed this event. # Push Notification Message Format Overview @@ -365,14 +365,14 @@ With Android now greatly using Material design since 5.0 (Lollipop), push notifi You should design one with these guidelines in mind: -* 96x96 pixels -* Transparent background -* White foreground +- 96x96 pixels +- Transparent background +- White foreground For more details, please read: -* https://material.io/tools/icons -* https://material.io/design/iconography/ +- https://material.io/tools/icons +- https://material.io/design/iconography/ **Note:** any color foreground will work - any non-transparent pixels are just rendered white. @@ -407,7 +407,7 @@ Please follow the [Android icon design guidelines](https://www.google.com/design Additionally, each push can include a large icon which is used to personalize each push. The location of the image may be one of three types. -The first is the `res/drawable` folder in your app. This JSON is sent from GCM: +The first is the `res/drawable` folder in your app. This JSON is sent from FCM: ```javascript { @@ -452,7 +452,7 @@ Would look for the _twitter_ image in the `res/drawable` folder and produce the ![2015-07-24 02 34 41](https://cloud.githubusercontent.com/assets/353180/8866903/2df48028-3190-11e5-8176-fe8b3f7c5aab.png) -The second is the _assets_ folder in your app. This JSON sent from GCM: +The second is the _assets_ folder in your app. This JSON sent from FCM: ```javascript { @@ -497,7 +497,7 @@ Would look for the _logo.png_ file in the assets/www/img folder. Since your apps ![2015-07-24 02 20 02](https://cloud.githubusercontent.com/assets/353180/8866901/2df19052-3190-11e5-8c16-a355c59209f3.png) -The third is the remote _URL_. This JSON sent from GCM: +The third is the remote _URL_. This JSON sent from FCM: ```javascript { @@ -542,7 +542,7 @@ Produces the following notification. ![2015-07-24 02 17 55](https://cloud.githubusercontent.com/assets/353180/8866900/2df0ab06-3190-11e5-9a81-fdb85bb0f5a4.png) -Finally, the Material UI guidelines recommend using a circular icon for the large icon if the subject of the image is a person. This JSON sent from GCM: +Finally, the Material UI guidelines recommend using a circular icon for the large icon if the subject of the image is a person. This JSON sent from FCM: ```javascript { @@ -556,25 +556,33 @@ Finally, the Material UI guidelines recommend using a circular icon for the larg } ``` -Here is an example using node-gcm that sends the above JSON: +Here is an example using fcm-node that sends the above JSON: -```javascript -const gcm = require('node-gcm'); +````javascript +const FCM = require('fcm-node'); // Replace these with your own values. const apiKey = 'replace with API key'; const deviceID = 'my device id'; -const service = new gcm.Sender(apiKey); -const message = new gcm.Message(); -message.addData('title', 'Large Circular Icon'); -message.addData('message', 'Loaded from URL'); -message.addData( - 'image', - 'https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg' -); -message.addData('image-type', 'circular'); -service.send(message, { registrationTokens: [deviceID] }, (err, response) => { - if (err) console.error(err); - else console.log(response); +const fcm = new FCM(apiKey); + +const message = { + to: deviceID, + data: { + title: 'Large Circular Icon', + message: 'Loaded from URL', + image: + 'https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg', + 'image-type': 'circular' + } +}; + +fcm.send(message, (err, response) => { + if (err) { + console.log(err); + console.log('Something has gone wrong!'); + } else { + console.log('Successfully sent with response: ', response); + } }); ``` @@ -595,7 +603,7 @@ For Android there are three special values for sound you can use. The first is ` "soundname": "default" } } -``` +```` Then second is `ringtone` which will play the phones default ringtone sound. @@ -623,7 +631,7 @@ The third is the empty string which will cause for the playing of sound to be sk } ``` -In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. Then send the follow JSON from GCM: +In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. Then send the follow JSON from FCM: ```javascript { @@ -834,7 +842,7 @@ You will see both "Push number 1" and "Push number 2" in the shade. ## Inbox Stacking -A better alternative to stacking your notifications is to use the inbox style to have up to 8 lines of notification text in a single notification. If you send the following JSON from GCM you will see: +A better alternative to stacking your notifications is to use the inbox style to have up to 8 lines of notification text in a single notification. If you send the following JSON from FCM you will see: ```javascript { @@ -928,7 +936,7 @@ You will get an inbox view so you can display multiple notifications in a single ![2015-08-25 14 01 35](https://cloud.githubusercontent.com/assets/353180/9468727/2d658bee-4b11-11e5-90fa-248d54c8f3f6.png) -If you use `%n%` in the `summaryText` of the JSON coming down from GCM it will be replaced by the number of messages that are currently in the queue. +If you use `%n%` in the `summaryText` of the JSON coming down from FCM it will be replaced by the number of messages that are currently in the queue. ## Action Buttons @@ -949,7 +957,7 @@ push.on('snooze', data => { }); ``` -If you wish to include an icon along with the button name, they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from GCM: +If you wish to include an icon along with the button name, they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from FCM: ```javascript { @@ -1012,7 +1020,7 @@ If your user clicks on the main body of the notification, then your app will be Android N introduces a new capability for push notifications, the in line reply text field. If you wish to get some text data from the user when the action button is called send the following type of payload. -Your notification can include action buttons. If you wish to include an icon along with the button name they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from GCM: +Your notification can include action buttons. If you wish to include an icon along with the button name they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from FCM: ```javascript { @@ -1246,11 +1254,11 @@ fcm.send(message, (err, response) => { }); ``` -Do not confuse this with the GCM option of setting the [delivery priority of the message](https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message). Which is used by GCM to tell the device whether or not it should wake up to deal with the message. +Do not confuse this with the FCM option of setting the [delivery priority of the message](https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message). Which is used by FCM to tell the device whether or not it should wake up to deal with the message. ## Picture Messages -Perhaps you want to include a large picture in the notification that you are sending to your users. Luckily you can do that too by sending the following JSON from GCM. +Perhaps you want to include a large picture in the notification that you are sending to your users. Luckily you can do that too by sending the following JSON from FCM. ```javascript { @@ -1305,7 +1313,7 @@ This will produce the following notification in your tray: On Android if you want your `on('notification')` event handler to be called when your app is in the background it is relatively simple. -First the JSON you send from GCM will need to include `"content-available": "1"`. This will tell the push plugin to call your `on('notification')` event handler no matter what other data is in the push notification. +First the JSON you send from FCM will need to include `"content-available": "1"`. This will tell the push plugin to call your `on('notification')` event handler no matter what other data is in the push notification. ```json { @@ -1391,7 +1399,7 @@ If you do not want this type of behaviour, just omit `"content-available": 1` fr ### Use of content_available: true -The [GCM docs](https://developers.google.com/cloud-messaging/http-server-ref#downstream-http-messages-json) will tell you to send a data payload of: +The FCM docs will tell you to send a data payload of: ```javascript { @@ -1427,9 +1435,9 @@ Instead move `content_available: true` into the `data` object of the payload. Th These phones have a particular quirk that when the app is force closed that you will no longer be able to receive notifications until the app is restarted. In order for you to receive background notifications: -* On your Huawei device go to Settings > Protected apps > check "My App" where. -* On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. -* On your Asus make sure your phone has the "Auto-start" property enabled for your app. +- On your Huawei device go to Settings > Protected apps > check "My App" where. +- On your Xiaomi make sure your phone has the "Auto-start" property enabled for your app. +- On your Asus make sure your phone has the "Auto-start" property enabled for your app. More explicit instructions can be read on [Forbes website](https://www.forbes.com/sites/bensin/2017/07/28/how-to-fix-push-notifications-on-oppo-phones/#72a523371735). @@ -1656,9 +1664,9 @@ fcm.send(message, (err, response) => { This plugin seamlessly supports payloads generated by Twilio Notify on Android. Specifically the parameters passed in to the Twilio REST API are available in the message payload passed to your app as follows: -* `Title` --> `data.title` -* `Body` --> `data.message` -* `Sound` --> `data.sound` +- `Title` --> `data.title` +- `Body` --> `data.message` +- `Sound` --> `data.sound` Here is an example request to Twilio REST API and the corresponding JSON received by your app. @@ -1948,9 +1956,9 @@ This will produce the following notification in your tray: If your users clicks on the main body of the notification your app will be opened. However, if they click on either of the action buttons the app will open (or start) and the specified JavaScript callback will be executed. -### Action Buttons using GCM on iOS +### Action Buttons using FCM on iOS -If you are using GCM to send push messages on iOS you will need to send a different payload in order for the action buttons to be present in the notification shade. You'll need to use the `click-action` property in order to specify the category. +If you are using FCM to send push messages on iOS you will need to send a different payload in order for the action buttons to be present in the notification shade. You'll need to use the `click-action` property in order to specify the category. ```javascript { @@ -1963,9 +1971,9 @@ If you are using GCM to send push messages on iOS you will need to send a differ } ``` -## GCM and Additional Data +## FCM and Additional Data -GCM on iOS is a different animal. The way you send data via GCM on Android is like: +FCM on iOS is a different animal. The way you send data via FCM on Android is like: ```javascript { @@ -1992,7 +2000,7 @@ will produce a `notification` event with the following data: } ``` -but in order for the same `notification` event you would need to send your push to GCM iOS in a slight different format: +but in order for the same `notification` event you would need to send your push to FCM iOS in a slight different format: ```javascript { @@ -2010,9 +2018,9 @@ but in order for the same `notification` event you would need to send your push The `title` and `body` need to be in the `notification` part of the payload in order for the OS to pick them up correctly. Everything else should be in the `data` part of the payload. -## GCM Messages Not Arriving +## FCM Messages Not Arriving -For some users of the plugin they are unable to get messages sent via GCM to show up on their devices. If you are running into this issue try setting the `priority` of the message to `high` in the payload. +For some users of the plugin they are unable to get messages sent via FCM to show up on their devices. If you are running into this issue try setting the `priority` of the message to `high` in the payload. ```javascript { @@ -2029,7 +2037,7 @@ For some users of the plugin they are unable to get messages sent via GCM to sho Here's a sample JSON payload to send a push notification to an Android or iOS device using the FCM app server protocol: -```php +```javascript { "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", /* To send a silent push, omit the entire notification section and send only data */ @@ -2043,7 +2051,7 @@ Here's a sample JSON payload to send a push notification to an Android or iOS de "color": "#AABBCC" /* Android: Icon's background color in #RRGGBB format */ }, /* Optional payload that will be available from data.additionalData */ - "data": { + "data": { "custom_var_1": "custom value here", /* Retrieved on app as data.additionalData.custom_var_1 */ "custom_var_2:" "custom value here" /* Retrieved on app as data.additionalData.custom_var_2 */ } @@ -2051,8 +2059,9 @@ Here's a sample JSON payload to send a push notification to an Android or iOS de ``` More information on how to send push notifications using the FCM HTTP protocol and payload details can be found here: -- [Send messages using the legacy app server protocols](https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_using_the_legacy_app_server_protocols "Send messages using the legacy app server protocols") -- [Firebase Cloud Messaging HTTP Protocol](https://firebase.google.com/docs/cloud-messaging/http-server-ref "Firebase Cloud Messaging HTTP Protocol") + +- [Send messages using the legacy app server protocols](https://firebase.google.com/docs/cloud-messaging/send-message#send_messages_using_the_legacy_app_server_protocols 'Send messages using the legacy app server protocols') +- [Firebase Cloud Messaging HTTP Protocol](https://firebase.google.com/docs/cloud-messaging/http-server-ref 'Firebase Cloud Messaging HTTP Protocol') # Windows Behaviour From 73b927c2e32cb4970e3ea3631cc22ae36b343f77 Mon Sep 17 00:00:00 2001 From: merrygobyebye Date: Tue, 3 Jul 2018 13:48:14 -0700 Subject: [PATCH 48/59] :bug: :apple: Issue #1141: Clear application badge on first launch (#2424) --- src/ios/AppDelegate+notification.m | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/ios/AppDelegate+notification.m b/src/ios/AppDelegate+notification.m index 3c04295ae..b04c47687 100644 --- a/src/ios/AppDelegate+notification.m +++ b/src/ios/AppDelegate+notification.m @@ -154,6 +154,14 @@ - (void)checkUserHasRemoteNotificationsEnabledWithCompletionHandler:(nonnull voi - (void)pushPluginOnApplicationDidBecomeActive:(NSNotification *)notification { NSLog(@"active"); + + NSString *firstLaunchKey = @"firstLaunchKey"; + NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"phonegap-plugin-push"]; + if (![defaults boolForKey:firstLaunchKey]) { + NSLog(@"application first launch: remove badge icon number"); + [defaults setBool:YES forKey:firstLaunchKey]; + [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; + } UIApplication *application = notification.object; From 1ecff81a9eac51b56403948d0092e3ab55a72234 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 9 Jul 2018 09:50:36 -0400 Subject: [PATCH 49/59] :wrench: Disable stalebot --- .github/stale.yml | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 11aee5a1d..000000000 --- a/.github/stale.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - bug - - docs - - enhancement - - feature - - retest -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false From a1e0e465529368d52aaf835c977dbfea54e53639 Mon Sep 17 00:00:00 2001 From: Edouard COMTET Date: Mon, 9 Jul 2018 17:02:48 +0200 Subject: [PATCH 50/59] :memo: improve iOS workaround (#2477) https://github.com/phonegap/phonegap-plugin-push/issues/2318 --- docs/INSTALLATION.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 7377b5219..13a369d65 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -332,6 +332,8 @@ ld: library not found for -lGoogleToolboxForMac Workarounds are to add the platform first and install the plugins later, or to manually run pod install on projectName/platforms/ios. +Another workaround is to go to build phases in your project at Link Binary Libraries and add `libPods-PROJECTNAME.a` and `libGoogleToolboxForMac.a` + ##### Module FirebaseInstanceID not found If you run into an error like: From 2b4748cd89ea14798cc63608ad2f7b3b31ab1798 Mon Sep 17 00:00:00 2001 From: Chris Cant Date: Tue, 14 Aug 2018 19:36:34 +0100 Subject: [PATCH 51/59] clearAll notifications on Android if count zero when in background (#2521) --- docs/PAYLOAD.md | 2 ++ src/android/com/adobe/phonegap/push/FCMService.java | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 6acf4367e..c10d4c7f0 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -60,6 +60,8 @@ The following flowchart attempts to give you a picture of what happens when a pu - If the app is running in the background the push plugin then checks to see if `content-available` exists in the push data. - If `content-available` is set to `1`, then the plugin calls all of your `notification` event handlers. +> Note: if `count` is given as `0` then all notifications are first cleared: always on Android, and if the `count` has gone down on iOS + ## User clicks on notification in notification center - The app starts. diff --git a/src/android/com/adobe/phonegap/push/FCMService.java b/src/android/com/adobe/phonegap/push/FCMService.java index af9ebb028..db1738a72 100644 --- a/src/android/com/adobe/phonegap/push/FCMService.java +++ b/src/android/com/adobe/phonegap/push/FCMService.java @@ -329,6 +329,10 @@ private void showNotificationIfPossible(Context context, Bundle extras) { Log.d(LOG_TAG, "count =[" + badgeCount + "]"); PushPlugin.setApplicationIconBadgeNumber(context, badgeCount); } + if (badgeCount == 0) { + NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + mNotificationManager.cancelAll(); + } Log.d(LOG_TAG, "message =[" + message + "]"); Log.d(LOG_TAG, "title =[" + title + "]"); From d5d2e9d1e712addb5ce7906ae4457ccdb80bcb78 Mon Sep 17 00:00:00 2001 From: Ken Naito Date: Wed, 15 Aug 2018 04:05:27 +0900 Subject: [PATCH 52/59] remove unused variable (#2467) --- src/ios/PushPlugin.m | 186 +++++++++++++++++-------------------------- 1 file changed, 75 insertions(+), 111 deletions(-) diff --git a/src/ios/PushPlugin.m b/src/ios/PushPlugin.m index 8649622e6..4d1edac4c 100644 --- a/src/ios/PushPlugin.m +++ b/src/ios/PushPlugin.m @@ -1,16 +1,16 @@ /* Copyright 2009-2011 Urban Airship Inc. All rights reserved. - + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. Redistributions in binaryform must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided withthe distribution. - + THIS SOFTWARE IS PROVIDED BY THE URBAN AIRSHIP INC``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO @@ -54,11 +54,11 @@ @implementation PushPlugin : CDVPlugin -(void)initRegistration; { NSString * registrationToken = [[FIRInstanceID instanceID] token]; - + if (registrationToken != nil) { NSLog(@"FCM Registration Token: %@", registrationToken); [self setFcmRegistrationToken: registrationToken]; - + id topics = [self fcmTopics]; if (topics != nil) { for (NSString *topic in topics) { @@ -67,12 +67,12 @@ -(void)initRegistration; [pubSub subscribeToTopic:topic]; } } - + [self registerWithToken:registrationToken]; } else { NSLog(@"FCM token is null"); } - + } // FCM refresh token @@ -112,7 +112,7 @@ - (void)didDeleteMessagesOnServer { - (void)unregister:(CDVInvokedUrlCommand*)command; { NSArray* topics = [command argumentAtIndex:0]; - + if (topics != nil) { id pubSub = [FIRMessaging messaging]; for (NSString *topic in topics) { @@ -128,7 +128,7 @@ - (void)unregister:(CDVInvokedUrlCommand*)command; - (void)subscribe:(CDVInvokedUrlCommand*)command; { NSString* topic = [command argumentAtIndex:0]; - + if (topic != nil) { NSLog(@"subscribe from topic: %@", topic); id pubSub = [FIRMessaging messaging]; @@ -144,7 +144,7 @@ - (void)subscribe:(CDVInvokedUrlCommand*)command; - (void)unsubscribe:(CDVInvokedUrlCommand*)command; { NSString* topic = [command argumentAtIndex:0]; - + if (topic != nil) { NSLog(@"unsubscribe from topic: %@", topic); id pubSub = [FIRMessaging messaging]; @@ -165,9 +165,9 @@ - (void)init:(CDVInvokedUrlCommand*)command; if (([voipArg isKindOfClass:[NSString class]] && [voipArg isEqualToString:@"true"]) || [voipArg boolValue]) { [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin VoIP set to true"); - + self.callbackId = command.callbackId; - + PKPushRegistry *pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; pushRegistry.delegate = self; pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; @@ -177,48 +177,48 @@ - (void)init:(CDVInvokedUrlCommand*)command; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onTokenRefresh) name:kFIRInstanceIDTokenRefreshNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendDataMessageFailure:) name:FIRMessagingSendErrorNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sendDataMessageSuccess:) name:FIRMessagingSendSuccessNotification object:nil]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didDeleteMessagesOnServer) name:FIRMessagingMessagesDeletedNotification object:nil]; - + [self.commandDelegate runInBackground:^ { NSLog(@"Push Plugin register called"); self.callbackId = command.callbackId; - + NSArray* topics = [iosOptions objectForKey:@"topics"]; [self setFcmTopics:topics]; - + UNAuthorizationOptions authorizationOptions = UNAuthorizationOptionNone; - + id badgeArg = [iosOptions objectForKey:@"badge"]; id soundArg = [iosOptions objectForKey:@"sound"]; id alertArg = [iosOptions objectForKey:@"alert"]; id clearBadgeArg = [iosOptions objectForKey:@"clearBadge"]; - + if (([badgeArg isKindOfClass:[NSString class]] && [badgeArg isEqualToString:@"true"]) || [badgeArg boolValue]) { authorizationOptions |= UNAuthorizationOptionBadge; } - + if (([soundArg isKindOfClass:[NSString class]] && [soundArg isEqualToString:@"true"]) || [soundArg boolValue]) { authorizationOptions |= UNAuthorizationOptionSound; } - + if (([alertArg isKindOfClass:[NSString class]] && [alertArg isEqualToString:@"true"]) || [alertArg boolValue]) { authorizationOptions |= UNAuthorizationOptionAlert; } - + if (clearBadgeArg == nil || ([clearBadgeArg isKindOfClass:[NSString class]] && [clearBadgeArg isEqualToString:@"false"]) || ![clearBadgeArg boolValue]) { NSLog(@"PushPlugin.register: setting badge to false"); clearBadge = NO; @@ -228,9 +228,9 @@ - (void)init:(CDVInvokedUrlCommand*)command; [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } NSLog(@"PushPlugin.register: clear badge is set to %d", clearBadge); - + isInline = NO; - + NSLog(@"PushPlugin.register: better button setup"); // setup action buttons NSMutableSet *categories = [[NSMutableSet alloc] init]; @@ -239,7 +239,7 @@ - (void)init:(CDVInvokedUrlCommand*)command; for (id key in categoryOptions) { NSLog(@"categories: key %@", key); id category = [categoryOptions objectForKey:key]; - + id yesButton = [category objectForKey:@"yes"]; UNNotificationAction *yesAction; if (yesButton != nil && [yesButton isKindOfClass:[NSDictionary class]]) { @@ -255,10 +255,10 @@ - (void)init:(CDVInvokedUrlCommand*)command; if (maybeButton != nil && [maybeButton isKindOfClass:[NSDictionary class]]) { maybeAction = [self createAction: maybeButton]; } - + // Identifier to include in your push payload and local notification NSString *identifier = key; - + NSMutableArray *actions = [[NSMutableArray alloc] init]; if (yesButton != nil) { [actions addObject:yesAction]; @@ -269,39 +269,39 @@ - (void)init:(CDVInvokedUrlCommand*)command; if (maybeButton != nil) { [actions addObject:maybeAction]; } - + UNNotificationCategory *notificationCategory = [UNNotificationCategory categoryWithIdentifier:identifier actions:actions intentIdentifiers:@[] options:UNNotificationCategoryOptionNone]; - + NSLog(@"Adding category %@", key); [categories addObject:notificationCategory]; } - + } - + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center setNotificationCategories:categories]; [self handleNotificationSettingsWithAuthorizationOptions:[NSNumber numberWithInteger:authorizationOptions]]; - + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotificationSettings:) name:pushPluginApplicationDidBecomeActiveNotification object:nil]; - - - + + + // Read GoogleService-Info.plist NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info" ofType:@"plist"]; - + // Load the file content and read the data into arrays NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path]; fcmSenderId = [dict objectForKey:@"GCM_SENDER_ID"]; BOOL isGcmEnabled = [[dict valueForKey:@"IS_GCM_ENABLED"] boolValue]; - + NSLog(@"FCM Sender ID %@", fcmSenderId); - + // GCM options [self setFcmSenderId: fcmSenderId]; if(isGcmEnabled && [[self fcmSenderId] length] > 0) { @@ -317,7 +317,7 @@ - (void)init:(CDVInvokedUrlCommand*)command; [self setUsesFCM:NO]; } id fcmSandboxArg = [iosOptions objectForKey:@"fcmSandbox"]; - + [self setFcmSandbox:@NO]; if ([self usesFCM] && (([fcmSandboxArg isKindOfClass:[NSString class]] && [fcmSandboxArg isEqualToString:@"true"]) || @@ -326,14 +326,14 @@ - (void)init:(CDVInvokedUrlCommand*)command; NSLog(@"Using FCM Sandbox"); [self setFcmSandbox:@YES]; } - + if (notificationMessage) { // if there is a pending startup notification dispatch_async(dispatch_get_main_queue(), ^{ // delay to allow JS event handlers to be setup [self performSelector:@selector(notificationReceived) withObject:nil afterDelay: 0.5]; }); } - + }]; } } @@ -342,7 +342,7 @@ - (UNNotificationAction *)createAction:(NSDictionary *)dictionary { NSString *identifier = [dictionary objectForKey:@"callback"]; NSString *title = [dictionary objectForKey:@"title"]; UNNotificationActionOptions options = UNNotificationActionOptionNone; - + id mode = [dictionary objectForKey:@"foreground"]; if (mode != nil && (([mode isKindOfClass:[NSString class]] && [mode isEqualToString:@"true"]) || [mode boolValue])) { options |= UNNotificationActionOptionForeground; @@ -351,7 +351,7 @@ - (UNNotificationAction *)createAction:(NSDictionary *)dictionary { if (destructive != nil && (([destructive isKindOfClass:[NSString class]] && [destructive isEqualToString:@"true"]) || [destructive boolValue])) { options |= UNNotificationActionOptionDestructive; } - + return [UNNotificationAction actionWithIdentifier:identifier title:title options:options]; } @@ -361,59 +361,24 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { return; } NSLog(@"Push Plugin register success: %@", deviceToken); - - NSMutableDictionary *results = [NSMutableDictionary dictionary]; + NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString: @" " withString: @""]; - [results setValue:token forKey:@"deviceToken"]; - #if !TARGET_IPHONE_SIMULATOR - // Get Bundle Info for Remote Registration (handy if you have more than one app) - [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] forKey:@"appName"]; - [results setValue:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] forKey:@"appVersion"]; - + // Check what Notifications the user has turned on. We registered for all three, but they may have manually disabled some or all of them. - + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; __weak PushPlugin *weakSelf = self; [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { - - // Set the defaults to disabled unless we find otherwise... - NSString *pushBadge = @"disabled"; - NSString *pushAlert = @"disabled"; - NSString *pushSound = @"disabled"; - - // Check what Registered Types are turned on. This is a bit tricky since if two are enabled, and one is off, it will return a number 2... not telling you which - // one is actually disabled. So we are literally checking to see if rnTypes matches what is turned on, instead of by number. The "tricky" part is that the - // single notification types will only match if they are the ONLY one enabled. Likewise, when we are checking for a pair of notifications, it will only be - // true if those two notifications are on. This is why the code is written this way - if(settings.authorizationStatus & UNAuthorizationOptionBadge){ - pushBadge = @"enabled"; - } - if(settings.authorizationStatus & UNAuthorizationOptionAlert) { - pushAlert = @"enabled"; - } - if(settings.authorizationStatus & UNAuthorizationOptionSound) { - pushSound = @"enabled"; - } - - [results setValue:pushBadge forKey:@"pushBadge"]; - [results setValue:pushAlert forKey:@"pushAlert"]; - [results setValue:pushSound forKey:@"pushSound"]; - - // Get the users Device Model, Display Name, Token & Version Number - UIDevice *dev = [UIDevice currentDevice]; - [results setValue:dev.name forKey:@"deviceName"]; - [results setValue:dev.model forKey:@"deviceModel"]; - [results setValue:dev.systemVersion forKey:@"deviceSystemVersion"]; - + if(![weakSelf usesFCM]) { [weakSelf registerWithToken: token]; } }]; - - + + #endif } @@ -429,21 +394,21 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error - (void)notificationReceived { NSLog(@"Notification received"); - + if (notificationMessage && self.callbackId != nil) { NSMutableDictionary* message = [NSMutableDictionary dictionaryWithCapacity:4]; NSMutableDictionary* additionalData = [NSMutableDictionary dictionaryWithCapacity:4]; - - + + for (id key in notificationMessage) { if ([key isEqualToString:@"aps"]) { id aps = [notificationMessage objectForKey:@"aps"]; - + for(id key in aps) { NSLog(@"Push Plugin key: %@", key); id value = [aps objectForKey:key]; - + if ([key isEqualToString:@"alert"]) { if ([value isKindOfClass:[NSDictionary class]]) { for (id messageKey in value) { @@ -476,26 +441,26 @@ - (void)notificationReceived { [additionalData setObject:[notificationMessage objectForKey:key] forKey:key]; } } - + if (isInline) { [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"foreground"]; } else { [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"foreground"]; } - + if (coldstart) { [additionalData setObject:[NSNumber numberWithBool:YES] forKey:@"coldstart"]; } else { [additionalData setObject:[NSNumber numberWithBool:NO] forKey:@"coldstart"]; } - + [message setObject:additionalData forKey:@"additionalData"]; - + // send notification message CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:message]; [pluginResult setKeepCallbackAsBool:YES]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId]; - + self.coldstart = NO; self.notificationMessage = nil; } @@ -505,9 +470,9 @@ - (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command { NSMutableDictionary* options = [command.arguments objectAtIndex:0]; int badge = [[options objectForKey:@"badge"] intValue] ?: 0; - + [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge]; - + NSString* message = [NSString stringWithFormat:@"app badge count set to %d", badge]; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; @@ -516,7 +481,7 @@ - (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command - (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command { NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber; - + CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsInt:(int)badge]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; } @@ -524,7 +489,7 @@ - (void)getApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command - (void)clearAllNotifications:(CDVInvokedUrlCommand *)command { [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; - + NSString* message = [NSString stringWithFormat:@"cleared all notifications"]; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; @@ -571,17 +536,17 @@ -(void)failWithMessage:(NSString *)myCallbackId withMsg:(NSString *)message with { NSString *errorMessage = (error) ? [NSString stringWithFormat:@"%@ - %@", message, [error localizedDescription]] : message; CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:errorMessage]; - + [self.commandDelegate sendPluginResult:commandResult callbackId:myCallbackId]; } -(void) finish:(CDVInvokedUrlCommand*)command { NSLog(@"Push Plugin finish called"); - + [self.commandDelegate runInBackground:^ { NSString* notId = [command.arguments objectAtIndex:0]; - + dispatch_async(dispatch_get_main_queue(), ^{ [NSTimer scheduledTimerWithTimeInterval:0.1 target:self @@ -589,7 +554,7 @@ -(void) finish:(CDVInvokedUrlCommand*)command userInfo:notId repeats:NO]; }); - + CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK]; [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; }]; @@ -598,9 +563,9 @@ -(void) finish:(CDVInvokedUrlCommand*)command -(void)stopBackgroundTask:(NSTimer*)timer { UIApplication *app = [UIApplication sharedApplication]; - + NSLog(@"Push Plugin stopBackgroundTask called"); - + if (handlerObj) { NSLog(@"Push Plugin handlerObj"); completionHandler = [handlerObj[[timer userInfo]] copy]; @@ -619,14 +584,14 @@ - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPush NSLog(@"VoIPPush Plugin register error - No device token:"); return; } - + NSLog(@"VoIPPush Plugin register success"); const unsigned *tokenBytes = [credentials.token bytes]; NSString *sToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x", ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]), ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]), ntohl(tokenBytes[6]), ntohl(tokenBytes[7])]; - + [self registerWithToken:sToken]; } @@ -646,10 +611,10 @@ - (void)handleNotificationSettingsWithAuthorizationOptions:(NSNumber *)authoriza { UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; UNAuthorizationOptions authorizationOptions = [authorizationOptionsObject unsignedIntegerValue]; - + __weak UNUserNotificationCenter *weakCenter = center; [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { - + switch (settings.authorizationStatus) { case UNAuthorizationStatusNotDetermined: { @@ -682,4 +647,3 @@ - (void)registerForRemoteNotifications } @end - From 110e3c2996b9455509c4eb0e3a8ce4f42764535c Mon Sep 17 00:00:00 2001 From: merrygobyebye Date: Wed, 15 Aug 2018 13:28:02 -0700 Subject: [PATCH 53/59] :apple: :sparkles: :memo: Issue #2191: Implement the ability to clear one notification on iOS and update documentation (#2478) --- docs/API.md | 4 ++-- docs/PAYLOAD.md | 4 +++- src/ios/PushPlugin.h | 1 + src/ios/PushPlugin.m | 22 ++++++++++++++++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/API.md b/docs/API.md index 178125c82..bde537682 100644 --- a/docs/API.md +++ b/docs/API.md @@ -17,7 +17,7 @@ - [push.getApplicationIconBadgeNumber() - iOS & Android only](#pushgetapplicationiconbadgenumbersuccesshandler-errorhandler---ios--android-only) - [push.finish() - iOS only](#pushfinishsuccesshandler-errorhandler-id---ios-only) - [push.clearAllNotifications() - iOS & Android only](#pushclearallnotificationssuccesshandler-errorhandler---ios--android-only) -- [push.clearNotification() - Android only](#pushclearnotificationid-successhandler-errorhandler---android-only) +- [push.clearNotification() - iOS & Android only](#pushclearnotificationid-successhandler-errorhandler---ios--android-only) ## PushNotification.init(options) @@ -592,7 +592,7 @@ push.clearAllNotifications( ); ``` -## push.clearNotification(id, successHandler, errorHandler) - Android only +## push.clearNotification(id, successHandler, errorHandler) - iOS & Android only Tells the OS to clear the notification that corresponds to the id argument, from the Notification Center diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index c10d4c7f0..9202b1e54 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -161,6 +161,7 @@ The JSON message can contain the following fields, see [Apple developer docs](ht "thread-id": "id", // Provide this key with a string value that represents the app-specific identifier for grouping notifications "sound": "default" // play default sound, or custom sound, see [iOS Sound](#sound-1) section }, + "notId": 1, "custom_key1": "value1", "custom_key2": "value2" } @@ -173,7 +174,7 @@ This is the JSON-encoded format you can send via AWS-SNS's web UI: ```json { "APNS_SANDBOX": - "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" + "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"notId\":1,\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" } ``` @@ -203,6 +204,7 @@ Note that the properties are "normalized" accross platforms, so this is passed t "coldstart": false, "foreground": false, "content-available": "0", + "notId": 1, "custom_key1": "value1", "custom_key2": "value2", "launch-image": "The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider", diff --git a/src/ios/PushPlugin.h b/src/ios/PushPlugin.h index 4735924c2..4b6ec930a 100644 --- a/src/ios/PushPlugin.h +++ b/src/ios/PushPlugin.h @@ -59,6 +59,7 @@ - (void)unregister:(CDVInvokedUrlCommand*)command; - (void)subscribe:(CDVInvokedUrlCommand*)command; - (void)unsubscribe:(CDVInvokedUrlCommand*)command; +- (void)clearNotification:(CDVInvokedUrlCommand*)command; - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken; - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error; diff --git a/src/ios/PushPlugin.m b/src/ios/PushPlugin.m index 4d1edac4c..0290c8ecc 100644 --- a/src/ios/PushPlugin.m +++ b/src/ios/PushPlugin.m @@ -466,6 +466,28 @@ - (void)notificationReceived { } } +- (void)clearNotification:(CDVInvokedUrlCommand *)command +{ + NSNumber *notId = [command.arguments objectAtIndex:0]; + [[UNUserNotificationCenter currentNotificationCenter] getDeliveredNotificationsWithCompletionHandler:^(NSArray * _Nonnull notifications) { + /* + * If the server generates a unique "notId" for every push notification, there should only be one match in these arrays, but if not, it will delete + * all notifications with the same value for "notId" + */ + NSPredicate *matchingNotificationPredicate = [NSPredicate predicateWithFormat:@"request.content.userInfo.notId == %@", notId]; + NSArray *matchingNotifications = [notifications filteredArrayUsingPredicate:matchingNotificationPredicate]; + NSMutableArray *matchingNotificationIdentifiers = [NSMutableArray array]; + for (UNNotification *notification in matchingNotifications) { + [matchingNotificationIdentifiers addObject:notification.request.identifier]; + } + [[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:matchingNotificationIdentifiers]; + + NSString *message = [NSString stringWithFormat:@"Cleared notification with ID: %@", notId]; + CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message]; + [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId]; + }]; +} + - (void)setApplicationIconBadgeNumber:(CDVInvokedUrlCommand *)command { NSMutableDictionary* options = [command.arguments objectAtIndex:0]; From 4cf09ab85848e771c5c80283690a634e4a478b75 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Wed, 15 Aug 2018 17:19:12 -0400 Subject: [PATCH 54/59] =?UTF-8?q?=F0=9F=90=9B=F0=9F=90=A7=20Issue=20#2489:?= =?UTF-8?q?=20Crash=20reports=20on=20Google=20Play=20Store=20-=20firebase?= =?UTF-8?q?=20IllegalStateException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/adobe/phonegap/push/PushPlugin.java | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/android/com/adobe/phonegap/push/PushPlugin.java b/src/android/com/adobe/phonegap/push/PushPlugin.java index 121bd5a25..690b37776 100644 --- a/src/android/com/adobe/phonegap/push/PushPlugin.java +++ b/src/android/com/adobe/phonegap/push/PushPlugin.java @@ -50,6 +50,7 @@ public class PushPlugin extends CordovaPlugin implements PushConstants { /** * Gets the application context from cordova's main activity. + * * @return the application context */ private Context getApplicationContext() { @@ -120,7 +121,8 @@ private void createChannel(JSONObject channel) throws JSONException { mChannel.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI, audioAttributes); } - // If vibration settings is an array set vibration pattern, else set enable vibration. + // If vibration settings is an array set vibration pattern, else set enable + // vibration. JSONArray pattern = channel.optJSONArray(CHANNEL_VIBRATION); if (pattern != null) { int patternLength = pattern.length(); @@ -146,8 +148,8 @@ private void createDefaultNotificationChannelIfNeeded(JSONObject options) { final NotificationManager notificationManager = (NotificationManager) cordova.getActivity() .getSystemService(Context.NOTIFICATION_SERVICE); List channels = notificationManager.getNotificationChannels(); - - for (int i=0; i Date: Thu, 16 Aug 2018 17:14:17 -0400 Subject: [PATCH 55/59] :memo: Properly encode JSON payload examples --- docs/PAYLOAD.md | 603 +++++++++++++++++++++++++----------------------- 1 file changed, 312 insertions(+), 291 deletions(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 9202b1e54..95ab4dd31 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -112,8 +112,7 @@ var gcm_message = JSON.stringify({ ```json { - "GCM": - "{\"priority\":\"normal\",\"data\":{\"title\":\"A short string describing the purpose of the notification\",\"message\":\"The text of the alert message\",\"count\":5,\"sound\": \"default\",\"notId\":1,\"content-available\":\"0\",\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}}", + "GCM": "{\"priority\":\"normal\",\"data\":{\"title\":\"A short string describing the purpose of the notification\",\"message\":\"The text of the alert message\",\"count\":5,\"sound\": \"default\",\"notId\":1,\"content-available\":\"0\",\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}}", "default": "plain text message again" } ``` @@ -146,10 +145,11 @@ Note that the properties are "normalized" across platforms, so this is passed to The JSON message can contain the following fields, see [Apple developer docs](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW5) for a complete list -```javascript +```json { "aps": { - "alert": { // alternatively just a string: "Your Message", + "alert": { + // alternatively just a string: "Your Message", "title": "A short string describing the purpose of the notification", "body": "The text of the alert message", // localization of message is possible @@ -159,7 +159,7 @@ The JSON message can contain the following fields, see [Apple developer docs](ht "content-available": "0", // configure background updates, see below "category": "identifier", // Provide this key with a string value that represents the notification’s type "thread-id": "id", // Provide this key with a string value that represents the app-specific identifier for grouping notifications - "sound": "default" // play default sound, or custom sound, see [iOS Sound](#sound-1) section + "sound": "default" // play default sound, or custom sound, see [iOS Sound](#sound-1) section }, "notId": 1, "custom_key1": "value1", @@ -173,8 +173,7 @@ This is the JSON-encoded format you can send via AWS-SNS's web UI: ```json { - "APNS_SANDBOX": - "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"notId\":1,\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" + "APNS_SANDBOX": "{\"aps\":{\"alert\":{\"title\":\"A short string describing the purpose of the notification\",\"body\":\"The text of the alert message\",\"launch-image\":\"The filename of an image file in the app bundle, with or without the filename extension. The image is used as the launch image when users tap the action button or move the action slider\"},\"badge\":5,\"content-available\":\"0\",\"category\":\"identifier\",\"thread-id\":\"id\",\"sound\":\"default\"},\"notId\":1,\"custom_key1\":\"value1\",\"custom_key2\":\"value2\"}" } ``` @@ -193,7 +192,7 @@ Note: use "APNS" to send to an app signed and released to production or "APNS_SA This message is received in the `push.on("notification")` handler as follows. Note that the properties are "normalized" accross platforms, so this is passed to the app on iOS: -```javascript +```json { "count": 5, // "badge" is converted to "count" "message": "The text of the alert message", @@ -281,25 +280,25 @@ Plugin supported localization from resources for: title, message and summaryText You may use simple link to locale constant. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": {"locKey": "push_app_title"}, - "message": "Simple non-localizable text for message!" - } + "registration_ids": ["my device id"], + "data": { + "title": { "locKey": "push_app_title" }, + "message": "Simple non-localizable text for message!" + } } ``` Or use localization with formatted constants. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": {"locKey": "push_app_title"}, - "message": {"locKey": "push_message_fox", "locData": ["fox", "dog"]} - } + "registration_ids": ["my device id"], + "data": { + "title": { "locKey": "push_app_title" }, + "message": { "locKey": "push_message_fox", "locData": ["fox", "dog"] } + } } ``` @@ -458,14 +457,14 @@ Would look for the _twitter_ image in the `res/drawable` folder and produce the The second is the _assets_ folder in your app. This JSON sent from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Large Icon", - "message": "Loaded from assets folder", - "image": "www/image/logo.png" - } + "registration_ids": ["my device id"], + "data": { + "title": "Large Icon", + "message": "Loaded from assets folder", + "image": "www/image/logo.png" + } } ``` @@ -503,14 +502,14 @@ Would look for the _logo.png_ file in the assets/www/img folder. Since your apps The third is the remote _URL_. This JSON sent from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Large Icon", - "message": "Loaded from URL", - "image": "https://dl.dropboxusercontent.com/u/887989/antshot.png" - } + "registration_ids": ["my device id"], + "data": { + "title": "Large Icon", + "message": "Loaded from URL", + "image": "https://dl.dropboxusercontent.com/u/887989/antshot.png" + } } ``` @@ -548,21 +547,21 @@ Produces the following notification. Finally, the Material UI guidelines recommend using a circular icon for the large icon if the subject of the image is a person. This JSON sent from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Large Circular Icon", - "message": "Loaded from URL", - "image": "https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg", - "image-type": "circle" - } + "registration_ids": ["my device id"], + "data": { + "title": "Large Circular Icon", + "message": "Loaded from URL", + "image": "https://pbs.twimg.com/profile_images/837060031895896065/VHIQ4oUf_400x400.jpg", + "image-type": "circle" + } } ``` Here is an example using fcm-node that sends the above JSON: -````javascript +```javascript const FCM = require('fcm-node'); // Replace these with your own values. const apiKey = 'replace with API key'; @@ -598,53 +597,53 @@ Produces the following notification. For Android there are three special values for sound you can use. The first is `default` which will play the phones default notification sound. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Default", - "message": "Plays default notification sound", - "soundname": "default" - } + "registration_ids": ["my device id"], + "data": { + "title": "Default", + "message": "Plays default notification sound", + "soundname": "default" + } } -```` +``` Then second is `ringtone` which will play the phones default ringtone sound. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Ringtone", - "message": "Plays default ringtone sound", - "soundname": "ringtone" - } + "registration_ids": ["my device id"], + "data": { + "title": "Ringtone", + "message": "Plays default ringtone sound", + "soundname": "ringtone" + } } ``` The third is the empty string which will cause for the playing of sound to be skipped. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Silece", - "message": "Skips playing any sound", - "soundname": "" - } + "registration_ids": ["my device id"], + "data": { + "title": "Silece", + "message": "Skips playing any sound", + "soundname": "" + } } ``` In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. Then send the follow JSON from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Sound Test", - "message": "Loaded res/raw", - "soundname": "test" - } + "registration_ids": ["my device id"], + "data": { + "title": "Sound Test", + "message": "Loaded res/raw", + "soundname": "test" + } } ``` @@ -684,13 +683,13 @@ By default when using this plugin on Android each notification that your app rec If you want to see multiple notifications in the shade you will need to provide a notification ID as part of the push data sent to the app. For instance if you send: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 1" - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 1" + } } ``` @@ -723,13 +722,13 @@ fcm.send(message, (err, response) => { Followed by: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 2" - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 2" + } } ``` @@ -762,14 +761,14 @@ fcm.send(message, (err, response) => { You will only see "Push number 2" in the shade. However, if you send: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 1", - "notId": 1 - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 1", + "notId": 1 + } } ``` @@ -803,14 +802,14 @@ fcm.send(message, (err, response) => { and: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 2", - "notId": 2 - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 2", + "notId": 2 + } } ``` @@ -848,15 +847,15 @@ You will see both "Push number 1" and "Push number 2" in the shade. A better alternative to stacking your notifications is to use the inbox style to have up to 8 lines of notification text in a single notification. If you send the following JSON from FCM you will see: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "My Title", - "message": "My first message", - "style": "inbox", - "summaryText": "There are %n% notifications" - } + "registration_ids": ["my device id"], + "data": { + "title": "My Title", + "message": "My first message", + "style": "inbox", + "summaryText": "There are %n% notifications" + } } ``` @@ -895,15 +894,15 @@ It will produce a normal looking notification: But, if you follow it up with subsequent notifications like: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "My Title", - "message": "My second message", - "style": "inbox", - "summaryText": "There are %n% notifications" - } + "registration_ids": ["my device id"], + "data": { + "title": "My Title", + "message": "My second message", + "style": "inbox", + "summaryText": "There are %n% notifications" + } } ``` @@ -963,17 +962,27 @@ push.on('snooze', data => { If you wish to include an icon along with the button name, they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "AUX Scrum", - "message": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", - "actions": [ - { "icon": "emailGuests", "title": "EMAIL GUESTS", "callback": "emailGuests", "foreground": true}, - { "icon": "snooze", "title": "SNOOZE", "callback": "snooze", "foreground": false} - ] - } + "registration_ids": ["my device id"], + "data": { + "title": "AUX Scrum", + "message": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", + "actions": [ + { + "icon": "emailGuests", + "title": "EMAIL GUESTS", + "callback": "emailGuests", + "foreground": true + }, + { + "icon": "snooze", + "title": "SNOOZE", + "callback": "snooze", + "foreground": false + } + ] + } } ``` @@ -1026,17 +1035,29 @@ Android N introduces a new capability for push notifications, the in line reply Your notification can include action buttons. If you wish to include an icon along with the button name they must be placed in the `res/drawable` directory of your Android project. Then you can send the following JSON from FCM: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "AUX Scrum", - "message": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", - "actions": [ - { "icon": "emailGuests", "title": "EMAIL GUESTS", "callback": "emailGuests", "foreground": false, "inline": true, "replyLabel": "Enter your reply here" }, - { "icon": "snooze", "title": "SNOOZE", "callback": "snooze", "foreground": false} - ] - } + "registration_ids": ["my device id"], + "data": { + "title": "AUX Scrum", + "message": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", + "actions": [ + { + "icon": "emailGuests", + "title": "EMAIL GUESTS", + "callback": "emailGuests", + "foreground": false, + "inline": true, + "replyLabel": "Enter your reply here" + }, + { + "icon": "snooze", + "title": "SNOOZE", + "callback": "snooze", + "foreground": false + } + ] + } } ``` @@ -1085,7 +1106,7 @@ when the user clicks on the Email Guests button whilst using Android N and great Then your app's `on('notification')` event handler will be called without the app being brought to the foreground and the event data would be: -``` +```json { "title": "AUX Scrum", "message": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", @@ -1132,14 +1153,14 @@ and the text data that the user typed would be located in `data.additionalData.i You can use a Led notifcation and choose the color of it. Just add a `ledColor` field in your notification in the ARGB format array: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Green LED", - "message": "This is my message with a Green LED", - "ledColor": [0, 0, 255, 0] - } + "registration_ids": ["my device id"], + "data": { + "title": "Green LED", + "message": "This is my message with a Green LED", + "ledColor": [0, 0, 255, 0] + } } ``` @@ -1175,14 +1196,14 @@ fcm.send(message, (err, response) => { You can set a Vibration Pattern for your notifications. Just add a `vibrationPattern` field in your notification: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Vibration Pattern", - "message": "Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms", - "vibrationPattern": [2000, 1000, 500, 500] - } + "registration_ids": ["my device id"], + "data": { + "title": "Vibration Pattern", + "message": "Device should wait for 2 seconds, vibrate for 1 second then be silent for 500 ms then vibrate for 500 ms", + "vibrationPattern": [2000, 1000, 500, 500] + } } ``` @@ -1219,14 +1240,14 @@ fcm.send(message, (err, response) => { You can set a priority parameter for your notifications. This priority value determines where the push notification will be put in the notification shade. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. Add a `priority` field in your notification. -2: minimum, -1: low, 0: default , 1: high, 2: maximum priority. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "This is a maximum priority Notification", - "message": "This notification should appear in front of all others", - "priority": 2 - } + "registration_ids": ["my device id"], + "data": { + "title": "This is a maximum priority Notification", + "message": "This notification should appear in front of all others", + "priority": 2 + } } ``` @@ -1264,16 +1285,16 @@ Do not confuse this with the FCM option of setting the [delivery priority of the Perhaps you want to include a large picture in the notification that you are sending to your users. Luckily you can do that too by sending the following JSON from FCM. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Big Picture", - "message": "This is my big picture message", - "style": "picture", - "picture": "http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg", - "summaryText": "The internet is built on cat pictures" - } + "registration_ids": ["my device id"], + "data": { + "title": "Big Picture", + "message": "This is my big picture message", + "style": "picture", + "picture": "http://36.media.tumblr.com/c066cc2238103856c9ac506faa6f3bc2/tumblr_nmstmqtuo81tssmyno1_1280.jpg", + "summaryText": "The internet is built on cat pictures" + } } ``` @@ -1405,15 +1426,15 @@ If you do not want this type of behaviour, just omit `"content-available": 1` fr The FCM docs will tell you to send a data payload of: -```javascript +```json { - "registration_ids": ["my device id"], - "content_available": true, - "data": { - "title": "Test Push", - "message": "Push number 1", - "info": "super secret info", - } + "registration_ids": ["my device id"], + "content_available": true, + "data": { + "title": "Test Push", + "message": "Push number 1", + "info": "super secret info" + } } ``` @@ -1421,15 +1442,15 @@ Where the `content_available` property is part of the main payload object. Setti Instead move `content_available: true` into the `data` object of the payload. The property name changes slightly to use a `-` instead of an `_`. So, `content_available` becomes `content-available` and `true` becomes `1` as per the example below: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Test Push", - "message": "Push number 1", - "info": "super secret info", - "content-available": "1" - } + "registration_ids": ["my device id"], + "data": { + "title": "Test Push", + "message": "Push number 1", + "info": "super secret info", + "content-available": "1" + } } ``` @@ -1478,14 +1499,14 @@ This should add the correct code to the `MainActivity` class. If you add `force-start: 1` to the data payload the application will be restarted in background even if it was force closed. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Force Start", - "message": "This notification should restart the app", - "force-start": 1 - } + "registration_ids": ["my device id"], + "data": { + "title": "Force Start", + "message": "This notification should restart the app", + "force-start": 1 + } } ``` @@ -1521,15 +1542,15 @@ fcm.send(message, (err, response) => { By default, when a notification arrives and 'content-available' is set to '1', the plugin will try to deliver the data payload even if the app is not running. In that case, the payload is cached and may be delivered when the app is started again. To disable this behavior, you can set a `no-cache` flag in the notification payload. 0: caching enabled (default), 1: caching disabled. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Push without cache", - "message": "When the app is closed, this notification will not be cached", - "content-available": "1", - "no-cache": "1" - } + "registration_ids": ["my device id"], + "data": { + "title": "Push without cache", + "message": "When the app is closed, this notification will not be cached", + "content-available": "1", + "no-cache": "1" + } } ``` @@ -1537,14 +1558,14 @@ By default, when a notification arrives and 'content-available' is set to '1', t You can set a visibility parameter for your notifications. Just add a `visibility` field in your notification. -1: secret, 0: private (default), 1: public. `Secret` shows only the most minimal information, excluding even the notification's icon. `Private` shows basic information about the existence of this notification, including its icon and the name of the app that posted it. The rest of the notification's details are not displayed. `Public` Shows the notification's full content. -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "This is a maximum public Notification", - "message": "This notification should appear in front of all others", - "visibility": 1 - } + "registration_ids": ["my device id"], + "data": { + "title": "This is a maximum public Notification", + "message": "This notification should appear in front of all others", + "visibility": 1 + } } ``` @@ -1580,14 +1601,14 @@ fcm.send(message, (err, response) => { Set whether this is an "ongoing" notification. Ongoing notifications cannot be dismissed by the user, so your application or service must take care of canceling them. They are typically used to indicate a background task that the user is actively engaged with (e.g., playing music) or is pending in some way and therefore occupying the device (e.g., a file download, sync operation, active network connection). -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "This is an ongoing Notification", - "message": "Some people also call me a sticky notification", - "ongoing": true - } + "registration_ids": ["my device id"], + "data": { + "title": "This is an ongoing Notification", + "message": "Some people also call me a sticky notification", + "ongoing": true + } } ``` @@ -1625,14 +1646,14 @@ On Android not all launchers support badges. In order for us to set badges we us In order to set the badge number, you will need to include the `badge` property in your push payload as below: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Badge Test", - "message": "Badges, we don't need no stinking badges", - "badge": 7 - } + "registration_ids": ["my device id"], + "data": { + "title": "Badge Test", + "message": "Badges, we don't need no stinking badges", + "badge": 7 + } } ``` @@ -1685,14 +1706,14 @@ curl 'https://notify.twilio.com/v1/Services/IS1e928b239609199df31d461071fd3d23/N The JSON received by your app will comply with the standards described in the sections above: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Hello Bob!", - "message": "Hello Bob! Twilio Notify + Phonegap is awesome!", - "sound": "chime" - } + "registration_ids": ["my device id"], + "data": { + "title": "Hello Bob!", + "message": "Hello Bob! Twilio Notify + Phonegap is awesome!", + "sound": "chime" + } } ``` @@ -1726,14 +1747,14 @@ However, if you want to take advantage of multiple channels in your app, you can Now when you send a push payload to the device you'll need to specify a channel: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "Hello Bob!", - "message": "Phonegap is awesome!", - "android_channel_id": "testchannel2" - } + "registration_ids": ["my device id"], + "data": { + "title": "Hello Bob!", + "message": "Phonegap is awesome!", + "android_channel_id": "testchannel2" + } } ``` @@ -1747,23 +1768,23 @@ In order for your notification to play a custom sound, you will need to add the Then send the follow JSON from APNS: -```javascript +```json { - "aps": { - "alert": "Test sound", - "sound": "sub.caf" - } + "aps": { + "alert": "Test sound", + "sound": "sub.caf" + } } ``` If you want the default sound to play upon receipt of push, use this payload: -```javascript +```json { - "aps": { - "alert": "Test sound", - "sound": "default" - } + "aps": { + "alert": "Test sound", + "sound": "default" + } } ``` @@ -1779,13 +1800,13 @@ First the JSON you send from APNS will need to include `"content-available": 1` For instance the following JSON: -```javascript +```json { - "aps": { - "alert": "Test background push", - "content-available": 1 - }, - "notId": 1 // unique ID you generate + "aps": { + "alert": "Test background push", + "content-available": 1 + }, + "notId": 1 // unique ID you generate } ``` @@ -1795,14 +1816,14 @@ will produce a notification in the notification shade and call your `on('notific However if you want your `on('notification')` event handler called but no notification to be shown in the shader you would omit the `alert` property and send the following JSON to APNS: -```javascript +```json { - "aps": { - "data": "Test silent background push", - "moredata": "Do more stuff", - "content-available": 1 - }, - "notId": 2 // unique ID you generate + "aps": { + "data": "Test silent background push", + "moredata": "Do more stuff", + "content-available": 1 + }, + "notId": 2 // unique ID you generate } ``` @@ -1944,13 +1965,13 @@ You may notice that the `finish` method now takes `success`, `failure` and `id` Then you will need to set the `category` value in your `aps` payload to match one of the objects in the `categories` object. As well you _should_ set a `notId` property in the root of payload object. This is the parameter you pass to the `finish` method in order to tell the operating system that the processing of the push event is done. -```javascript +```json { - "aps": { - "alert": "This is a notification that will be displayed ASAP.", - "category": "invite" - }, - "notId": "1" + "aps": { + "alert": "This is a notification that will be displayed ASAP.", + "category": "invite" + }, + "notId": "1" } ``` @@ -1964,14 +1985,14 @@ If your users clicks on the main body of the notification your app will be opene If you are using FCM to send push messages on iOS you will need to send a different payload in order for the action buttons to be present in the notification shade. You'll need to use the `click-action` property in order to specify the category. -```javascript +```json { - "registration_ids": ["my device id"], - "notification": { - "title": "AUX Scrum", - "body": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", - "click-action": "invite" - } + "registration_ids": ["my device id"], + "notification": { + "title": "AUX Scrum", + "body": "Scrum: Daily touchbase @ 10am Please be on time so we can cover everything on the agenda.", + "click-action": "invite" + } } ``` @@ -1979,34 +2000,34 @@ If you are using FCM to send push messages on iOS you will need to send a differ FCM on iOS is a different animal. The way you send data via FCM on Android is like: -```javascript +```json { - "registration_ids": ["my device id"], - "data": { - "title": "My Title", - "message": "My message", - "key1": "data 1", - "key2": "data 2" - } + "registration_ids": ["my device id"], + "data": { + "title": "My Title", + "message": "My message", + "key1": "data 1", + "key2": "data 2" + } } ``` will produce a `notification` event with the following data: -```javascript +```json { - "title": "My Title", - "message": "My message", - "additionalData": { - "key1": "data 1", - "key2": "data 2" - } + "title": "My Title", + "message": "My message", + "additionalData": { + "key1": "data 1", + "key2": "data 2" + } } ``` but in order for the same `notification` event you would need to send your push to FCM iOS in a slight different format: -```javascript +```json { "registration_ids": ["my device id"], "notification": { @@ -2026,14 +2047,14 @@ The `title` and `body` need to be in the `notification` part of the payload in o For some users of the plugin they are unable to get messages sent via FCM to show up on their devices. If you are running into this issue try setting the `priority` of the message to `high` in the payload. -```javascript +```json { - "registration_ids": ["my device id"], - "notification": { - "title": "My Title", - "body": "My message" - }, - "priority": "high" + "registration_ids": ["my device id"], + "notification": { + "title": "My Title", + "body": "My message" + }, + "priority": "high" } ``` @@ -2041,7 +2062,7 @@ For some users of the plugin they are unable to get messages sent via FCM to sho Here's a sample JSON payload to send a push notification to an Android or iOS device using the FCM app server protocol: -```javascript +```json { "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...", /* To send a silent push, omit the entire notification section and send only data */ From e056943c5532407c382ef75c34ed3cc79cc778e2 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Thu, 16 Aug 2018 17:18:14 -0400 Subject: [PATCH 56/59] =?UTF-8?q?=F0=9F=93=9D=20Issue=20#2507:=20Delete=20?= =?UTF-8?q?Android=20channel=20and=20recreate=20it=20in=20order=20to=20cha?= =?UTF-8?q?nge=20sound=20file=3F=3F=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/PAYLOAD.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 95ab4dd31..08959a9ac 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -634,7 +634,13 @@ The third is the empty string which will cause for the playing of sound to be sk } ``` -In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. Then send the follow JSON from FCM: +In order for your your notification to play a custom sound you will need to add the files to your Android project's `res/raw` directory. The best way to do this is by using a `resource-file` tag in your `config.xml`. + +```xml + +``` + +Then send the follow JSON from FCM: ```json { From 5c6446d4f3e49235f69615e2c04d3e0d25452e43 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Fri, 17 Aug 2018 16:05:04 -0400 Subject: [PATCH 57/59] =?UTF-8?q?=F0=9F=93=9D=20Issue=20#2487:=20Custom=20?= =?UTF-8?q?notification=20icon=20for=20android=20+=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/PAYLOAD.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/PAYLOAD.md b/docs/PAYLOAD.md index 08959a9ac..0ed58608d 100644 --- a/docs/PAYLOAD.md +++ b/docs/PAYLOAD.md @@ -400,7 +400,16 @@ const push = PushNotification.init({ ``` Where _icon_ is the name of an `.png` image file in the Android `res/drawable` folder. For example: `platforms/android/res/drawable/phonegap.png` -Writing a hook to describe how to copy an image to the Android `res/drawable` folder is out of scope for this README but there is an [excellent tutorial](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) that you can copy. + +You can use a `resource-file` tag to copy the image to the `res/drawable` folder like this: + +```xml + + + + + +``` `iconColor` is one of the supported formats #RRGGBB or #AARRGGBB or one of the following names: 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow', 'lightgray', 'darkgray', 'grey', 'lightgrey', 'darkgrey', 'aqua', 'fuchsia', 'lime', 'maroon', 'navy', 'olive', 'purple', 'silver', 'teal'. `iconColor` is supported on Android 5.0 and greater. @@ -455,6 +464,16 @@ Would look for the _twitter_ image in the `res/drawable` folder and produce the ![2015-07-24 02 34 41](https://cloud.githubusercontent.com/assets/353180/8866903/2df48028-3190-11e5-8176-fe8b3f7c5aab.png) +Again you can use a `resource-file` tag to copy the image to the `res/drawable` folder like this: + +```xml + + + + + +``` + The second is the _assets_ folder in your app. This JSON sent from FCM: ```json From 7bde3b47d9941e2a0c9e4eeac91e70451ce4048d Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 20 Aug 2018 14:58:25 -0400 Subject: [PATCH 58/59] Set theme jekyll-theme-slate --- _config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 _config.yml diff --git a/_config.yml b/_config.yml new file mode 100644 index 000000000..c74188174 --- /dev/null +++ b/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-slate \ No newline at end of file From 532be4b4549d893221e35f72d320c1678a2b29f4 Mon Sep 17 00:00:00 2001 From: Pieter Date: Tue, 2 Oct 2018 13:53:31 +0200 Subject: [PATCH 59/59] Add missing syntax highlighting to docs (#2573) --- docs/API.md | 2 +- docs/INSTALLATION.md | 34 +++++++++++++++++----------------- docs/PHONEGAP_BUILD.md | 4 ++-- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/API.md b/docs/API.md index bde537682..0b1a9ea86 100644 --- a/docs/API.md +++ b/docs/API.md @@ -122,7 +122,7 @@ Once set up the voip parameter to true, the rest of the options will be ignored. You will also need to setup your app to receive `voip` messages in the apps pList. In your apps config.xml add the following in the `` tag. Only do this if you are setup to receive `voip` messages. If your app does not use `voip` messages the Apple App Store will reject your app. -``` +```xml voip diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index 13a369d65..ceb4c60fe 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -34,25 +34,25 @@ To install from the command line: -``` +```bash phonegap plugin add phonegap-plugin-push ``` or -``` +```bash cordova plugin add phonegap-plugin-push ``` It is also possible to install via repo url directly ( unstable ) -``` +```bash phonegap plugin add https://github.com/phonegap/phonegap-plugin-push ``` or -``` +```bash cordova plugin add https://github.com/phonegap/phonegap-plugin-push ``` @@ -60,7 +60,7 @@ As of version 2.0.0 the SENDER_ID parameter has been removed at install time. In In the platform tag for Android add the following resource-file tag if you are using cordova-android 7.0 or greater: -``` +```xml @@ -68,7 +68,7 @@ In the platform tag for Android add the following resource-file tag if you are u If you are using cordova-android 6.x or earlier, add the following resource-file tag: -``` +```xml @@ -76,7 +76,7 @@ If you are using cordova-android 6.x or earlier, add the following resource-file By default, on iOS, the plugin will register with APNS. If you want to use FCM on iOS, in the platform tag for iOS add the resource-file tag: -``` +```xml @@ -84,7 +84,7 @@ By default, on iOS, the plugin will register with APNS. If you want to use FCM o > Note: if you are using Ionic you may need to specify the SENDER_ID variable in your package.json. -``` +```json "cordovaPlugins": [ { "locator": "phonegap-plugin-push" @@ -94,7 +94,7 @@ By default, on iOS, the plugin will register with APNS. If you want to use FCM o > Note: You need to specify the SENDER_ID variable in your config.xml if you plan on installing/restoring plugins using the prepare method. The prepare method will skip installing the plugin otherwise. -``` +```xml ``` @@ -112,7 +112,7 @@ For more detailed instructions on how to install the Android Support Library vis _Note:_ if you are using an IDE to like Eclipse, Xamarin, etc. then the Android SDK installed by those tools may not be the same version as the one used by the Cordova/PhoneGap CLI while building. Please make sure your command line tooling is up to date with the software versions above. An easy way to make sure you up to date is to run the following command: -``` +```bash android update sdk --no-ui --filter "extra" ``` @@ -122,13 +122,13 @@ There are a number of Cordova Facebook Plugins available but the one that we rec To add to your app: -``` +```bash phonegap plugin add --save cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name" ``` or -``` +```bash cordova plugin add --save cordova-plugin-facebook4 --variable APP_ID="App ID" --variable APP_NAME="App Name" ``` @@ -279,7 +279,7 @@ If you are on a `cordova-cli` version less than `6.1.0`, you will either have to i.e. -``` +```bash cordova plugin add phonegap-plugin-push@1.8.1 ``` @@ -306,7 +306,7 @@ Please run the command `pod repo update` and re-install the plugin. You would on Running `pod setup` can take over 1 GB of disk space and that can take quite some time to download over a slow internet connection. If you are having issues with disk space/network try this neat hack from @VinceOPS. -``` +```bash git clone --verbose --depth=1 https://github.com/CocoaPods/Specs.git ~/.cocoapods/repos/master pod setup --verbose ``` @@ -344,7 +344,7 @@ module FirebaseInstanceID not found You may be running into a bug in cordova-ios. The current workaround is to run `pod install` manually. -``` +```bash cd platforms/ios pod install ``` @@ -355,7 +355,7 @@ The push plugin enables you to play sounds and display different icons during pu You can now use the `resource-file` tag to deliver the image and sound files to your application. For example if you wanted to include an extra image file for only your Android build you would add the `resource-file` tag to your android `platform` tag: -``` +```xml @@ -363,7 +363,7 @@ You can now use the `resource-file` tag to deliver the image and sound files to or if you wanted to include a sound file for iOS: -``` +```xml diff --git a/docs/PHONEGAP_BUILD.md b/docs/PHONEGAP_BUILD.md index 11ba6c9e7..6cff22bc6 100644 --- a/docs/PHONEGAP_BUILD.md +++ b/docs/PHONEGAP_BUILD.md @@ -97,7 +97,7 @@ Users have reported issues with Ionic Cloud Build. Apparently there are some dif 1. Remove the inclusion of `phonegap-plugin-push` from config.xml. That is delete lines that look like this: -``` +```xml @@ -105,7 +105,7 @@ Users have reported issues with Ionic Cloud Build. Apparently there are some dif 2. Add the following lines into `package.json` in the `cordovaPlugins` array. -``` +```json { "variables": { "SENDER_ID": "xxx"