Modificar o comportamento de mensagens do recurso Mensagens no app do Firebase


Com pouco ou nenhum esforço de programação, o recurso "Mensagens no app" do Firebase permite criar, configurar e segmentar interações avançadas dos usuários, aproveitando os recursos prontos do Google Analytics para vincular eventos de mensagens a características, atividades e escolhas reais dos usuários. Com algumas integrações adicionais do SDK Firebase In-App Messaging, é possível personalizar ainda mais o comportamento das mensagens no app, respondendo quando os usuários interagem com mensagens, acionando eventos de mensagem fora do framework Analytics e permitindo que os usuários controlem o compartilhamento dos dados pessoais relacionados às interações de mensagens.

Enviar respostas quando os usuários interagirem com mensagens no app

Com as ações, é possível usar suas mensagens no app para direcionar os usuários para um site ou uma tela específica no app.

Seu código pode responder a interações básicas, como cliques e ações de dispensar, a impressões, ou seja, visualizações das suas mensagens, e a exibições de erros registrados e confirmados pelo SDK. Por exemplo, se sua mensagem for do tipo modal de cartão, talvez você queira monitorar e acompanhar em quais URLs desse cartão o usuário clicou.

Implementar um DisplayDelegate para gerenciar as interações do cartão

É possível registrar um "delegate" de exibição de mensagens no app que será chamado sempre que houver alguma interação com uma mensagem. Para isso, implemente uma classe por protocolo InAppMessagingDisplayDelegate e configure como a propriedade "delegate" na instância InAppMessaging.

Para saber em qual link um usuário clicou em uma mensagem estilo cartão, defina uma classe que implemente o método messageClicked pelo protocolo DisplayDelegate para acesso ao link clicado pelo usuário.

Swift

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.

Consulte a referência da propriedade "delegate" de exibição do Swift para ver o conjunto de métodos de callback que podem ser implementados e os parâmetros deles, incluindo InAppMessagingAction.


// 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

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.

Consulte a referência da propriedade "delegate" de exibição do Swift para ver o conjunto de métodos de callback que podem ser implementados e os parâmetros deles, incluindo 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;

Acionar mensagens no app de forma programática

Por padrão, o recurso Firebase In-App Messaging permite acionar mensagens no app com eventos do Google Analytics para Firebase, sem integração adicional. Também é possível acionar eventos manualmente, mas de forma programática, com os acionadores programáticos do SDK do Firebase In-App Messaging.

No editor de campanhas do recurso "Mensagens no app", crie uma nova campanha ou selecione uma atual. Na etapa "Programação" do fluxo de trabalho do editor, anote o ID de um evento de mensagens recém-criado ou atual. Depois, configure seu app para acionar o evento de acordo com o ID.

Swift

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.

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

Objective-C

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.

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

Usar metadados personalizados da campanha

Em suas campanhas, você pode especificar dados personalizados em uma série de pares de chave-valor. Quando os usuários interagem com as mensagens, esses dados ficam disponíveis para você exibir um código promocional, por exemplo.

Swift

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.
class CardActionFiamDelegate : NSObject, InAppMessagingDisplayDelegate {

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

Objective-C

Observação: este produto não está disponível para destinos macOS, Mac Catalyst, App Clip ou watchOS.
@implementation CardActionFiamDelegate

- (void)messageClicked:(nonnull FIRInAppMessagingDisplayMessage *)inAppMessage {
	appData = inAppMessage.appData
	// ...
}

@end

Desativar temporariamente as mensagens no app

Por padrão, o Firebase In-App Messaging processa mensagens sempre que uma condição de acionamento é atendida, independentemente do estado atual de um app. Se você quiser suprimir a exibição de mensagens por qualquer motivo, por exemplo, para evitar a interrupção de uma sequência de telas de processamento de pagamento, use a propriedade messageDisplaySuppressed do SDK, conforme mostrado na seção referente ao Objective-C:

  [FIRInAppMessaging inAppMessaging].messageDisplaySuppressed = YES;

Definir a propriedade como YES impede que o Firebase In-App Messaging mostre mensagens, enquanto NO reativa a exibição delas. O SDK redefine a propriedade como NO na reinicialização do app. As mensagens suprimidas são ignoradas pelo SDK. As condições de acionamento precisarão ser atendidas novamente enquanto a supressão estiver desativada para que Firebase In-App Messaging possa exibi-las.

Ativar entrega de mensagens de desativação

Por padrão, o Firebase In-App Messaging entrega mensagens automaticamente para todos os usuários do seu app que são segmentados nas campanhas de mensagens. Para entregar essas mensagens, o SDK Firebase In-App Messaging usa os IDs de instalação Firebase para identificar o app de cada usuário. Isso significa que o In-App Messaging precisa enviar dados do cliente, vinculados ao ID de instalação, aos servidores do Firebase. Se você quiser dar aos usuários mais controle sobre os dados enviados, desative a coleta automática de dados. Assim, eles poderão aprovar o compartilhamento.

Para isso, você precisa desativar a inicialização automática para Firebase In-App Messaging e inicializar o serviço manualmente para os usuários que aceitaram:

  1. Desative a inicialização automática com uma nova chave no arquivo Info.plist:

    • Chave: FirebaseInAppMessagingAutomaticDataCollectionEnabled
    • Valor: NO
  2. Inicialize Firebase In-App Messaging para usuários selecionados manualmente:

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

    Quando você define automaticDataCollectionEnabled como YES, o valor persiste entre as reinicializações do app, modificando o valor no seu Info.plist. Se você quiser desativar a inicialização novamente, por exemplo, se um usuário não quiser mais participar da coleta, defina a propriedade como NO.