@@ -97,6 +97,8 @@ @interface OSInAppMessageViewController ()
9797
9898@property (nonatomic ) BOOL useWidthMargin;
9999
100+ @property (nonatomic ) BOOL isFullscreen;
101+
100102@end
101103
102104@implementation OSInAppMessageViewController
@@ -225,25 +227,27 @@ - (void)maxDisplayTimeTimerFinished {
225227
226228- (OSResultSuccessBlock)messageContentOnSuccess {
227229 return ^(NSDictionary *data) {
228- if (!data) {
229- [self encounteredErrorLoadingMessageContent: nil ];
230- return ;
231- }
232-
233- let message = [NSString stringWithFormat: @" In App Messaging htmlContent.html: %@ " , data[@" html" ]];
234- [OneSignal onesignal_Log: ONE_S_LL_VERBOSE message: message];
235-
236- if (!self.message .isPreview )
237- [[OneSignal sessionManager ] onInAppMessageReceived: self .message.messageId];
230+ [OneSignalHelper dispatch_async_on_main_queue: ^{
231+ if (!data) {
232+ [self encounteredErrorLoadingMessageContent: nil ];
233+ return ;
234+ }
235+
236+ let message = [NSString stringWithFormat: @" In App Messaging htmlContent.html: %@ " , data[@" html" ]];
237+ [OneSignal onesignal_Log: ONE_S_LL_VERBOSE message: message];
238+
239+ if (!self.message .isPreview )
240+ [[OneSignal sessionManager ] onInAppMessageReceived: self .message.messageId];
238241
239- let baseUrl = [NSURL URLWithString: OS_IAM_WEBVIEW_BASE_URL];
240- [self parseContentData: data];
241- if (self.waitForTags ) {
242- return ;
243- }
244- [self .delegate messageWillDisplay: self .message];
245- [self .messageView loadedHtmlContent: self .pendingHTMLContent withBaseURL: baseUrl];
246- self.pendingHTMLContent = nil ;
242+ let baseUrl = [NSURL URLWithString: OS_IAM_WEBVIEW_BASE_URL];
243+ [self parseContentData: data];
244+ if (self.waitForTags ) {
245+ return ;
246+ }
247+ [self .delegate messageWillDisplay: self .message];
248+ [self .messageView loadedHtmlContent: self .pendingHTMLContent withBaseURL: baseUrl];
249+ self.pendingHTMLContent = nil ;
250+ }];
247251 };
248252}
249253
@@ -261,6 +265,32 @@ - (void)parseContentData:(NSDictionary *)data {
261265 self.useWidthMargin = ![styles[@" remove_width_margin" ] boolValue ];
262266 }
263267 }
268+ self.isFullscreen = !self.useHeightMargin ;
269+ if (self.isFullscreen ) {
270+ self.pendingHTMLContent = [self setContentInsetsInHTML: self .pendingHTMLContent];
271+ }
272+ [self .messageView setIsFullscreen: self .isFullscreen];
273+ }
274+
275+ - (NSString *)setContentInsetsInHTML : (NSString *)html {
276+ NSMutableString *newHTML = [[NSMutableString alloc ] initWithString: html];
277+ if (@available (iOS 11 , *)) {
278+ UIWindow *keyWindow = UIApplication.sharedApplication .keyWindow ;
279+ if (!keyWindow) {
280+ return newHTML;
281+ }
282+ CGFloat top = keyWindow.safeAreaInsets .top ;
283+ CGFloat bottom = keyWindow.safeAreaInsets .bottom ;
284+ CGFloat right = keyWindow.safeAreaInsets .right ;
285+ CGFloat left = keyWindow.safeAreaInsets .left ;
286+ NSString *safeAreaInsetsObjectString = [NSString stringWithFormat: OS_JS_SAFE_AREA_INSETS_OBJ,top, bottom, right, left];
287+ NSString *insetsString = [NSString stringWithFormat: @" \n\n \
288+ <script> \
289+ setSafeAreaInsets(%@ );\
290+ </script>" ,safeAreaInsetsObjectString];
291+ [newHTML appendString: insetsString];
292+ }
293+ return newHTML;
264294}
265295
266296- (void )setWaitForTags : (BOOL )waitForTags {
@@ -318,13 +348,15 @@ - (void)addConstraintsForMessage {
318348 // as a notch or a rounded corner on newer iOS devices like iPhone X
319349 // Note that Safe Area layout guides were only introduced in iOS 11
320350 if (@available (iOS 11 , *)) {
321- let safeArea = self.view .safeAreaLayoutGuide ;
322- top = safeArea.topAnchor ;
323- bottom = safeArea.bottomAnchor ;
324- leading = safeArea.leadingAnchor ;
325- trailing = safeArea.trailingAnchor ;
326- center = safeArea.centerXAnchor ;
327- height = safeArea.heightAnchor ;
351+ if (!self.isFullscreen ) {
352+ let safeArea = self.view .safeAreaLayoutGuide ;
353+ top = safeArea.topAnchor ;
354+ bottom = safeArea.bottomAnchor ;
355+ leading = safeArea.leadingAnchor ;
356+ trailing = safeArea.trailingAnchor ;
357+ center = safeArea.centerXAnchor ;
358+ height = safeArea.heightAnchor ;
359+ }
328360 }
329361
330362 CGRect mainBounds = [OneSignalViewHelper getScreenBounds ];
@@ -400,8 +432,10 @@ - (void)addConstraintsForMessage {
400432 self.view .window .frame = mainBounds;
401433 NSLayoutAnchor *centerYanchor = self.view .centerYAnchor ;
402434 if (@available (iOS 11 , *)) {
403- let safeArea = self.view .safeAreaLayoutGuide ;
404- centerYanchor = safeArea.centerYAnchor ;
435+ if (!self.isFullscreen ) {
436+ let safeArea = self.view .safeAreaLayoutGuide ;
437+ centerYanchor = safeArea.centerYAnchor ;
438+ }
405439 }
406440
407441 self.initialYConstraint = [self .messageView.centerYAnchor constraintEqualToAnchor: centerYanchor constant: 0 .0f ];
@@ -699,8 +733,12 @@ - (void)jsEventOccurredWithBody:(NSData *)body {
699733 break ;
700734 }
701735 case OSInAppMessageBridgeEventTypePageResize: {
702- // Unused resize event for IAM during actions like orientation changes and displaying an IAM
736+ // resize event for IAM during actions like orientation changes and displaying an IAM
737+ // Currently used for fullscreen IAMs to account for safe area changes
703738 // self.message.height = event.resize.height;
739+ if (self.isFullscreen ) {
740+ [self .messageView updateSafeAreaInsets ];
741+ }
704742 break ;
705743 }
706744 case OSInAppMessageBridgeEventTypeActionTaken: {
0 commit comments