借助 Firebase In-App Messaging,您几乎无需编写任何代码即可创建、配置和定位丰富的用户交互,并充分利用开箱即用的 Google Analytics(分析)功能,将消息传递事件与实际用户特征、活动和用户选择联系起来。 通过一些额外的 Firebase In-App Messaging SDK 集成,您可以进一步定制应用内消息的行为:在用户与消息交互时进行响应,在 Analytics 框架之外触发消息事件,并允许用户控制与消息交互相关的个人数据共享。
当用户与应用内消息交互时进行响应
通过添加操作,您可以使用应用内消息将用户定向到某个网站或应用中的特定界面。
您的代码可以对基本交互(点击和关闭行为)、展示(经过验证的消息查看行为)以及由 SDK 记录和确认的显示错误做出响应。例如,如果您使用卡片模态窗口 (Card modal) 显示消息,您可能希望跟踪用户点击了卡片上两个网址中的哪一个,并加以跟进。
实现 DisplayDelegate 以处理卡片交互
您可以注册应用内消息传递显示委托 (display delegate),若有用户与应用内消息交互,系统便会调用该委托。为此,请按照 InAppMessagingDisplayDelegate
协议实现一个类,并将 InAppMessaging
实例的委托属性设置为该类。
再假设您想要跟踪用户点击了卡片式消息上的哪个链接,请定义一个实现 DisplayDelegate
协议 messageClicked
方法的类,以便您可以查看用户点击的链接。
Swift
如需了解可以实现的回调方法集及其参数(包括 InAppMessagingAction),请参阅 Swift 显示委托参考文档。
// In CardActionFiamDelegate.swift
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {
func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
// ...
}
func messageDismissed(_ inAppMessage: InAppMessagingDisplayMessage,
dismissType: FIRInAppMessagingDismissType) {
// ...
}
func impressionDetected(for inAppMessage: InAppMessagingDisplayMessage) {
// ...
}
func displayError(for inAppMessage: InAppMessagingDisplayMessage, error: Error) {
// ...
}
}
// In AppDelegate.swift
// Register the delegate with the InAppMessaging instance
let myFiamDelegate = CardActionFiamDelegate()
InAppMessaging.inAppMessaging().delegate = myFiamDelegate;
Objective-C
如需了解可以实现的回调方法集及其参数(包括 FIRInAppMessagingDisplayMessage),请参阅 Objective-C 显示委托参考文档。
// In CardActionFiamDelegate.h
@interface CardActionFiamDelegate : NSObject <FIRInAppMessagingDisplayDelegate>
@end
// In CardActionFiamDelegate.m
@implementation CardActionFiamDelegate
- (void)displayErrorForMessage:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage
error:(nonnull NSError *)error {
// ...
}
- (void)impressionDetectedForMessage:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
// ...
}
- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
// ...
}
- (void)messageDismissed:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage
dismissType:(FIRInAppMessagingDismissType)dismissType {
// ...
}
@end
// In AppDelegate.m
CardActionFiamDelegate *myFiamDelegate = [CardActionFiamDelegate new];
[FIRInAppMessaging inAppMessaging].delegate = myFiamDelegate;
以编程方式触发应用内消息
默认情况下,Firebase In-App Messaging 允许您使用 Google Analytics for Firebase 事件触发应用内消息,而无需额外进行集成。您还可以使用 Firebase In-App Messaging SDK 的程序化触发器以编程方式手动触发事件。
在 In-App Messaging 宣传活动编辑器中,创建新宣传活动或选择现有宣传活动,并在编辑器工作流的“计划”步骤中,记下新创建或现有消息传递事件的 ID。记录后,对您的应用进行插桩 (instrument) 处理,以通过该事件 ID 触发事件。
Swift
…
// somewhere in the app's code
InAppMessaging.inAppMessaging().triggerEvent("exampleTrigger");
Objective-C
…
// somewhere in the app's code
[[FIRInAppMessaging inAppMessaging] triggerEvent:@"exampleTrigger"];
使用宣传活动自定义元数据
在宣传活动中,您可以通过一系列键值对来指定自定义数据。 当用户与消息互动时,您可以使用这些数据来实现各种目的,例如显示促销代码。
Swift
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {
func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
// Get data bundle from the inapp message
let appData = inAppMessage.appData
// ...
}
}
Objective-C
@implementation CardActionFiamDelegate
- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
appData = inAppMessage.appData
// ...
}
@end
暂时停用应用内消息
默认情况下,无论应用的当前状态如何,只要满足触发条件,Firebase In-App Messaging 就会显示消息。如果您出于任何原因想要禁止消息显示,例如为了避免打断付款处理流程,可以使用 SDK 的 messageDisplaySuppressed
属性来达到此目的,下面是设置该属性的 Objective-C 示例:
[FIRInAppMessaging inAppMessaging].messageDisplaySuppressed = YES;
将该属性设置为 YES
可阻止 Firebase In-App Messaging 显示消息,而设置为 NO
则可重新允许显示消息。应用重启时,SDK 会将该属性重置为 NO
。SDK 会忽略已禁止显示的消息。如需让 Firebase In-App Messaging 显示这些消息,必须在关闭禁止显示功能的情况下再次满足其触发条件。
允许选择停用消息传送
默认情况下,Firebase In-App Messaging 会自动向您在宣传活动中定位的所有应用用户传送消息。为了传送这些消息,Firebase In-App Messaging SDK 会使用“Firebase 安装 ID”来标识每个用户的应用。这意味着 In-App Messaging 必须将已关联到安装 ID 的客户端数据发送到 Firebase 服务器。如果您想让用户对其发送的数据有更多掌控权,请停用自动收集数据功能并让用户选择是否同意数据共享。
为此,您必须停用 Firebase In-App Messaging 的自动初始化功能,并为选择启用消息传送的用户手动初始化该服务:
在您的
Info.plist
文件中,使用一个新的键来关闭自动初始化功能:- 键:
FirebaseInAppMessagingAutomaticDataCollectionEnabled
- 值:
NO
- 键:
为所选用户手动初始化 Firebase In-App Messaging:
// Only needed if FirebaseInAppMessagingAutomaticDataCollectionEnabled is set to NO // in Info.plist [FIRInAppMessaging inAppMessaging].automaticDataCollectionEnabled = YES;
将
automaticDataCollectionEnabled
设置为YES
后,该值将在应用重启后持续有效,并会覆盖Info.plist
中的值。如果您想再次停用初始化(例如,如果用户稍后选择停用数据收集),请将该属性设置为NO
。