Skip to content

Commit 48e75b3

Browse files
committed
Added handling for preferredLanguages being empty
* This was reported from a Swift project
1 parent a6e5b32 commit 48e75b3

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,6 @@ + (void)registerUser {
826826
app_id, @"app_id",
827827
deviceModel, @"device_model",
828828
[[UIDevice currentDevice] systemVersion], @"device_os",
829-
[[NSLocale preferredLanguages] objectAtIndex:0], @"language",
830829
[NSNumber numberWithInt:(int)[[NSTimeZone localTimeZone] secondsFromGMT]], @"timezone",
831830
[NSNumber numberWithInt:0], @"device_type",
832831
[[[UIDevice currentDevice] identifierForVendor] UUIDString], @"ad_id",
@@ -850,6 +849,10 @@ + (void)registerUser {
850849
}
851850

852851

852+
NSArray* preferredLanguages = [NSLocale preferredLanguages];
853+
if (preferredLanguages && [preferredLanguages count] > 0)
854+
dataDic[@"language"] = [preferredLanguages objectAtIndex:0];
855+
853856
mLastNotificationTypes = notificationTypes;
854857
dataDic[@"notification_types"] = [NSNumber numberWithInt:notificationTypes];
855858

iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,25 @@ - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(N
370370

371371
@end
372372

373+
@interface NSLocaleOverrider : NSObject
374+
@end
375+
376+
@implementation NSLocaleOverrider
377+
378+
static NSArray* preferredLanguagesArray;
379+
380+
+ (void)load {
381+
injectStaticSelector([NSLocaleOverrider class], @selector(overriderPreferredLanguages), [NSLocale class], @selector(preferredLanguages));
382+
}
383+
384+
+ (NSArray<NSString*> *) overriderPreferredLanguages {
385+
return preferredLanguagesArray;
386+
}
387+
388+
@end
389+
390+
391+
373392

374393
// END - Selector Shadowing
375394

@@ -393,6 +412,8 @@ - (void)setUp {
393412

394413
lastSetCategories = nil;
395414

415+
preferredLanguagesArray = @[@"en-US"];
416+
396417
[OneSignalHelper lastMessageReceived:nil];
397418
OneSignalHelper.lastMessageIdFromAction = nil;
398419
[OneSignal setValue:nil forKeyPath:@"lastAppActiveMessageId"];
@@ -525,7 +546,7 @@ - (void)testBasicInitTest {
525546
XCTAssertEqualObjects(lastHTTPRequset[@"notification_types"], @7);
526547
XCTAssertEqualObjects(lastHTTPRequset[@"device_model"], @"x86_64");
527548
XCTAssertEqualObjects(lastHTTPRequset[@"device_type"], @0);
528-
XCTAssertEqualObjects(lastHTTPRequset[@"language"], @"en");
549+
XCTAssertEqualObjects(lastHTTPRequset[@"language"], @"en-US");
529550

530551
// 2nd init call should not fire another on_session call.
531552
lastHTTPRequset = nil;
@@ -535,6 +556,13 @@ - (void)testBasicInitTest {
535556
XCTAssertEqual(networkRequestCount, 1);
536557
}
537558

559+
// Seen a few rare crash reports where [NSLocale preferredLanguages] resturns an empty array
560+
- (void)testInitWithEmptyPreferredLanguages {
561+
preferredLanguagesArray = @[];
562+
[self initOneSignal];
563+
[self runBackgroundThreads];
564+
}
565+
538566
- (void)testInitOnSimulator {
539567
[self setCurrentNotificationPermission:false];
540568
[self backgroundModesDisabledInXcode];
@@ -549,7 +577,7 @@ - (void)testInitOnSimulator {
549577
XCTAssertEqualObjects(lastHTTPRequset[@"notification_types"], @-15);
550578
XCTAssertEqualObjects(lastHTTPRequset[@"device_model"], @"x86_64");
551579
XCTAssertEqualObjects(lastHTTPRequset[@"device_type"], @0);
552-
XCTAssertEqualObjects(lastHTTPRequset[@"language"], @"en");
580+
XCTAssertEqualObjects(lastHTTPRequset[@"language"], @"en-US");
553581

554582
// 2nd init call should not fire another on_session call.
555583
lastHTTPRequset = nil;

0 commit comments

Comments
 (0)