Skip to content

Commit 208553c

Browse files
authored
Merge pull request #921 from OneSignal/fix/saving_null_tags
Fix saving NSNull in tags to userDefaults
2 parents 9771f43 + cf48431 commit 208553c

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

iOS_SDK/OneSignalSDK/Source/OSPlayerTags.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,18 @@ - (void)loadTagsFromUserDefaults {
101101
_tags = [standardUserDefaults getSavedDictionaryForKey:OSUD_PLAYER_TAGS defaultValue:nil];
102102
}
103103

104+
- (void)removeNSNullFromTags {
105+
NSMutableDictionary *tagsDict = [NSMutableDictionary dictionaryWithDictionary:_tags];
106+
for (id key in tagsDict.allKeys) {
107+
if ([tagsDict[key] isKindOfClass:[NSNull class]]) {
108+
tagsDict[key] = nil;
109+
}
110+
}
111+
_tags = tagsDict;
112+
}
113+
104114
- (void)saveTagsToUserDefaults {
115+
[self removeNSNullFromTags];
105116
let standardUserDefaults = OneSignalUserDefaults.initStandard;
106117
[standardUserDefaults saveDictionaryForKey:OSUD_PLAYER_TAGS withValue:_tags];
107118
}

iOS_SDK/OneSignalSDK/UnitTests/UnitTests.m

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,6 +1364,38 @@ - (void)testSendTagsOnBackground {
13641364
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 4);
13651365
}
13661366

1367+
- (void)testSendNSNullInTags {
1368+
[UnitTestCommonMethods initOneSignal_andThreadWait];
1369+
1370+
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 2);
1371+
1372+
[OneSignal sendTags:@{@"key1": @"value1", @"key2": [NSNull new]}];
1373+
1374+
// Make sure all tags where send in 1 network call.
1375+
[NSObjectOverrider runPendingSelectors];
1376+
[UnitTestCommonMethods runBackgroundThreads];
1377+
[NSObjectOverrider runPendingSelectors];
1378+
1379+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"tags"][@"key1"], @"value1");
1380+
XCTAssertEqualObjects(OneSignalClientOverrider.lastHTTPRequest[@"tags"][@"key2"], [NSNull new]);
1381+
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 3);
1382+
}
1383+
1384+
- (void)testSendBadObjectInTags {
1385+
[UnitTestCommonMethods initOneSignal_andThreadWait];
1386+
1387+
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 2);
1388+
//The OneSignal class is not a valid json object
1389+
[OneSignal sendTags:@{@"key1": @"value1", @"key2": [OneSignal new]}];
1390+
1391+
// Make sure the tags were not sent.
1392+
[NSObjectOverrider runPendingSelectors];
1393+
[UnitTestCommonMethods runBackgroundThreads];
1394+
[NSObjectOverrider runPendingSelectors];
1395+
1396+
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 2);
1397+
}
1398+
13671399
- (void)testDeleteTags {
13681400
[UnitTestCommonMethods initOneSignal_andThreadWait];
13691401
XCTAssertEqual(OneSignalClientOverrider.networkRequestCount, 2);

0 commit comments

Comments
 (0)