Firebase In-App Messaging provides a useful set of preconfigured behaviors and message types with a default look and feel, but in some cases you may want to extend behaviors and message content. In-App Messaging allows you to add actions to messages and customize message look and feel.
Add an action to your message
With actions you can use your in-app messages to direct users to a website or a specific screen in your app.
Implement a deep link handler
Firebase In-App Messaging uses link handlers to process actions. The SDK is able to use a number of handlers, so if your app already has one, Firebase In-App Messaging can use that without any further setup. If you don't yet have a handler, you can use Firebase Dynamic Links. To learn more, read Create Dynamic Links on iOS.
Add the action to your message using the Firebase console
Once your app has a link handler, you're ready to compose a campaign with an action. Open the Firebase console to In-App Messaging, and start a new campaign or edit an existing campaign. In that campaign, provide a Card, Button text and Button action, an Image action, or a Banner action, where the action is a relevant deep link.
The action's format depends on which message layout you choose. Modals get action buttons with customizable button text content, text color, and background color. Images and top banners, on the other hand, become interactive and invoke the specified action when tapped.
Modify message look and feel
Firebase In-App Messaging lets you customize message displays to change the way your app renders messages' layout, font styles, button shapes, and other details. There are two ways to modify message displays: modify the default Firebase In-App Messaging displays or create your own message display library from scratch.
Modify default displays
The most straightforward way customize your messages is to build off of Firebase In-App Messaging's default message display code.
Select message types to modify
With the repo cloned, you can modify any or all of the Firebase In-App Messaging message types:
ImageOnly. Each type corresponds to a
message layout in the Firebase In-App Messaging campaign creation flow.
Accordingly, each type has access to a different set of data, determined by campaign customization options in the Firebase console:
Modify the message display rendering code
With the message type limitations in mind, you're free to modify them however you'd like. You can create a banner that displays at the bottom of your app, move around the action button on a modal, embed the in-app message in a user's feed, or any other modification that would make the messages' look and feel fit your app.
There are two main things to pay attention to when modifying message displays:
- Message type directories: Each message type has a separate directory with files that determine that type's logic:
- Storyboard: The
InAppMessagingDisplaylibrary also has a
.storyboardfile that helps define the UI for all three message types:
Modify files in your preferred message types' directories and the corresponding
sections of the
.storyboard to create your custom message displays.
Update your podfile to use your modified
To get Firebase In-App Messaging to use your modified message displays instead of the default
displays, update your podfile to use your customized
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'YourProject' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for YourProject pod 'Firebase' # Remove the default InAppMessagingDisplay pod: # pod 'Firebase/InAppMessagingDisplay' # Overwrite it with a version that points to your local copy: pod `FirebaseInAppMessagingDisplay', :path => '~/Path/To/The/Cloned/Repo/' end
Create your own message display library
You're not limited to working from the
InAppMessagingDisplay library to create
a UI for displaying messages. You can also write your own code from scratch.
Build a class that implements the
Firebase In-App Messaging uses the
FIRInAppMessaging class to handle communications between
Firebase servers and your app. That class, in turn, uses the
FIRInAppMessagingRendering protocol to display the messages it receives.
To build your own display library, write a class that implements the protocol.
The protocol definition and documentation on how to conform to it are in the
FIRInAppMessagingRendering.h file of the
InAppMessaging library. If
you've already set up Firebase In-App Messaging, you
can find the file under your Xcode project directory:
messageDisplayComponent to use your message display library
FIRInAppMessaging uses its
property to determine which object
to use when displaying messages. Set that property to an object of your custom
message display class, so Firebase In-App Messaging knows to use your library to render messages:
[FIRInAppMessaging inAppMessaging].messageDisplayComponent = yourFIRInAppMessagingRenderingInstance;
Modify your podfile to use the headless version of Firebase In-App Messaging
The default Firebase In-App Messaging pod,
assigns itself as your app's
messageDisplayComponent. To get around that, use
Firebase/InAppMessaging pod instead:
# Uncomment the next line to define a global platform for your project # platform :ios, '9.0' target 'YourProject' do # Comment the next line if you're not using Swift and don't want to use dynamic frameworks use_frameworks! # Pods for YourProject pod 'Firebase' # Remove the default InAppMessagingDisplay pod: # pod 'Firebase/InAppMessagingDisplay' # Include the headless pod instead: pod `Firebase/InAppMessaging' end