From 9641884e9eb2977dcb1a21249ffe2daafbb7762a Mon Sep 17 00:00:00 2001 From: emawby Date: Wed, 9 Aug 2023 16:50:27 -0700 Subject: [PATCH] Always remove the window when an IAM is dismissed Cherry pick https://github.com/OneSignal/OneSignal-iOS-SDK/pull/1276 --- .../Controller/OSMessagingController.m | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/iOS_SDK/OneSignalSDK/OneSignalInAppMessages/Controller/OSMessagingController.m b/iOS_SDK/OneSignalSDK/OneSignalInAppMessages/Controller/OSMessagingController.m index f7330e89e..61731a716 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalInAppMessages/Controller/OSMessagingController.m +++ b/iOS_SDK/OneSignalSDK/OneSignalInAppMessages/Controller/OSMessagingController.m @@ -448,6 +448,7 @@ - (void)presentInAppPreviewMessage:(OSInAppMessageInternal *)message { - (void)displayMessage:(OSInAppMessageInternal *)message { // Check if the app disabled IAMs for this device before showing an IAM if (_isInAppMessagingPaused && !message.isPreview) { + [self cleanUpInAppWindow]; [OneSignalLog onesignalLog:ONE_S_LL_VERBOSE message:@"In app messages will not show while paused"]; return; } @@ -737,7 +738,7 @@ - (void)messageViewControllerWasDismissed:(OSInAppMessageInternal *)message disp [self persistInAppMessageForRedisplay:showingIAM]; } // Reset the IAM viewController to prepare for next IAM if one exists - self.viewController = nil; + [self cleanUpInAppWindow]; // Reset time since last IAM [self setAndPersistTimeSinceLastMessage]; @@ -749,6 +750,19 @@ - (void)messageViewControllerWasDismissed:(OSInAppMessageInternal *)message disp } } +- (void)cleanUpInAppWindow { + self.viewController = nil; + if (self.window) { + /* + Hide the top level IAM window + After the IAM window is hidden, iOS will automatically promote the main window + This also re-shows the keyboard automatically if it had focus in a text input + */ + self.window.hidden = true; + self.window = nil; + } +} + - (void)setAndPersistTimeSinceLastMessage { NSDate *timeSinceLastMessage = [NSDate new]; [self.triggerController timeSinceLastMessage:timeSinceLastMessage]; @@ -768,21 +782,12 @@ - (void)evaluateMessageDisplayQueue { [self displayMessage:self.messageDisplayQueue.firstObject]; return; } else { - [self hideWindow]; + [self cleanUpInAppWindow]; // Evaulate any IAMs (could be new IAM or added trigger conditions) [self evaluateMessages]; } } -/* - Hide the top level IAM window - After the IAM window is hidden, iOS will automatically promote the main window - This also re-shows the keyboard automatically if it had focus in a text input -*/ -- (void)hideWindow { - self.window.hidden = true; -} - - (void)persistInAppMessageForRedisplay:(OSInAppMessageInternal *)message { // If the IAM doesn't have the re display prop or is a preview IAM there is no need to save it if (![message.displayStats isRedisplayEnabled] || message.isPreview) {