File tree Expand file tree Collapse file tree 7 files changed +25
-9
lines changed Expand file tree Collapse file tree 7 files changed +25
-9
lines changed Original file line number Diff line number Diff line change 28
28
#import < Foundation/Foundation.h>
29
29
30
30
@interface OneSignalBadgeHelpers : NSObject
31
- + (void )updateCachedBadgeValue : (NSInteger )value ;
31
+ + (void )updateCachedBadgeValue : (NSInteger )value usePreviousBadgeCount : ( BOOL ) usePrevious ;
32
32
@end
Original file line number Diff line number Diff line change 30
30
#import " OneSignalCommonDefines.h"
31
31
32
32
@implementation OneSignalBadgeHelpers
33
- + (void )updateCachedBadgeValue : (NSInteger )value {
33
+
34
+ /* *
35
+ Store a previous badge count so that we can revert to this cached value when a notification display is cancelled.
36
+ When `usePreviousBadgeCount` is `true`, the `value` passed to this method will be unused.
37
+ */
38
+ + (void )updateCachedBadgeValue : (NSInteger )value usePreviousBadgeCount : (BOOL )usePrevious {
34
39
// Since badge logic can be executed in an extension, we need to use app groups to get
35
40
// a shared NSUserDefaults from the app group suite name
36
- [OneSignalUserDefaults.initShared saveIntegerForKey: ONESIGNAL_BADGE_KEY withValue: value];
41
+ if (usePrevious) {
42
+ // Keep the PREVIOUS_ONESIGNAL_BADGE_KEY value unchanged
43
+ NSInteger previousBadgeCount = [OneSignalUserDefaults.initShared getSavedIntegerForKey: PREVIOUS_ONESIGNAL_BADGE_KEY defaultValue: 0 ];
44
+ [OneSignalUserDefaults.initShared saveIntegerForKey: ONESIGNAL_BADGE_KEY withValue: previousBadgeCount];
45
+ } else {
46
+ NSInteger previousBadgeCount = [OneSignalUserDefaults.initShared getSavedIntegerForKey: ONESIGNAL_BADGE_KEY defaultValue: 0 ];
47
+ [OneSignalUserDefaults.initShared saveIntegerForKey: PREVIOUS_ONESIGNAL_BADGE_KEY withValue: previousBadgeCount];
48
+ [OneSignalUserDefaults.initShared saveIntegerForKey: ONESIGNAL_BADGE_KEY withValue: value];
49
+ }
37
50
}
51
+
38
52
@end
Original file line number Diff line number Diff line change 159
159
#define ONESIGNAL_DISABLE_BADGE_CLEARING @" OneSignal_disable_badge_clearing"
160
160
#define ONESIGNAL_APP_GROUP_NAME_KEY @" OneSignal_app_groups_key"
161
161
#define ONESIGNAL_BADGE_KEY @" onesignalBadgeCount"
162
+ // / Store the previous badge count to read for a cancelled notification display event
163
+ #define PREVIOUS_ONESIGNAL_BADGE_KEY @" previousOnesignalBadgeCount"
162
164
163
165
// Firebase
164
166
#define ONESIGNAL_FB_ENABLE_FIREBASE @" OS_ENABLE_FIREBASE_ANALYTICS"
Original file line number Diff line number Diff line change @@ -35,7 +35,7 @@ + (void)handleBadgeCountWithNotificationRequest:(UNNotificationRequest *)request
35
35
// make sure the OneSignal cached value is updated to this value
36
36
if (!notification.badgeIncrement ) {
37
37
if (notification.hasBadge )
38
- [OneSignalBadgeHelpers updateCachedBadgeValue: notification.badge];
38
+ [OneSignalBadgeHelpers updateCachedBadgeValue: notification.badge usePreviousBadgeCount: false ];
39
39
40
40
return ;
41
41
}
@@ -50,7 +50,7 @@ + (void)handleBadgeCountWithNotificationRequest:(UNNotificationRequest *)request
50
50
51
51
replacementContent.badge = @(currentValue);
52
52
53
- [OneSignalBadgeHelpers updateCachedBadgeValue: currentValue];
53
+ [OneSignalBadgeHelpers updateCachedBadgeValue: currentValue usePreviousBadgeCount: false ];
54
54
}
55
55
56
56
+ (NSInteger )currentCachedBadgeValue {
Original file line number Diff line number Diff line change @@ -179,7 +179,7 @@ - (void)onesignalGetNotificationSettingsWithCompletionHandler:(void(^)(UNNotific
179
179
necessary as there is no equivalent "getBadgeCount" method available.
180
180
*/
181
181
- (void )onesignalSetBadgeCount : (NSInteger )badge withCompletionHandler : (void (^)(NSError *error))completionHandler {
182
- [OneSignalBadgeHelpers updateCachedBadgeValue: badge];
182
+ [OneSignalBadgeHelpers updateCachedBadgeValue: badge usePreviousBadgeCount: false ];
183
183
[self onesignalSetBadgeCount: badge withCompletionHandler: completionHandler];
184
184
}
185
185
Original file line number Diff line number Diff line change @@ -76,8 +76,8 @@ - (void)complete:(OSDisplayableNotification *)notification {
76
76
reset the badge count to the value prior to receipt of this notif
77
77
*/
78
78
if (!notification) {
79
- NSInteger previousBadgeCount = [UIApplication sharedApplication ]. applicationIconBadgeNumber ;
80
- [OneSignalBadgeHelpers updateCachedBadgeValue: previousBadgeCount ];
79
+ // The badge count value of -99 will not be used, the previous badge count will be set
80
+ [OneSignalBadgeHelpers updateCachedBadgeValue: - 99 usePreviousBadgeCount: true ];
81
81
}
82
82
if (_completion) {
83
83
_completion (notification);
Original file line number Diff line number Diff line change @@ -809,7 +809,7 @@ + (void)load {
809
809
We swizzle the 'setApplicationIconBadgeNumber()' to intercept these calls so we always know the latest count
810
810
*/
811
811
- (void )onesignalSetApplicationIconBadgeNumber : (NSInteger )badge {
812
- [OneSignalBadgeHelpers updateCachedBadgeValue: badge];
812
+ [OneSignalBadgeHelpers updateCachedBadgeValue: badge usePreviousBadgeCount: false ];
813
813
[self onesignalSetApplicationIconBadgeNumber: badge];
814
814
}
815
815
You can’t perform that action at this time.
0 commit comments