Как изменить поведение сообщений Firebase In-App Messaging


Firebase In-App Messaging позволяет создавать, настраивать и таргетировать сообщения для пользователей, практически не прибегая к программированию. При этом используются возможности Google Analytics, позволяющие связывать события сообщений с характеристиками, действиями и выбором пользователей. Дополнительная интеграция SDK Firebase In-App Messaging позволяет настраивать поведение сообщений в приложении, реагировать на взаимодействие пользователей с сообщениями, активировать события сообщений за пределами фреймворка Analytics и разрешать пользователям управлять передачей своих персональных данных, связанных с взаимодействием с сообщениями.

Как реагировать на взаимодействие пользователей с сообщениями в приложении

С помощью действий вы можете направлять пользователей на сайт или определенный экран в приложении.

Ваш код может реагировать на основные взаимодействия (клики и закрытия), показы (подтвержденные просмотры сообщений) и ошибки отображения, зарегистрированные и подтвержденные SDK. Например, если сообщение оформлено в виде карточки, вы можете отслеживать, на какую из двух ссылок нажал пользователь.

Реализуйте DisplayDelegate для обработки взаимодействий с карточками

Вы можете зарегистрировать делегат показа сообщений в приложении, который будет вызываться при любом взаимодействии с сообщением в приложении. Для этого реализуйте класс в соответствии с протоколом InAppMessagingDisplayDelegate и задайте его в качестве свойства делегата в экземпляре InAppMessaging.

Предположим, что вы хотите отслеживать, на какую ссылку нажал пользователь в сообщении в виде карточки. Для этого определите класс, который реализует метод messageClicked в соответствии с протоколом DisplayDelegate. Это позволит вам получить доступ к ссылке, на которую нажал пользователь.

Swift

Примечание. Этот продукт недоступен для macOS, Mac Catalyst, App Clip и watchOS.

В справочнике по делегату показа Swift вы найдете набор методов обратного вызова, которые можно реализовать, и их параметры, включая InAppMessagingAction.


// In CardActionFiamDelegate.swift
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {

    func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage) {
        // ...
    }

    func messageDismissed(_ inAppMessage: InAppMessagingDisplayMessage,
                          dismissType: InAppMessagingDismissType) {
        // ...
    }

    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.

В справочнике по делегату отображения Objective-C приведены методы обратного вызова, которые можно реализовать, и их параметры, включая FIRInAppMessagingDisplayMessage.


// 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 Аналитики для Firebase без дополнительной интеграции. Вы также можете вручную активировать события с помощью программных триггеров SDK Firebase In-App Messaging.

В редакторе кампаний In-App Messaging создайте новую кампанию или выберите существующую. На этапе планирования найдите идентификатор нового или существующего события. Затем настройте приложение так, чтобы событие активировалось по его идентификатору.

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 CardActionDelegate : 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 ExampleCardActionDelegate

- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
    NSDictionary *appData = inAppMessage.appData;
    NSLog(@"Message data: %@", appData);
	// ...
}

@end

Как временно отключить сообщения в приложении

По умолчанию Firebase In-App Messaging показывает сообщения, когда выполняется условие активации, независимо от текущего состояния приложения. Если вы хотите по какой-либо причине отключить показ сообщений, например чтобы не прерывать последовательность экранов обработки платежей, используйте свойство messageDisplaySuppressed SDK, как показано в примере на Objective-C:

  [FIRInAppMessaging inAppMessaging].messageDisplaySuppressed = YES;

Если задать для свойства значение YES, Firebase In-App Messaging не будет показывать сообщения, а если задать значение NO, показ сообщений будет включен. При перезапуске приложения SDK сбрасывает значение свойства до NO. SDK игнорирует сообщения, показ которых запрещен. Чтобы Firebase In-App Messaging снова показывал их, условия активации должны быть выполнены, когда подавление отключено.

Включить доставку сообщений об отказе

По умолчанию Firebase In-App Messaging автоматически доставляет сообщения всем пользователям приложения, на которых вы настроили таргетинг в кампаниях обмена сообщениями. Чтобы доставлять эти сообщения, SDK Firebase In-App Messaging использует идентификаторы установки Firebase, которые позволяют определить приложение каждого пользователя. Это означает, что In-App Messaging должен отправлять на серверы 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.