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.