Tratamento personalizado de mensagens

Prev Next

Com o Xtremepush SDK, você, como desenvolvedor, tem um retorno unificado para todas as interações do usuário com mensagens. Você pode usá-lo para implementar qualquer lógica de negócio se o mecanismo padrão de deep linking não for suficiente.

iOS

Objective-C

A interação do usuário é descrita com o XPMessageResponse modelo. Ele contém:

  • XPMessage *mensagem

  • XPAction *ação

XPMessage contém:

  • XPMessageType *tipo - tipo de mensagem, um dos:

    • XPMessageType_Push

    • XPMessageType_Inapp

    • XPMessageType_Inbox

  • NSString *identificador - ID da mensagem

  • NSString *campaignIdentifier - ID da campanha

  • NSString *título - título da mensagem

  • NSString *texto - texto de mensagem

  • NSDictionary *dados - cargas úteis personalizadas

  • NSDictionary *payload - carga útil de mensagem bruta

XPAction contém:

  • XPActionType *tipo - tipo de resposta, um dos:

    • XPActionType_Click

    • XPActionType_Dismiss

    • XPActionType_Present

  • NSString *identificador - identificador de ação (como ID de botão, opcional)

Veja como registrar o manipulador:

[XPush registerMessageResponseHandler:^(XPMessageResponse *response) {
    switch (response.action.type) {
        case XPActionType_Click:
            // Logic when message is clicked
            break;
        case XPActionType_Dismiss:
            // Logic when message is dismissed
            break;
        case XPActionType_Present:
            // Logic when message is received in foreground
            break;
    }
}];

Se você usa notificações interativas e quer lidar com cliques de botão em segundo plano, precisa garantir que use um método com um handler de completação:

[XPush registerMessageResponseHandlerWithCompletion:^(XPMessageResponse * _Nonnull x, XPMessageCompletionBlock  _Nonnull completionHandler) {
    if (response.action.type == XPActionType_Click) {
            if (response.action.identifier == @"like") {
                   // Like article asynchronously and call completionHandler when finished
                   [self likeArticle: response.message.data[@"articleId"] completionHandler: completionHandler];
                   return;
            }
    }

    // If nothing to be done
    completionHandler();
}];

Abaixo está um exemplo completo de tratamento personalizado de notificações. Ele faz várias coisas:

  • Mostra um diálogo personalizado quando uma mensagem push é recebida em primeiro plano

  • Abre uma página de artigo quando uma mensagem é clicada

  • Salva as informações quando um dos botões da mensagem é clicado

[XPush registerMessageResponseHandlerWithCompletion: ^(XPMessageResponse * _Nonnull response, XPMessageCompletionBlock  _Nonnull completionHandler) {        
        switch (response.action.type) {

            // When message is received in foreground
            case XPActionType_Present:
                // Show an article dialog with "View" button
                [self showArticleDialog: response.message viewButtonCallback: ^{
                    // Report message as clicked
                    [XPush reportMessageClicked:response.message];
                    // Navigate to article page
                    [self openArticle: x.message.data[@"articleId"]];
                }];
                break;
                
            // When message is clicked
            case XPActionType_Click:
                // Default click action
                if (response.action.identifier == nil) {
                    // Navigate to the article page
                    [self openArticle: response.message.data[@"articleId"]];
                } 

                // Action for a certain button click
                else {
                    switch(response.action.identifier) {
                        case "like":
                              // Like article asynchronously and call completionHandler when finished
                              [self likeArticle: response.message.data[@"articleId"] completionHandler: completionHandler];
                              return;
                    }
                }
                break;
        }
    
        completionHandler();
}];

Marque uma mensagem como aberta

OsreportMessageOpenede reportMessageClickedfunction são adições ao SDK que permitem aos desenvolvedores implementar o recurso de marcar uma mensagem como aberta ou clicada quando um usuário a abre ou clica nela dentro de sua aplicação. Essa função é especialmente útil para aumentar o engajamento do usuário e fornecer feedback em tempo real sobre interações de mensagens. Quando chamado, ele aciona um evento dentro do SDK que registra a mensagem como aberta ou clicada, dependendo da função utilizada, para fins de rastreamento e análise. Desenvolvedores podem facilmente integrar essa função ao fluxo de trabalho de gerenciamento de mensagens de seus aplicativos para melhorar a experiência do usuário e obter insights sobre padrões de engajamento do usuário.

+ (void)reportMessageOpened:(XPMessage *)message context:(NSDictionary *)context
+ (void)reportMessageOpened:(XPMessage *)message actionIdentifier:(NSString*)actionIdentifier
                                                          
reportMessageOpened(_ message: XPMessage!, actionIdentifier: String!)
reportMessageOpened(_ message: XPMessage!, context: [AnyHashable : Any]!)
+ (void)reportMessageClicked:(XPMessage *)message context:(NSDictionary*)context;
+ (void)reportMessageClicked:(XPMessage *)message actionIdentifier:(NSString*)actionIdentifier;
reportMessageClicked(_ message: XPMessage!, actionIdentifier: String!)
reportMessageClicked(_ message: XPMessage!, context: [AnyHashable : Any]!)

Mensagens clicadas serão consideradas abertas

Marcar uma mensagem como clicada usando o método descrito automaticamente a marca como aberta, pois o usuário não pode clicar na mensagem sem abri-la primeiro. No entanto, marcar uma mensagem como aberta não atualiza automaticamente o valor de clique, pois um usuário pode abrir uma mensagem e não interagir com nenhum dos CTAs dentro dela.

Swift

A interação do usuário é descrita com o modelo XPMessageResponse. Ele contém:

  • mensagem: XPMessage

  • ação: XPAction

XPMessage contém:

  • tipo: XPMessageTipo - tipo de mensagem, um dos:

    • XPMessageType_Push

    • XPMessageType_Inapp

    • XPMessageType_Inbox

  • identificador: String - ID da mensagem

  • campaignIdentifier: String - ID da campanha

  • título: String - título da mensagem

  • texto: String - texto da mensagem

  • data: [AnyHashable : Qualquer]? - cargas úteis personalizadas

  • payload: [AnyHashable : Any] - payload de mensagem bruta

XPAction contém:

  • tipo: XPActionType - tipo de resposta, um dos:

    • XPActionType_Click

    • XPActionType_Dismiss

    • XPActionType_Present

  • identificador: String - identificador de ação (como ID de botão, opcional)

Veja como registrar o manipulador:

XPush.registerMessageResponseHandler({(_ response: XPMessageResponse) -> Void in
    switch response.action.type {
        case XPActionType_Click:
            // Logic when message is clicked

        case XPActionType_Dismiss:
            // Logic when message is dismissed

        case XPActionType_Present:
            // Logic when message is received in foreground

    }
})

Se você usa notificações interativas e quer lidar com cliques de botão em segundo plano, precisa garantir que use um método com um handler de completamento:

XPush.registerMessageResponseHandler(withCompletion: {(_ x: XPMessageResponse, _ completionHandler: XPMessageCompletionBlock) -> Void in
    if response.action.type == XPActionType_Click {
        if response.action.identifier == "like" {
            // Like article asynchronously and call completionHandler when finished
            self.likeArticle(response.message.data["articleId"], completionHandler: completionHandler)
            return
        }
    }
    // If nothing to be done
    completionHandler()
})

Abaixo está um exemplo completo de tratamento personalizado de notificações. Ele faz várias coisas:

  • Mostra um diálogo personalizado quando uma mensagem push é recebida em primeiro plano

  • Abre uma página de artigo quando uma mensagem é clicada

  • Salva as informações quando um dos botões da mensagem é clicado

XPush.registerMessageResponseHandler(withCompletion: {(_ x: XPMessageResponse, _ completionHandler: XPMessageCompletionBlock) -> Void in
   if response.action.type == XPActionType_Present {
                showArticleDialog(response.message, viewButtonCallback: {() -> Void in
                    // Report message as clicked
                    XPush.reportMessageClicked(response.message)
                    // Navigate to article page
                    self.openArticle(x.message.data["articleId"])
                })
            }
            else if response.action.type == XPActionType_Click {
                // Default click action
                if response.action.identifier == nil {
                    // Navigate to the article page
                    openArticle(response.message.data["articleId"])
                }
                    // Action for a certain button click
                else {
                    if response.action.identifier == "like" {
                        // Like article asynchronously and call completionHandler when finished
                        self.likeArticle(response.message.data["articleId"], completionHandler: completionHandler)
                    }
                }
            }
            
            // If nothing to be done
            completionHandler()
})

Android

A interação do usuário é descrita com os objetos

  • Mensagem mensagem Carga Útil

  • HashMap<String, String> responsePayload

A mensagem contém:

  • Tipo de string - tipo de mensagem, uma dessas:

    • "Empurre"

    • "inapp"

    • "caixa de entrada"

  • ID de string - ID de mensagem

  • String campaignId - ID de campanha

  • Título da string - título da mensagem

  • Texto em cadeia de texto e texto de mensagem

  • HashMap<String, String> dados - payloads personalizados

o HashMap do responsePayload contém:

  • Tipo de string - tipo de resposta, um dos:

    • "presente"

    • "click"

    • "Dispensar"

  • String action- identificador de ação (como ID de botão, opcional)

Implemente o MessageResponseListener na sua Application.java classe

public class YOUR_APPLICATION_CLASS extends Application implements MessageResponseListener {

Depois, implemente o método

@Override
    public void messageResponseReceived(Message messagePayload,
            HashMap<String, String> responsePayload,
            WeakReference uiReference) {
        
    }

Depois, adicione a setMessageResponseListener opção à sua inicialização do PushConnector:

new PushConnector.Builder(XPUSH_APP_KEY, GOOGLE_PROJECT_NUMBER)
            .setMessageResponseListener(this)
            ...
            .create(this);

Abaixo está um exemplo completo de tratamento personalizado de notificações. Ele faz várias coisas:

  • Mostra um diálogo personalizado quando uma mensagem push é recebida em primeiro plano

  • Abre uma página de artigo quando uma mensagem é clicada

  • Salva as informações quando um dos botões da mensagem é clicado

@Override
    public void messageResponseReceived(final Message messagePayload,
            HashMap<String, String> responsePayload,
            final WeakReference uiReference) {

        switch (responsePayload.get("type")) {

            // When app is received in the foreground show a custom notification
            case "present":
                if (uiReference != null && uiReference.get() != null) {
                    ((Activity) uiReference.get()).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            AlertDialog.Builder builder = new AlertDialog.Builder((Activity) uiReference.get());
                            builder.setPositiveButton("View", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    //go to article id
                                    openArticle(messagePayload.data.get("articleId"));
                                }
                            });
                            builder.setMessage(messagePayload.text);
                            builder.setTitle(messagePayload.title);
                            AlertDialog dialog = builder.create();
                            dialog.show();
                        }
                    });
                }
                break;

            //when message is clicked
            case "click":
                //default click action
                if (!(responsePayload.containsKey("action"))) {
                    //navigate to article
                    openArticle(messagePayload.data.get("articleId"));
                }
                //action for a certain button click
                else {
                    switch (responsePayload.get("action")) {
                        case "like":
                            //like article
                            likeArticle(messagePayload.data.get("articleId"));
                            break;
                    }
                }
                break;
        }
    }

Marque uma mensagem como aberta

Assim como no iOS, osreportMessageOpenede reportMessageClickedfunction são adições ao SDK que permitem aos desenvolvedores implementar o recurso de marcar uma mensagem como aberta ou clicada quando um usuário abre ou clica nela dentro do aplicativo. Essa função é especialmente útil para aumentar o engajamento do usuário e fornecer feedback em tempo real sobre interações de mensagens. Quando chamado, ele aciona um evento dentro do SDK que registra a mensagem como aberta ou clicada, dependendo da função utilizada, para fins de rastreamento e análise. Os desenvolvedores podem facilmente integrar essa função ao fluxo de trabalho de tratamento de mensagens da aplicação para melhorar a experiência do usuário e obter insights sobre padrões de engajamento do usuário.

reportMessageOpened(message, action, null);

reportMessageOpened(Message message, String action, JSONObject message_context)
reportMessageClicked(message, action, null);
 
reportMessageClicked(Message message, String action, JSONObject message_context) 

Mensagens clicadas serão consideradas abertas

Marcar uma mensagem como clicada usando o método descrito automaticamente a marca como aberta, pois o usuário não pode clicar na mensagem sem abri-la primeiro. No entanto, marcar uma mensagem como aberta não atualiza automaticamente o valor de clique, pois um usuário pode abrir uma mensagem e não interagir com nenhum dos CTAs dentro dela.