@@ -79,6 +79,10 @@ @interface OSInAppMessageViewController ()
7979// We start the timer once the message is displayed (not during loading the content)
8080@property (weak , nonatomic , nullable ) NSTimer *dismissalTimer;
8181
82+ // BOOL to track when an IAM has started UI setup so we know when to bypass UI changes on dismissal or not
83+ // This is a fail safe for cases where global contraints are nil and we try to modify them on dismissal of an IAM
84+ @property (nonatomic ) BOOL didPageRenderingComplete;
85+
8286@end
8387
8488@implementation OSInAppMessageViewController
@@ -154,9 +158,6 @@ - (void)addAppEnterBackgroundObserver {
154158- (void )setupInitialMessageUI {
155159 [OneSignal onesignal_Log: ONE_S_LL_VERBOSE message: @" Setting up In-App Message" ];
156160
157- // Remove all of the constraints connected to the messageView
158- [self .messageView removeConstraints: [self .messageView constraints ]];
159-
160161 self.messageView .delegate = self;
161162
162163 [self .messageView setupWebViewConstraints ];
@@ -175,7 +176,7 @@ - (void)setupInitialMessageUI {
175176}
176177
177178- (void )displayMessage {
178- [OneSignal onesignal_Log: ONE_S_LL_VERBOSE message: @" Displaying In App Message" ];
179+ [OneSignal onesignal_Log: ONE_S_LL_VERBOSE message: @" Displaying In- App Message" ];
179180
180181 // Sets up the message view in a hidden position while we wait
181182 [self setupInitialMessageUI ];
@@ -231,9 +232,11 @@ - (void)loadMessageContent {
231232}
232233
233234- (void )loadPreviewMessageContent {
234- [self .message loadPreviewMessageHTMLContentWithUUID: self .message.messageId success: [self messageContentOnSuccess ] failure: ^(NSError *error) {
235- [self encounteredErrorLoadingMessageContent: error];
236- }];
235+ [self .message loadPreviewMessageHTMLContentWithUUID: self .message.messageId
236+ success: [self messageContentOnSuccess ]
237+ failure: ^(NSError *error) {
238+ [self encounteredErrorLoadingMessageContent: error];
239+ }];
237240}
238241
239242- (void )encounteredErrorLoadingMessageContent : (NSError * _Nullable)error {
@@ -392,6 +395,13 @@ Dismisses the message view with a given direction (up or down) and velocity
392395 */
393396- (void )dismissCurrentInAppMessage : (BOOL )up withVelocity : (double )velocity {
394397
398+ // If the rendering event never occurs any constraints being adjusted for dismissal will be nil
399+ // and we should bypass dismissal adjustments and animations and skip straight to the OSMessagingController callback for dismissing
400+ if (!self.didPageRenderingComplete ) {
401+ [self .delegate messageViewControllerWasDismissed ];
402+ return ;
403+ }
404+
395405 // Inactivate the current Y constraints
396406 self.finalYConstraint .active = false ;
397407 self.initialYConstraint .active = false ;
@@ -407,7 +417,7 @@ - (void)dismissCurrentInAppMessage:(BOOL)up withVelocity:(double)velocity {
407417 distance = self.view .frame .size .height - self.messageView .frame .origin .y + 8 .0f ;
408418 [self .messageView.topAnchor constraintEqualToAnchor: self .view.bottomAnchor constant: 8 .0f ].active = true ;
409419 }
410-
420+
411421 var dismissAnimationDuration = velocity != 0 .0f ? distance / fabs (velocity) : 0 .3f ;
412422
413423 var animationOption = UIViewAnimationOptionCurveLinear;
@@ -430,7 +440,8 @@ - (void)dismissCurrentInAppMessage:(BOOL)up withVelocity:(double)velocity {
430440 return ;
431441
432442 [self dismissViewControllerAnimated: false completion: nil ];
433-
443+
444+ self.didPageRenderingComplete = false ;
434445 [self .delegate messageViewControllerWasDismissed ];
435446 }];
436447}
@@ -600,6 +611,10 @@ - (void)jsEventOccurredWithBody:(NSData *)body {
600611
601612 if (event) {
602613 if (event.type == OSInAppMessageBridgeEventTypePageRenderingComplete) {
614+
615+ // BOOL set to true since the JS event fired, meaning the WebView was populated properly with the IAM code
616+ self.didPageRenderingComplete = true ;
617+
603618 self.message .position = event.renderingComplete .displayLocation ;
604619 self.message .height = event.renderingComplete .height ;
605620
0 commit comments