Saltar al contenido

Preguntas frecuentes sobre el SDK de Pushwoosh para Android

¿Qué aspecto tienen el token push de Android y el HWID?

Anchor link to

Los tokens push de dispositivos Android difieren en longitud (menos de 255 caracteres) y comienzan con APA91b, por ejemplo:

APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq

Los tokens a menudo contienen un prefijo separado por dos puntos antes de APA91b, por ejemplo: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...

Pushwoosh utiliza UUID como HWID, es decir, cadenas generadas aleatoriamente de 32 caracteres alfanuméricos: 123e4567-e89b-12d3-a456-426655440000

¿Cómo puedo obtener el token push de mi dispositivo Android?

Anchor link to

Puede obtener el token push de su dispositivo Android en el registro de la consola. Use la herramienta logcat en Android Studio.

Abra monitor.bat en %USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat, conecte su dispositivo a la PC y permita la depuración USB en la configuración de Android. Ejecute su aplicación en el dispositivo. Localice /registerDevice, encuentre el token push para su dispositivo para usarlo más tarde en Dispositivos de Prueba.

Captura de pantalla que muestra la salida de logcat con la información de registro del token push en Android Studio

¿Qué permisos son necesarios y cuáles son opcionales?

Anchor link to

Cuando se instala en un dispositivo Android, la aplicación solicitará los siguientes permisos en conexión con el SDK de Pushwoosh:

<!-- FCM se conecta a los servicios de Firebase. -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- Evita que el procesador entre en modo de suspensión cuando se recibe un mensaje. -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- Este permiso se usa para determinar si el dispositivo puede acceder a la red. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- Esta aplicación tiene permiso para registrarse y recibir mensajes de datos. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

Nuestro SDK no solicita permiso para acceder a imágenes, contactos del dispositivo, etc.

¿Cómo configuro un UserID?

Anchor link to

Puede establecer un identificador de usuario (UserID), que podría ser un ID de Facebook, nombre de usuario, correo electrónico o cualquier otro ID de usuario único. Esto le permite hacer coincidir datos y eventos en múltiples dispositivos asociados con el mismo usuario. Para establecer el UserID, llame al método setUserId.

Ejemplo

Pushwoosh.getInstance().setUserId("testUser");

¿Qué tan preciso es el número total de suscriptores de Android?

Anchor link to

Pushwoosh elimina los dispositivos Android no suscritos de la base de datos al recibir la respuesta “NotRegistered” de FCM, que puede devolverse después del segundo intento de contactar un dispositivo específico. Esto significa que debe enviar 2 notificaciones push a un dispositivo no suscrito para que se elimine de la base de datos.

El siguiente es el escenario más común descrito en la documentación de FCM:

  1. Su suscriptor desinstala la aplicación.
  2. Pushwoosh envía un mensaje al servidor FCM.
  3. El servidor FCM envía el mensaje al dispositivo de su usuario.
  4. El cliente FCM en el dispositivo recibe el mensaje y detecta que su aplicación ha sido desinstalada; los detalles de la detección dependen de la plataforma en la que se ejecuta la aplicación.
  5. El cliente FCM en el dispositivo informa al servidor FCM que la aplicación fue desinstalada.
  6. El servidor FCM marca el ID de registro para su eliminación.
  7. Pushwoosh envía otro mensaje a FCM.
  8. FCM devuelve un mensaje NotRegistered.
  9. Pushwoosh elimina el token push de su base de usuarios.

Puede tomar un tiempo para que el ID de registro se elimine por completo de FCM. Por lo tanto, es posible que un mensaje enviado en el paso 7 anterior obtenga un ID de mensaje válido como respuesta, aunque el mensaje no se entregará a la aplicación cliente.

¿Puedo usar etiquetas HTML en las notificaciones push enviadas a Android?

Anchor link to

Sí, en Android puede usar las siguientes etiquetas HTML para modificar la apariencia de una notificación push:

<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!
Hello hi hey</span></i></b></span>

Coloque estas etiquetas HTML en el campo de entrada Mensaje y úselas también en la solicitud de la API. Es posible que algunos dispositivos Android no procesen estas etiquetas HTML correctamente, pero la mayoría de los dispositivos muestran el formato correctamente.

¿Cómo configurar un icono de notificación en Android Lollipop (y versiones posteriores)?

Anchor link to

En Android Lollipop, los iconos se cambiaron para que fueran solo blancos. Por lo tanto, si selecciona targetSdkVersion >= 21 en su archivo AndroidManifest.xml, Android solo usará el canal alfa del icono.
Vea más sobre el comportamiento en la documentación de Android.

El sistema ignora todos los canales no alfa en los iconos de acción y en el icono de notificación principal. Asuma que estos iconos serán solo alfa. El sistema dibuja los iconos de notificación en blanco y los iconos de acción en gris oscuro. Esto está fuera del control del SDK de Pushwoosh.

1. Cree el icono de notificación de acuerdo con las directrices de Android. Según la documentación, el sistema ignorará todos los colores.

2. Nombre el icono como pw_notification.png y colóquelo en la carpeta res/drawable. El SDK de Pushwoosh usará este icono como predeterminado para las notificaciones.

3. Alternativamente, puede usar la API remota y establecer el valor del parámetro "android_icon" en la imagen del icono (sin extensión de archivo).

Usar el SDK de Pushwoosh con otros servicios de FCM

Anchor link to

Puede usar Pushwoosh junto con otros SDK que usan FCM para la mensajería push. Para hacerlo, cree un servicio de enrutador para distribuir eventos entre los servicios. Primero, agregue la dependencia pushwoosh-firebase junto con el módulo principal de Pushwoosh:

build.gradle
implementation 'com.pushwoosh:pushwoosh-firebase:6.0.3'

Cree la clase de enrutamiento:

import com.pushwoosh.firebase.PushwooshFcmHelper;
class FirebaseMessagingRouterService : FirebaseMessagingService() {
override fun onNewToken(token: String?) {
super.onNewToken(token)
PushwooshFcmHelper.onTokenRefresh(token)
sendTokenToAnotherService(token)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) {
//esta es una notificación push de Pushwoosh, el SDK la manejará automáticamente
PushwooshFcmHelper.onMessageReceived(this, remoteMessage)
} else {
//esta no es una notificación push de Pushwoosh, debe manejarla usted mismo
dispatchNonPushwooshMessage(remoteMessage);
}
}
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) {
// Implemente su lógica de manejo de notificaciones push aquí
}
}

Registre los enrutadores en su AndroidManifest.xml:

AndroidManifest.xml
<service
android:name=".FirebaseMessagingRouterService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>

Usar Pushwoosh con las bibliotecas LeakCanary o AppMetrica

Anchor link to

Cuando integra herramientas de análisis como LeakCanary, AppMetrica u otras, estas bibliotecas inician un nuevo proceso, creando una nueva instancia de la aplicación. Dado que no puede escuchar las notificaciones push en otro proceso, esto da como resultado que se lance una java.lang.NullPointerException.

Si llama a registerForPushNotifications dentro de Application.onCreate(), debe verificar si se encuentra en el proceso principal de la aplicación. Use el siguiente código para realizar esta verificación:

List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();
if (runningAppProcesses != null && runningAppProcesses.size() != 0) {
for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
boolean isCurrentProcess = runningAppProcessInfo.pid == android.os.Process.myPid();
boolean isMainProcessName = getPackageName().equals(runningAppProcessInfo.processName);
if (isCurrentProcess && isMainProcessName) {
Pushwoosh.getInstance().registerForPushNotifications(...);
break;
}
}
}

Eliminar notificaciones recibidas específicas de un dispositivo localmente

Anchor link to

Si desea eliminar una notificación push no relevante al realizar una acción específica dentro de su aplicación, puede usar el siguiente enfoque:

MainActivity.java
public class MainActivity extends AppCompatActivity {
List<NotificationCreatedEvent> savedPushes = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Pushwoosh.getInstance().registerForPushNotifications();
PushwooshNotificationSettings.setMultiNotificationMode(true);
findViewById(R.id.clear_button).setOnClickListener( v -> {
cancelPushes();
});
EventBus.subscribe(NotificationCreatedEvent.class, event -> {
try {
if (event.getMessage().getCustomData() == null)
return;
//cancelar notificaciones push solo con una bandera específica
if (new JSONObject(event.getMessage().getCustomData()).getBoolean("cancel")) {
savedPushes.add(event);
}
} catch (JSONException e) {
}
});
}
private void cancelPushes() {
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (manager == null) {
return;
}
for (NotificationCreatedEvent event : savedPushes) {
manager.cancel(event.getMessageTag(), event.getMessageId());
}
}
}

Comparta sus comentarios con nosotros

Anchor link to

Sus comentarios nos ayudan a crear una mejor experiencia. Si encuentra alguna dificultad durante el proceso de integración del SDK, comparta sus pensamientos con nosotros a través de este formulario.