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


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

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

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

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

Реализуйте 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.

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

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