修改 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