Skip to content

Commit ea2ce83

Browse files
committed
Merge branch 'revert-412-dynamic_framework'
* revert-412-dynamic_framework: Revert "Dynamic framework (#412)" Revert "2.8.8 Release" Revert "Request reattempt fix (#418)" # Conflicts: # OneSignal.podspec # OneSignalDynamic.podspec # iOS_SDK/OneSignalSDK/Framework/Dynamic/OneSignal.framework/OneSignal # iOS_SDK/OneSignalSDK/Source/OneSignal.m # iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m NOTE: Mistakes during a merge from branch `dynamic_framework` to `master` led to some previous bug fixes being reverted. • Using a partial revert merge to undo these reversions
2 parents 937b44f + 7f5b2cf commit ea2ce83

File tree

5 files changed

+62
-18
lines changed

5 files changed

+62
-18
lines changed

iOS_SDK/OneSignalSDK/Source/OSNotificationPayload.m

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,18 @@ -(void)parseRemoteSlient:(NSDictionary*)payload {
154154
-(void)parseActionButtons:(NSArray<NSDictionary*>*)buttons {
155155
NSMutableArray *buttonArray = [NSMutableArray new];
156156
for (NSDictionary *button in buttons) {
157-
[buttonArray addObject: @{@"text" : button[@"n"],
158-
@"id" : (button[@"i"] ?: button[@"n"])
159-
}];
157+
158+
// check to ensure the button object has the correct
159+
// format before adding it to the array
160+
if (!button[@"n"] ||
161+
(!button[@"i"] && !button[@"n"])) {
162+
continue;
163+
}
164+
165+
[buttonArray addObject: @{
166+
@"text" : button[@"n"],
167+
@"id" : (button[@"i"] ?: button[@"n"])
168+
}];
160169
}
161170

162171
_actionButtons = buttonArray;

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ + (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId
423423
if (!success)
424424
return self;
425425

426-
if (mShareLocation)
426+
if (appId && mShareLocation)
427427
[OneSignalLocation getLocation:false];
428428

429429
if (self) {

iOS_SDK/OneSignalSDK/Source/OneSignalHelper.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ + (NSMutableDictionary*)formatApsPayloadIntoStandard:(NSDictionary*)remoteUserIn
376376
additionalData = nil;
377377
else if (remoteUserInfo[@"os_data"]) {
378378
[userInfo addEntriesFromDictionary:additionalData];
379-
if (!is2dot4Format)
379+
if (!is2dot4Format && userInfo[@"os_data"][@"buttons"])
380380
userInfo[@"aps"] = @{@"alert" : userInfo[@"os_data"][@"buttons"][@"m"]};
381381
}
382382

iOS_SDK/OneSignalSDK/Source/OneSignalNotificationSettingsIOS10.m

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,14 @@
3434

3535
#import "OneSignalHelper.h"
3636

37-
@implementation OneSignalNotificationSettingsIOS10 {
37+
@interface OneSignalNotificationSettingsIOS10 ()
3838

3939
// Used as both an optimization and to prevent queue deadlocks.
40-
// This doesn't seem to be required for the latter at this time. (2.4.3)
41-
BOOL useCachedStatus;
42-
}
40+
@property (atomic) BOOL useCachedStatus;
41+
42+
@end
43+
44+
@implementation OneSignalNotificationSettingsIOS10
4345

4446
// Used to run all calls to getNotificationSettingsWithCompletionHandler sequentially
4547
// This prevents any possible deadlocks due to race condiditions.
@@ -54,7 +56,7 @@ - (instancetype)init {
5456
}
5557

5658
- (void)getNotificationPermissionState:(void (^)(OSPermissionState *subcscriptionStatus))completionHandler {
57-
if (useCachedStatus) {
59+
if (self.useCachedStatus) {
5860
completionHandler(OneSignal.currentPermissionState);
5961
return;
6062
}
@@ -68,18 +70,32 @@ - (void)getNotificationPermissionState:(void (^)(OSPermissionState *subcscriptio
6870
status.accepted = settings.authorizationStatus == UNAuthorizationStatusAuthorized;
6971
status.answeredPrompt = settings.authorizationStatus != UNAuthorizationStatusNotDetermined;
7072
status.notificationTypes = (settings.badgeSetting == UNNotificationSettingEnabled ? 1 : 0)
71-
+ (settings.soundSetting == UNNotificationSettingEnabled ? 2 : 0)
72-
+ (settings.alertSetting == UNNotificationSettingEnabled ? 4 : 0)
73-
+ (settings.lockScreenSetting == UNNotificationSettingEnabled ? 8 : 0);
74-
useCachedStatus = true;
73+
+ (settings.soundSetting == UNNotificationSettingEnabled ? 2 : 0)
74+
+ (settings.alertSetting == UNNotificationSettingEnabled ? 4 : 0)
75+
+ (settings.lockScreenSetting == UNNotificationSettingEnabled ? 8 : 0);
76+
self.useCachedStatus = true;
7577
completionHandler(status);
76-
useCachedStatus = false;
78+
self.useCachedStatus = false;
7779
}];
7880
});
7981
}
8082

83+
// used only in cases where UNUserNotificationCenter getNotificationSettingsWith...
84+
// callback does not get executed in a timely fashion. Rather than returning nil,
85+
- (OSPermissionState *)defaultPermissionState {
86+
if (OneSignal.currentPermissionState != nil) {
87+
return OneSignal.currentPermissionState;
88+
}
89+
90+
OSPermissionState *defaultState = [OSPermissionState new];
91+
92+
defaultState.notificationTypes = 0;
93+
94+
return defaultState;
95+
}
96+
8197
- (OSPermissionState*)getNotificationPermissionState {
82-
if (useCachedStatus)
98+
if (self.useCachedStatus)
8399
return OneSignal.currentPermissionState;
84100

85101
__block OSPermissionState* returnStatus = OneSignal.currentPermissionState;
@@ -90,9 +106,10 @@ - (OSPermissionState*)getNotificationPermissionState {
90106
dispatch_semaphore_signal(semaphore);
91107
}];
92108
});
93-
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
94109

95-
return returnStatus;
110+
dispatch_semaphore_wait(semaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(100 * NSEC_PER_MSEC)));
111+
112+
return returnStatus ?: self.defaultPermissionState;
96113
}
97114

98115
- (int)getNotificationTypes {

iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2093,4 +2093,22 @@ - (void)testHTTPClientTimeout {
20932093
[OneSignalClientOverrider disableExecuteRequestOverride:false];
20942094
}
20952095

2096+
// Regression test to ensure improper button JSON format
2097+
// does not cause a crash (iOS SDK issue #401)
2098+
- (void)testInvalidButtonFormat {
2099+
NSDictionary *newFormat = @{@"aps": @{
2100+
@"mutable-content": @1,
2101+
@"alert": @"Message Body"
2102+
},
2103+
@"os_data": @{
2104+
@"i": @"b2f7f966-d8cc-11e4-bed1-df8f05be55ba",
2105+
@"buttons": @[@{@"i": @"id1", @"title": @"text1"}],
2106+
@"att": @{ @"id": @"http://domain.com/file.jpg" }
2107+
}};
2108+
2109+
let notification = [OSNotificationPayload parseWithApns:newFormat];
2110+
2111+
XCTAssertTrue(notification.actionButtons.count == 0);
2112+
}
2113+
20962114
@end

0 commit comments

Comments
 (0)