| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478 |
- /*
- * Copyright 2018 Google
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #import <UIKit/UIKit.h>
- NS_ASSUME_NONNULL_BEGIN
- /// The type and UI style of an in-app message.
- typedef NS_ENUM(NSInteger, FIRInAppMessagingDisplayMessageType) {
- /// Modal style.
- FIRInAppMessagingDisplayMessageTypeModal,
- /// Banner style.
- FIRInAppMessagingDisplayMessageTypeBanner,
- /// Image-only style.
- FIRInAppMessagingDisplayMessageTypeImageOnly,
- /// Card style.
- FIRInAppMessagingDisplayMessageTypeCard
- };
- /// Represents how an in-app message should be triggered to appear.
- typedef NS_ENUM(NSInteger, FIRInAppMessagingDisplayTriggerType) {
- /// Triggered on app foreground.
- FIRInAppMessagingDisplayTriggerTypeOnAppForeground,
- /// Triggered from an analytics event being fired.
- FIRInAppMessagingDisplayTriggerTypeOnAnalyticsEvent
- };
- /** Contains the display information for an action button.
- */
- NS_SWIFT_NAME(InAppMessagingActionButton)
- @interface FIRInAppMessagingActionButton : NSObject
- /**
- * Gets the text string for the button
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *buttonText;
- /**
- * Gets the button's text color.
- */
- @property(nonatomic, copy, nonnull, readonly) UIColor *buttonTextColor;
- /**
- * Gets the button's background color
- */
- @property(nonatomic, copy, nonnull, readonly) UIColor *buttonBackgroundColor;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithButtonText:(NSString *)btnText
- buttonTextColor:(UIColor *)textColor
- backgroundColor:(UIColor *)bkgColor __deprecated;
- @end
- /** Contain display data for an image for a fiam message.
- */
- NS_SWIFT_NAME(InAppMessagingImageData)
- @interface FIRInAppMessagingImageData : NSObject
- /**
- * Gets the image URL from image data.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *imageURL;
- /**
- * Gets the downloaded image data. It can be null if headless component fails to load it.
- */
- @property(nonatomic, readonly, nullable) NSData *imageRawData;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithImageURL:(NSString *)imageURL imageData:(NSData *)imageData __deprecated;
- @end
- /** Defines the metadata for the campaign to which a FIAM message belongs.
- */
- NS_SWIFT_NAME(InAppMessagingCampaignInfo)
- @interface FIRInAppMessagingCampaignInfo : NSObject
- /**
- * Identifier for the campaign for this message.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *messageID;
- /**
- * The name of this campaign, as defined in the console on campaign creation.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *campaignName;
- /**
- * Whether or not this message is being rendered in Test On Device mode.
- */
- @property(nonatomic, readonly) BOOL renderAsTestMessage;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithMessageID:(NSString *)messageID
- campaignName:(NSString *)campaignName
- renderAsTestMessage:(BOOL)renderAsTestMessage __deprecated;
- @end
- /** Defines the metadata for a FIAM action.
- */
- NS_SWIFT_NAME(InAppMessagingAction)
- @interface FIRInAppMessagingAction : NSObject
- /**
- * The text of the action button, if applicable.
- */
- @property(nonatomic, nullable, copy, readonly) NSString *actionText;
- /**
- * The URL to follow if the action is clicked.
- */
- @property(nonatomic, nullable, copy, readonly) NSURL *actionURL;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// This class should only be initialized from a custom in-app message UI component implementation.
- - (instancetype)initWithActionText:(nullable NSString *)actionText
- actionURL:(nullable NSURL *)actionURL;
- @end
- /**
- * Base class representing a FIAM message to be displayed. Don't create instance
- * of this class directly. Instantiate one of its subclasses instead.
- */
- NS_SWIFT_NAME(InAppMessagingDisplayMessage)
- @interface FIRInAppMessagingDisplayMessage : NSObject
- /**
- * Metadata for the campaign to which this message belongs.
- */
- @property(nonatomic, copy, nonnull, readonly) FIRInAppMessagingCampaignInfo *campaignInfo;
- /**
- * The type and UI style of this message.
- */
- @property(nonatomic, readonly) FIRInAppMessagingDisplayMessageType type;
- /**
- * How this message should be triggered.
- */
- @property(nonatomic, readonly) FIRInAppMessagingDisplayTriggerType triggerType;
- /**
- * Extra key-value dictionary data that can be sent along with the message
- */
- @property(nonatomic, nullable, readonly) NSDictionary *appData;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithMessageID:(NSString *)messageID
- campaignName:(NSString *)campaignName
- renderAsTestMessage:(BOOL)renderAsTestMessage
- messageType:(FIRInAppMessagingDisplayMessageType)messageType
- triggerType:(FIRInAppMessagingDisplayTriggerType)triggerType __deprecated;
- @end
- NS_SWIFT_NAME(InAppMessagingCardDisplay)
- @interface FIRInAppMessagingCardDisplay : FIRInAppMessagingDisplayMessage
- /**
- * Gets the title text for a card FIAM message.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *title;
- /**
- * Gets the body text for a card FIAM message.
- */
- @property(nonatomic, nullable, copy, readonly) NSString *body;
- /**
- * Gets the color for text in card FIAM message. It applies to both title and body text.
- */
- @property(nonatomic, copy, nonnull, readonly) UIColor *textColor;
- /**
- * Image data for the supplied portrait image for a card FIAM messasge.
- */
- @property(nonatomic, nonnull, copy, readonly) FIRInAppMessagingImageData *portraitImageData;
- /**
- * Image data for the supplied landscape image for a card FIAM message.
- */
- @property(nonatomic, nullable, copy, readonly) FIRInAppMessagingImageData *landscapeImageData;
- /**
- * The background color for a card FIAM message.
- */
- @property(nonatomic, copy, nonnull, readonly) UIColor *displayBackgroundColor;
- /**
- * Metadata for a card FIAM message's primary action button.
- */
- @property(nonatomic, nonnull, readonly) FIRInAppMessagingActionButton *primaryActionButton;
- /**
- * The action URL for a card FIAM message's primary action button.
- */
- @property(nonatomic, nullable, readonly) NSURL *primaryActionURL;
- /**
- * Metadata for a card FIAM message's secondary action button.
- */
- @property(nonatomic, nullable, readonly) FIRInAppMessagingActionButton *secondaryActionButton;
- /**
- * The action URL for a card FIAM message's secondary action button.
- */
- @property(nonatomic, nullable, readonly) NSURL *secondaryActionURL;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- @end
- /** Class for defining a modal message for display.
- */
- NS_SWIFT_NAME(InAppMessagingModalDisplay)
- @interface FIRInAppMessagingModalDisplay : FIRInAppMessagingDisplayMessage
- /**
- * Gets the title for a modal fiam message.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *title;
- /**
- * Gets the image data for a modal fiam message.
- */
- @property(nonatomic, nullable, copy, readonly) FIRInAppMessagingImageData *imageData;
- /**
- * Gets the body text for a modal fiam message.
- */
- @property(nonatomic, nullable, copy, readonly) NSString *bodyText;
- /**
- * Gets the action button metadata for a modal fiam message.
- */
- @property(nonatomic, nullable, readonly) FIRInAppMessagingActionButton *actionButton;
- /**
- * Gets the action URL for a modal fiam message.
- */
- @property(nonatomic, nullable, readonly) NSURL *actionURL;
- /**
- * Gets the background color for a modal fiam message.
- */
- @property(nonatomic, copy, nonnull) UIColor *displayBackgroundColor;
- /**
- * Gets the color for text in modal fiam message. It would apply to both title and body text.
- */
- @property(nonatomic, copy, nonnull) UIColor *textColor;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithMessageID:(NSString *)messageID
- campaignName:(NSString *)campaignName
- renderAsTestMessage:(BOOL)renderAsTestMessage
- triggerType:(FIRInAppMessagingDisplayTriggerType)triggerType
- titleText:(NSString *)title
- bodyText:(NSString *)bodyText
- textColor:(UIColor *)textColor
- backgroundColor:(UIColor *)backgroundColor
- imageData:(nullable FIRInAppMessagingImageData *)imageData
- actionButton:(nullable FIRInAppMessagingActionButton *)actionButton
- actionURL:(nullable NSURL *)actionURL __deprecated;
- @end
- /** Class for defining a banner message for display.
- */
- NS_SWIFT_NAME(InAppMessagingBannerDisplay)
- @interface FIRInAppMessagingBannerDisplay : FIRInAppMessagingDisplayMessage
- /**
- * Gets the title of a banner message.
- */
- @property(nonatomic, nonnull, copy, readonly) NSString *title;
- /**
- * Gets the image data for a banner message.
- */
- @property(nonatomic, nullable, copy, readonly) FIRInAppMessagingImageData *imageData;
- /**
- * Gets the body text for a banner message.
- */
- @property(nonatomic, nullable, copy, readonly) NSString *bodyText;
- /**
- * Gets banner's background color
- */
- @property(nonatomic, copy, nonnull, readonly) UIColor *displayBackgroundColor;
- /**
- * Gets the color for text in banner fiam message. It would apply to both title and body text.
- */
- @property(nonatomic, copy, nonnull) UIColor *textColor;
- /**
- * Gets the action URL for a banner fiam message.
- */
- @property(nonatomic, nullable, readonly) NSURL *actionURL;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithMessageID:(NSString *)messageID
- campaignName:(NSString *)campaignName
- renderAsTestMessage:(BOOL)renderAsTestMessage
- triggerType:(FIRInAppMessagingDisplayTriggerType)triggerType
- titleText:(NSString *)title
- bodyText:(NSString *)bodyText
- textColor:(UIColor *)textColor
- backgroundColor:(UIColor *)backgroundColor
- imageData:(nullable FIRInAppMessagingImageData *)imageData
- actionURL:(nullable NSURL *)actionURL __deprecated;
- @end
- /** Class for defining a image-only message for display.
- */
- NS_SWIFT_NAME(InAppMessagingImageOnlyDisplay)
- @interface FIRInAppMessagingImageOnlyDisplay : FIRInAppMessagingDisplayMessage
- /**
- * Gets the image for this message
- */
- @property(nonatomic, nonnull, copy, readonly) FIRInAppMessagingImageData *imageData;
- /**
- * Gets the action URL for an image-only fiam message.
- */
- @property(nonatomic, nullable, readonly) NSURL *actionURL;
- /// Unavailable.
- - (instancetype)init NS_UNAVAILABLE;
- /// Deprecated, this class shouldn't be directly instantiated.
- - (instancetype)initWithMessageID:(NSString *)messageID
- campaignName:(NSString *)campaignName
- renderAsTestMessage:(BOOL)renderAsTestMessage
- triggerType:(FIRInAppMessagingDisplayTriggerType)triggerType
- imageData:(nullable FIRInAppMessagingImageData *)imageData
- actionURL:(nullable NSURL *)actionURL __deprecated;
- @end
- /// The way that an in-app message was dismissed.
- typedef NS_ENUM(NSInteger, FIRInAppMessagingDismissType) {
- /// Message was swiped away (only valid for banner messages).
- FIRInAppMessagingDismissTypeUserSwipe,
- /// The user tapped a button to close this message.
- FIRInAppMessagingDismissTypeUserTapClose,
- /// The message was automatically dismissed (only valid for banner messages).
- FIRInAppMessagingDismissTypeAuto,
- /// Dismiss method unknown.
- FIRInAppMessagingDismissUnspecified,
- };
- /// Error code for an in-app message that failed to display.
- typedef NS_ENUM(NSInteger, FIAMDisplayRenderErrorType) {
- /// The image data for this in-app message is invalid.
- FIAMDisplayRenderErrorTypeImageDataInvalid,
- /// Unexpected error.
- FIAMDisplayRenderErrorTypeUnspecifiedError,
- };
- /**
- * A protocol defining those callbacks to be triggered by the message display component
- * under appropriate conditions.
- */
- NS_SWIFT_NAME(InAppMessagingDisplayDelegate)
- @protocol FIRInAppMessagingDisplayDelegate <NSObject>
- @optional
- /**
- * Called when the message is dismissed. Should be called from main thread.
- * @param inAppMessage the message that was dismissed.
- * @param dismissType specifies how the message is closed.
- */
- - (void)messageDismissed:(FIRInAppMessagingDisplayMessage *)inAppMessage
- dismissType:(FIRInAppMessagingDismissType)dismissType;
- /**
- * Called when the message's action button is followed by the user.
- * @param inAppMessage the message that was clicked.
- */
- - (void)messageClicked:(FIRInAppMessagingDisplayMessage *)inAppMessage __deprecated;
- /**
- * Called when the message's action button is followed by the user.
- * @param inAppMessage the message that was clicked.
- * @param action contains the text and URL for the action that was clicked.
- */
- - (void)messageClicked:(FIRInAppMessagingDisplayMessage *)inAppMessage
- withAction:(FIRInAppMessagingAction *)action;
- /**
- * Use this to mark a message as having gone through enough impression so that
- * headless component can make appropriate impression tracking for it.
- *
- * Calling this is optional.
- *
- * When messageDismissedWithType: or messageClicked is
- * triggered, the message would be marked as having a valid impression implicitly.
- * Use impressionDetected if the UI implementation would like to mark valid
- * impression in additional cases. One example is that the message is displayed for
- * N seconds and then the app is killed by the user. Neither
- * onMessageDismissedWithType or onMessageClicked would be triggered
- * in this case. But if the app regards this as a valid impression and does not
- * want the user to see the same message again, call impressionDetected to mark
- * a valid impression.
- * @param inAppMessage the message for which an impression was detected.
- */
- - (void)impressionDetectedForMessage:(FIRInAppMessagingDisplayMessage *)inAppMessage;
- /**
- * Called when the display component could not render the message due to various reason.
- * It's essential for display component to call this when error does arise. On seeing
- * this, the headless component of fiam would assume that a prior attempt to render a
- * message has finished and therefore it's ready to render a new one when conditions are
- * met. Missing this callback in failed rendering attempt would make headless
- * component think a fiam message is still being rendered and therefore suppress any
- * future message rendering.
- * @param inAppMessage the message that encountered a display error.
- */
- - (void)displayErrorForMessage:(FIRInAppMessagingDisplayMessage *)inAppMessage
- error:(NSError *)error;
- @end
- /**
- * The protocol that a FIAM display component must implement.
- */
- NS_SWIFT_NAME(InAppMessagingDisplay)
- @protocol FIRInAppMessagingDisplay
- /**
- * Method for rendering a specified message on client side. It's called from main thread.
- * @param messageForDisplay the message object. It would be of one of the three message
- * types at runtime.
- * @param displayDelegate the callback object used to trigger notifications about certain
- * conditions related to message rendering.
- */
- - (void)displayMessage:(FIRInAppMessagingDisplayMessage *)messageForDisplay
- displayDelegate:(id<FIRInAppMessagingDisplayDelegate>)displayDelegate;
- @end
- NS_ASSUME_NONNULL_END
|