Skip to content

Commit 76e9f0c

Browse files
committed
Fix redisplay on same session with no triggers
1 parent a673945 commit 76e9f0c

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

iOS_SDK/OneSignalSDK/Source/OSInAppMessage.m

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,7 @@ + (instancetype)instanceWithJson:(NSDictionary * _Nonnull)json {
126126
}
127127
else
128128
return nil;
129-
130-
//TODO: This will need to be changed when we add core data or database to iOS, see android implementation for reference
131-
if (json[@"displayed_in_session"]) {
132-
message.isDisplayedInSession = json[@"displayed_in_session"];
133-
}
129+
134130
return message;
135131
}
136132

@@ -163,14 +159,12 @@ -(NSDictionary *)jsonRepresentation {
163159
if ([_displayStats isRedisplayEnabled]) {
164160
json[@"redisplay"] = [_displayStats jsonRepresentation];
165161
}
166-
//TODO: This will need to be changed when we add core data or database to iOS, see android implementation for reference
167-
json[@"displayed_in_session"] = @(_isDisplayedInSession);
168162

169163
return json;
170164
}
171165

172166
- (NSString *)description {
173-
return [NSString stringWithFormat:@"OSInAppMessage: \nmessageId: %@ \ntriggers: %@ \ndisplayStats: %@", self.messageId, self.triggers, self.displayStats];
167+
return [NSString stringWithFormat:@"OSInAppMessage: \nmessageId: %@ \ntriggers: %@ \ndisplayed_in_session: %@ \ndisplayStats: %@", self.messageId, self.triggers, self.isDisplayedInSession ? @"YES" : @"NO", self.displayStats];
174168
}
175169

176170
- (BOOL)isEqual:(id)object {
@@ -196,6 +190,8 @@ - (void)encodeWithCoder:(NSCoder *)encoder {
196190
[encoder encodeObject:_variants forKey:@"variants"];
197191
[encoder encodeObject:_triggers forKey:@"triggers"];
198192
[encoder encodeObject:_displayStats forKey:@"displayStats"];
193+
//TODO: This will need to be changed when we add core data or database to iOS, see android implementation for reference
194+
[encoder encodeBool:_isDisplayedInSession forKey:@"displayed_in_session"];
199195
}
200196

201197
- (id)initWithCoder:(NSCoder *)decoder {
@@ -204,6 +200,8 @@ - (id)initWithCoder:(NSCoder *)decoder {
204200
_variants = [decoder decodeObjectForKey:@"variants"];
205201
_triggers = [decoder decodeObjectForKey:@"triggers"];
206202
_displayStats = [decoder decodeObjectForKey:@"displayStats"];
203+
//TODO: This will need to be changed when we add core data or database to iOS, see android implementation for reference
204+
_isDisplayedInSession = [decoder decodeBoolForKey:@"displayed_in_session"];
207205
}
208206
return self;
209207
}

iOS_SDK/OneSignalSDK/Source/OSMessagingController.m

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,12 @@ - (instancetype)init {
150150

151151
- (void)updateInAppMessagesFromCache {
152152
self.messages = [OneSignalUserDefaults.initStandard getSavedCodeableDataForKey:OS_IAM_MESSAGES_ARRAY defaultValue:[NSArray new]];
153+
153154
[self evaluateMessages];
154155
}
155156

156157
- (void)updateInAppMessagesFromOnSession:(NSArray<OSInAppMessage *> *)newMessages {
158+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:@"updateInAppMessagesFromOnSession"];
157159
self.messages = newMessages;
158160

159161
// Cache if messages passed in are not null, this method is called from on_session for
@@ -167,6 +169,8 @@ - (void)updateInAppMessagesFromOnSession:(NSArray<OSInAppMessage *> *)newMessage
167169
}
168170

169171
- (void)resetRedisplayMessagesBySession {
172+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"resetRedisplayMessagesBySession with redisplayedInAppMessages: %@", [_redisplayedInAppMessages description]]];
173+
170174
for (NSString *messageId in _redisplayedInAppMessages) {
171175
[_redisplayedInAppMessages objectForKey:messageId].isDisplayedInSession = false;
172176
}
@@ -347,12 +351,13 @@ - (void)setDataForRedisplay:(OSInAppMessage *)message {
347351

348352
if (messageDismissed && redisplayMessageSavedData) {
349353
NSLog(@"Redisplay IAM: %@", message.jsonRepresentation.description);
350-
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"setDataForRedisplay with message: %@", message]];
351354
message.displayStats.displayQuantity = redisplayMessageSavedData.displayStats.displayQuantity;
352355
message.displayStats.lastDisplayTime = redisplayMessageSavedData.displayStats.lastDisplayTime;
353356

354357
// Message that don't have triggers should display only once per session
355358
BOOL triggerHasChanged = message.isTriggerChanged || (!redisplayMessageSavedData.isDisplayedInSession && [message.triggers count] == 0);
359+
360+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"setDataForRedisplay with message: %@ \ntriggerHasChanged: %@ \nno triggers: %@ \ndisplayed in session saved: %@", message, message.isTriggerChanged ? @"YES" : @"NO", [message.triggers count] == 0 ? @"YES" : @"NO", redisplayMessageSavedData.isDisplayedInSession ? @"YES" : @"NO"]];
356361
// Check if conditions are correct for redisplay
357362
if (triggerHasChanged &&
358363
[message.displayStats isDelayTimeSatisfied:self.dateGenerator()] &&
@@ -495,7 +500,12 @@ - (void)persistInAppMessageForRedisplay:(OSInAppMessage *)message {
495500
[_redisplayedInAppMessages setObject:message forKey:message.messageId];
496501

497502
[OneSignalUserDefaults.initStandard saveCodeableDataForKey:OS_IAM_REDISPLAY_DICTIONARY withValue:_redisplayedInAppMessages];
498-
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"persistInAppMessageForRedisplay: %@ \nredisplayedInAppMessages: %@", [message description], [_redisplayedInAppMessages description]]];
503+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"persistInAppMessageForRedisplay: %@ \nredisplayedInAppMessages: %@", [message description], _redisplayedInAppMessages]];
504+
505+
let standardUserDefaults = OneSignalUserDefaults.initStandard;
506+
let redisplayedInAppMessages = [[NSMutableDictionary alloc] initWithDictionary:[standardUserDefaults getSavedCodeableDataForKey:OS_IAM_REDISPLAY_DICTIONARY defaultValue:[NSMutableDictionary new]]];
507+
508+
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:[NSString stringWithFormat:@"persistInAppMessageForRedisplay saved redisplayedInAppMessages: %@", [redisplayedInAppMessages description]]];
499509
}
500510

501511
- (void)handlePromptActions:(NSArray<NSObject<OSInAppMessagePrompt> *> *)promptActions {

0 commit comments

Comments
 (0)