22
22
#import " FIRIAMMessageContentData.h"
23
23
#import " FIRIAMMessageDefinition.h"
24
24
#import " FIRIAMSDKRuntimeErrorCodes.h"
25
+ #import " FIRInAppMessaging.h"
25
26
26
27
@implementation FIRIAMDisplaySetting
27
28
@end
@@ -32,6 +33,7 @@ @interface FIRIAMDisplayExecutor () <FIRInAppMessagingDisplayDelegate>
32
33
// YES if a message is being rendered at this time
33
34
@property (nonatomic ) BOOL isMsgBeingDisplayed;
34
35
@property (nonatomic ) NSTimeInterval lastDisplayTime;
36
+ @property (nonatomic , nonnull , readonly ) FIRInAppMessaging *inAppMessaging;
35
37
@property (nonatomic , nonnull , readonly ) FIRIAMDisplaySetting *setting;
36
38
@property (nonatomic , nonnull , readonly ) FIRIAMMessageClientCache *messageCache;
37
39
@property (nonatomic , nonnull , readonly ) id <FIRIAMBookKeeper> displayBookKeeper;
@@ -45,7 +47,13 @@ @implementation FIRIAMDisplayExecutor {
45
47
}
46
48
47
49
#pragma mark - FIRInAppMessagingDisplayDelegate methods
48
- - (void )messageClicked {
50
+ - (void )messageClicked : (FIRInAppMessagingDisplayMessage *)inAppMessage {
51
+ // Call through to app-side delegate.
52
+ __weak id <FIRInAppMessagingDisplayDelegate> appSideDelegate = self.inAppMessaging .delegate ;
53
+ if ([appSideDelegate respondsToSelector: @selector (messageClicked: )]) {
54
+ [appSideDelegate messageClicked: inAppMessage];
55
+ }
56
+
49
57
self.isMsgBeingDisplayed = NO ;
50
58
if (!_currentMsgBeingDisplayed.renderData .messageID ) {
51
59
FIRLogWarning (kFIRLoggerInAppMessaging , @" I-IAM400030" ,
@@ -124,7 +132,14 @@ - (void)messageClicked {
124
132
}
125
133
}
126
134
127
- - (void )messageDismissedWithType : (FIRInAppMessagingDismissType)dismissType {
135
+ - (void )messageDismissed : (FIRInAppMessagingDisplayMessage *)inAppMessage
136
+ dismissType : (FIRInAppMessagingDismissType)dismissType {
137
+ // Call through to app-side delegate.
138
+ __weak id <FIRInAppMessagingDisplayDelegate> appSideDelegate = self.inAppMessaging .delegate ;
139
+ if ([appSideDelegate respondsToSelector: @selector (messageDismissed:dismissType: )]) {
140
+ [appSideDelegate messageDismissed: inAppMessage dismissType: dismissType];
141
+ }
142
+
128
143
self.isMsgBeingDisplayed = NO ;
129
144
if (!_currentMsgBeingDisplayed.renderData .messageID ) {
130
145
FIRLogWarning (kFIRLoggerInAppMessaging , @" I-IAM400014" ,
@@ -170,7 +185,12 @@ - (void)messageDismissedWithType:(FIRInAppMessagingDismissType)dismissType {
170
185
}];
171
186
}
172
187
173
- - (void )impressionDetected {
188
+ - (void )impressionDetectedForMessage : (FIRInAppMessagingDisplayMessage *)inAppMessage {
189
+ __weak id <FIRInAppMessagingDisplayDelegate> appSideDelegate = self.inAppMessaging .delegate ;
190
+ if ([appSideDelegate respondsToSelector: @selector (impressionDetectedForMessage: )]) {
191
+ [appSideDelegate impressionDetectedForMessage: inAppMessage];
192
+ }
193
+
174
194
if (!_currentMsgBeingDisplayed.renderData .messageID ) {
175
195
FIRLogWarning (kFIRLoggerInAppMessaging , @" I-IAM400022" ,
176
196
@" impressionDetected called but "
@@ -189,7 +209,13 @@ - (void)impressionDetected {
189
209
}
190
210
}
191
211
192
- - (void )displayErrorEncountered : (NSError *)error {
212
+ - (void )displayErrorForMessage : (FIRInAppMessagingDisplayMessage *)inAppMessage
213
+ error : (NSError *)error {
214
+ __weak id <FIRInAppMessagingDisplayDelegate> appSideDelegate = self.inAppMessaging .delegate ;
215
+ if ([appSideDelegate respondsToSelector: @selector (displayErrorForMessage:error: )]) {
216
+ [appSideDelegate displayErrorForMessage: inAppMessage error: error];
217
+ }
218
+
193
219
self.isMsgBeingDisplayed = NO ;
194
220
195
221
if (!_currentMsgBeingDisplayed.renderData .messageID ) {
@@ -283,14 +309,16 @@ - (void)displayMessageLoadError:(NSError *)error {
283
309
completion: nil ];
284
310
}
285
311
286
- - (instancetype )initWithSetting : (FIRIAMDisplaySetting *)setting
287
- messageCache : (FIRIAMMessageClientCache *)cache
288
- timeFetcher : (id <FIRIAMTimeFetcher>)timeFetcher
289
- bookKeeper : (id <FIRIAMBookKeeper>)displayBookKeeper
290
- actionURLFollower : (FIRIAMActionURLFollower *)actionURLFollower
291
- activityLogger : (FIRIAMActivityLogger *)activityLogger
292
- analyticsEventLogger : (id <FIRIAMAnalyticsEventLogger>)analyticsEventLogger {
312
+ - (instancetype )initWithInAppMessaging : (FIRInAppMessaging *)inAppMessaging
313
+ setting : (FIRIAMDisplaySetting *)setting
314
+ messageCache : (FIRIAMMessageClientCache *)cache
315
+ timeFetcher : (id <FIRIAMTimeFetcher>)timeFetcher
316
+ bookKeeper : (id <FIRIAMBookKeeper>)displayBookKeeper
317
+ actionURLFollower : (FIRIAMActionURLFollower *)actionURLFollower
318
+ activityLogger : (FIRIAMActivityLogger *)activityLogger
319
+ analyticsEventLogger : (id <FIRIAMAnalyticsEventLogger>)analyticsEventLogger {
293
320
if (self = [super init ]) {
321
+ _inAppMessaging = inAppMessaging;
294
322
_timeFetcher = timeFetcher;
295
323
_lastDisplayTime = displayBookKeeper.lastDisplayTime ;
296
324
_setting = setting;
@@ -334,43 +362,53 @@ - (void)checkAndDisplayNextContextualMessageForAnalyticsEvent:(NSString *)eventN
334
362
[self .messageCache nextOnFirebaseAnalyticEventDisplayMsg: eventName];
335
363
336
364
if (nextAnalyticsBasedMessage) {
337
- [self displayForMessage: nextAnalyticsBasedMessage];
365
+ [self displayForMessage: nextAnalyticsBasedMessage
366
+ triggerType: FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent];
338
367
}
339
368
}
340
369
}
341
370
342
371
- (FIRInAppMessagingBannerDisplay *)
343
372
bannerMessageWithMessageDefinition:(FIRIAMMessageDefinition *)definition
344
- imageData : (FIRInAppMessagingImageData *)imageData {
373
+ imageData : (FIRInAppMessagingImageData *)imageData
374
+ triggerType : (FIRInAppMessagingDisplayTriggerType)triggerType {
345
375
NSString *title = definition.renderData .contentData .titleText ;
346
376
NSString *body = definition.renderData .contentData .bodyText ;
347
377
348
378
FIRInAppMessagingBannerDisplay *bannerMessage = [[FIRInAppMessagingBannerDisplay alloc ]
349
379
initWithMessageID: definition.renderData.messageID
380
+ campaignName: definition.renderData.name
350
381
renderAsTestMessage: definition.isTestMessage
382
+ triggerType: triggerType
351
383
titleText: title
352
384
bodyText: body
353
385
textColor: definition.renderData.renderingEffectSettings.textColor
354
386
backgroundColor: definition.renderData.renderingEffectSettings.displayBGColor
355
- imageData: imageData];
387
+ imageData: imageData
388
+ actionURL: definition.renderData.contentData.actionURL];
356
389
357
390
return bannerMessage;
358
391
}
359
392
360
393
- (FIRInAppMessagingImageOnlyDisplay *)
361
394
imageOnlyMessageWithMessageDefinition:(FIRIAMMessageDefinition *)definition
362
- imageData : (FIRInAppMessagingImageData *)imageData {
363
- FIRInAppMessagingImageOnlyDisplay *imageOnlyMessage =
364
- [[FIRInAppMessagingImageOnlyDisplay alloc ] initWithMessageID: definition.renderData.messageID
365
- renderAsTestMessage: definition.isTestMessage
366
- imageData: imageData];
395
+ imageData : (FIRInAppMessagingImageData *)imageData
396
+ triggerType : (FIRInAppMessagingDisplayTriggerType)triggerType {
397
+ FIRInAppMessagingImageOnlyDisplay *imageOnlyMessage = [[FIRInAppMessagingImageOnlyDisplay alloc ]
398
+ initWithMessageID: definition.renderData.messageID
399
+ campaignName: definition.renderData.name
400
+ renderAsTestMessage: definition.isTestMessage
401
+ triggerType: triggerType
402
+ imageData: imageData
403
+ actionURL: definition.renderData.contentData.actionURL];
367
404
368
405
return imageOnlyMessage;
369
406
}
370
407
371
408
- (FIRInAppMessagingModalDisplay *)
372
409
modalViewMessageWithMessageDefinition:(FIRIAMMessageDefinition *)definition
373
- imageData : (FIRInAppMessagingImageData *)imageData {
410
+ imageData : (FIRInAppMessagingImageData *)imageData
411
+ triggerType : (FIRInAppMessagingDisplayTriggerType)triggerType {
374
412
// For easier reference in this method.
375
413
FIRIAMMessageRenderData *renderData = definition.renderData ;
376
414
@@ -388,33 +426,44 @@ - (void)checkAndDisplayNextContextualMessageForAnalyticsEvent:(NSString *)eventN
388
426
389
427
FIRInAppMessagingModalDisplay *modalViewMessage = [[FIRInAppMessagingModalDisplay alloc ]
390
428
initWithMessageID: definition.renderData.messageID
429
+ campaignName: definition.renderData.name
391
430
renderAsTestMessage: definition.isTestMessage
431
+ triggerType: triggerType
392
432
titleText: title
393
433
bodyText: body
394
434
textColor: renderData.renderingEffectSettings.textColor
395
435
backgroundColor: renderData.renderingEffectSettings.displayBGColor
396
436
imageData: imageData
397
- actionButton: actionButton];
437
+ actionButton: actionButton
438
+ actionURL: definition.renderData.contentData.actionURL];
398
439
399
440
return modalViewMessage;
400
441
}
401
442
402
- - (FIRInAppMessagingDisplayMessageBase *)
443
+ - (FIRInAppMessagingDisplayMessage *)
403
444
displayMessageWithMessageDefinition:(FIRIAMMessageDefinition *)definition
404
- imageData : (FIRInAppMessagingImageData *)imageData {
445
+ imageData : (FIRInAppMessagingImageData *)imageData
446
+ triggerType : (FIRInAppMessagingDisplayTriggerType)triggerType {
405
447
switch (definition.renderData .renderingEffectSettings .viewMode ) {
406
448
case FIRIAMRenderAsBannerView:
407
- return [self bannerMessageWithMessageDefinition: definition imageData: imageData];
449
+ return [self bannerMessageWithMessageDefinition: definition
450
+ imageData: imageData
451
+ triggerType: triggerType];
408
452
case FIRIAMRenderAsModalView:
409
- return [self modalViewMessageWithMessageDefinition: definition imageData: imageData];
453
+ return [self modalViewMessageWithMessageDefinition: definition
454
+ imageData: imageData
455
+ triggerType: triggerType];
410
456
case FIRIAMRenderAsImageOnlyView:
411
- return [self imageOnlyMessageWithMessageDefinition: definition imageData: imageData];
457
+ return [self imageOnlyMessageWithMessageDefinition: definition
458
+ imageData: imageData
459
+ triggerType: triggerType];
412
460
default :
413
461
return nil ;
414
462
}
415
463
}
416
464
417
- - (void )displayForMessage : (FIRIAMMessageDefinition *)message {
465
+ - (void )displayForMessage : (FIRIAMMessageDefinition *)message
466
+ triggerType : (FIRInAppMessagingDisplayTriggerType)triggerType {
418
467
_currentMsgBeingDisplayed = message;
419
468
[message.renderData.contentData
420
469
loadImageDataWithBlock: ^(NSData *_Nullable imageNSData, NSError *error) {
@@ -424,8 +473,12 @@ - (void)displayForMessage:(FIRIAMMessageDefinition *)message {
424
473
FIRLogDebug (kFIRLoggerInAppMessaging , @" I-IAM400019" ,
425
474
@" Error in loading image data for the message." );
426
475
476
+ FIRInAppMessagingDisplayMessage *erroredMessage =
477
+ [self displayMessageWithMessageDefinition: message
478
+ imageData: imageData
479
+ triggerType: triggerType];
427
480
// short-circuit to display error handling
428
- [self displayErrorEncountered : error];
481
+ [self displayErrorForMessage: erroredMessage error : error];
429
482
return ;
430
483
} else if (imageNSData != nil ) {
431
484
imageData = [[FIRInAppMessagingImageData alloc ]
@@ -436,8 +489,10 @@ - (void)displayForMessage:(FIRIAMMessageDefinition *)message {
436
489
self.impressionRecorded = NO ;
437
490
self.isMsgBeingDisplayed = YES ;
438
491
439
- FIRInAppMessagingDisplayMessageBase *displayMessage =
440
- [self displayMessageWithMessageDefinition: message imageData: imageData];
492
+ FIRInAppMessagingDisplayMessage *displayMessage =
493
+ [self displayMessageWithMessageDefinition: message
494
+ imageData: imageData
495
+ triggerType: triggerType];
441
496
[self .messageDisplayComponent displayMessage: displayMessage displayDelegate: self ];
442
497
}];
443
498
}
@@ -481,7 +536,8 @@ - (void)checkAndDisplayNextAppForegroundMessage {
481
536
FIRIAMMessageDefinition *nextForegroundMessage = [self .messageCache nextOnAppOpenDisplayMsg ];
482
537
483
538
if (nextForegroundMessage) {
484
- [self displayForMessage: nextForegroundMessage];
539
+ [self displayForMessage: nextForegroundMessage
540
+ triggerType: FIRInAppMessagingDisplayTriggerTypeOnAppForeground];
485
541
self.lastDisplayTime = [self .timeFetcher currentTimestampInSeconds ];
486
542
} else {
487
543
FIRLogDebug (kFIRLoggerInAppMessaging , @" I-IAM400001" ,
0 commit comments