修改 Firebase In-App Messaging 消息的行为


借助 Firebase In-App Messaging,您几乎无需编写任何代码即可创建、配置和定位丰富的用户互动,并充分利用开箱即用的 Google Analytics 功能,将消息传递事件与实际用户特征、活动和用户选择联系起来。 通过一些额外的 Firebase In-App Messaging SDK 集成,您可以进一步量身定制应用内消息的行为,在用户与消息互动时做出响应,在 Analytics 框架之外触发消息事件,并允许用户控制与消息互动相关的个人数据的分享。

当用户与应用内消息交互时进行响应

通过添加操作,您可以使用应用内消息将用户定向到某个网站或应用中的特定界面。

您的代码可以对基本交互(点击和关闭行为)、展示(经过验证的消息查看行为)以及由 SDK 记录和确认的显示错误做出响应。例如,如果您使用卡片模态窗口 (Card modal) 显示消息,您可能希望跟踪用户点击了卡片上两个网址中的哪一个,并加以跟进。

实现 DisplayDelegate 以处理卡片交互

您可以注册应用内消息传递显示委托 (display delegate),若有用户与应用内消息交互,系统便会调用该委托。为此,请按照 InAppMessagingDisplayDelegate 协议实现一个类,并将 InAppMessaging 实例的委托属性设置为该类。

再假设您想要跟踪用户点击了卡片式消息上的哪个链接,请定义一个实现 DisplayDelegate 协议 messageClicked 方法的类,以便您可以查看用户点击的链接。

Swift

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。

如需了解可以实现的回调方法集及其参数(包括 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

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。

如需了解可以实现的回调方法集及其参数(包括 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

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。

// somewhere in the app's code
InAppMessaging.inAppMessaging().triggerEvent("exampleTrigger");

Objective-C

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。

// somewhere in the app's code
[[FIRInAppMessaging inAppMessaging] triggerEvent:@"exampleTrigger"];

使用宣传活动自定义元数据

在宣传活动中,您可以通过一系列键值对来指定自定义数据。 当用户与消息互动时,您可以使用这些数据来实现各种目的,例如显示促销代码。

Swift

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {

    func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
	// Get data bundle from the inapp message
	let appData = inAppMessage.appData
	// ...
    }
}

Objective-C

注意:此产品不适用于 macOS、Mac Catalyst、App Clip 或 watchOS 目标。
@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 的自动初始化功能,并为选择启用消息传送的用户手动初始化该服务:

  1. 在您的 Info.plist 文件中,使用一个新的键来关闭自动初始化功能:

    • 键:FirebaseInAppMessagingAutomaticDataCollectionEnabled
    • 值:NO
  2. 为所选用户手动初始化 Firebase In-App Messaging

    // Only needed if FirebaseInAppMessagingAutomaticDataCollectionEnabled is set to NO
    // in Info.plist
    [FIRInAppMessaging inAppMessaging].automaticDataCollectionEnabled = YES;
    
    

    automaticDataCollectionEnabled 设置为 YES 后,该值将在应用重启后持续有效,并会覆盖 Info.plist 中的值。如果您想再次停用初始化(例如,如果用户稍后选择停用数据收集),请将该属性设置为 NO