Manejo de las notificaciones push en Android
improve this page | report issueVisión general
Antes que las aplicaciones Android puedan manejar las notificaciones push que reciban, es necesario configurar el soporte para Google Play Services. Una vez se haya configurado la aplicación, se puede utilizar la API de notificaciones que MobileFirst proporciona con el propósito de registrar y anular el registro de dispositivos y suscribir y anular la suscripción a etiquetas. En esta guía de aprendizaje, aprenderá a manejar el envío de notificaciones en aplicaciones Android.
**Requisitos previos: **
- Asegúrese de haber leído las siguientes guías de aprendizaje:
- MobileFirst Server para ejecutar localmente, o un remotamente ejecutando MobileFirst Server.
- MobileFirst CLI instalado en la estación de trabajo del desarrollador
Ir a:
- Configuración de notificaciones
- API de notificaciones
- Manejo de una notificación push
- Aplicación de ejemplo
- Migración de las aplicaciones cliente en Android a FCM
Configuración de notificaciones
Cree un nuevo proyecto de Android Studio o utilice uno que ya exista.
Si MobileFirst Native Android SDK todavía no está presente en el proyecto, siga las instrucciones en la guía de aprendizaje Adición de Mobile Foundation SDK para aplicaciones Android.
Configurar el proyecto
Google Cloud Messaging (GCM) se ha discontinuado y se ha integrado con Firebase Cloud Messaging (FCM).
La configuración de una aplicación en FCM es algo distinta en comparación con el antiguo modelo de GCM.
- Para utilizar Firebase Messaging, necesita un archivo google-services.json. Pulse aquí para obtener información sobre cómo obtenerlo.
- En la ventana Añadir Firebase a su aplicación Android, utilice
com.ibm.mobilefirstplatform.clientsdk.android.push
como nombre de paquete.
- En la ventana Añadir Firebase a su aplicación Android, utilice
-
En Android → Scripts de Gradle, seleccione el archivo build.gradle (Módulo: app) y añada las siguientes líneas a
dependencies
:xml implementation group: 'com.ibm.mobile.foundation', name: 'ibmmobilefirstplatformfoundationpush', version: '8.0.+', ext: 'aar', transitive: true
O en una sola línea:
xml implementation 'com.ibm.mobile.foundation:ibmmobilefirstplatformfoundationpush:8.0.+'
Nota: Si utiliza la característica Google Dynamic Delivery y desea invocar las API de MobileFirst en un módulo de característica, utilice la declaración
api
, en lugar deimplementation
. Si utilizaimplementation
se restringen las API de MobileFirst al mismo módulo, y si utilizaapi
, las API de MobileFirst están disponibles en todos los módulos presentes en la app, incluidos los módulos de características. Para obtener más información, consulte Separación de API e implementación.
api 'com.ibm.mobile.foundation:ibmmobilefirstplatformfoundationpush:8.0.+'
-
Configure su archivo Gradle. Añada lo siguiente al archivo
build.gradle
de la aplicacióndependencies { ...... compile 'com.google.firebase:firebase-messaging:17.6.0' ..... } apply plugin: 'com.google.gms.google-services'
- Añada la dependencia siguiente a la sección
buildscript
del archivo build.gradleclasspath 'com.google.gms:google-services:3.0.0'
Nota: Si está utilizando Android Studio v3.2 o anterior, asegúrese de que cada línea de dependencia tenga especificado un número de versión.
- Añada la dependencia siguiente a la sección
-
En Android → app → manifiestos, abra el archivo
AndroidManifest.xml
.-
Añada los siguientes permisos en la parte superior de la etiqueta
manifest
:```xml
-
* Añada lo siguiente a la etiqueta `application`:
```xml
<!-- MFPPush Intent Service -->
<service android:exported="true" android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushIntentService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<!-- MFPPush Instance ID Listener Service -->
<service android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPush"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<activity android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushNotificationHandler"
android:theme="@android:style/Theme.NoDisplay"/>
```
* Añada el siguiente `intent-filter` a la actividad de la aplicación.
```xml
<intent-filter>
<action android:name="your.application.package.name.IBMPushNotification" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
```
> **Nota:** Asegúrese de sustituir `your.application.package.name` por el nombre de paquete real de su aplicación.
5. Abra la aplicación en Android Studio. Copie el archivo `google-services.json` que ha creado en el **step-1** dentro del directorio de aplicación. Tenga en cuenta que el archivo `google-service.json` incluye el nombre del paquete que ha añadido.
6. Compile el SDK. Cree la aplicación.
## API de notificaciones
{: #notifications-api }
### Instancia de MFPPush
{: #mfppush-instance }
Todas las llamadas de API se deben realizar en una instancia de `MFPPush`. Esto se puede realizar creando un campo de nivel de clase como, por ejemplo, `private MFPPush push = MFPPush.getInstance();` y a continuación, llamando a `push.<api-call>` a través de la clase.
De forma alternativa puede llamar a `MFPPush.getInstance().<api_call>` para cada instancia en la que necesita acceder a los métodos de API de push.
### Manejadores de desafíos
{: #challenge-handlers }
Si el ámbito de `push.mobileclient` está correlacionado con la **comprobación de seguridad**, debe asegurarse de que existen **manejadores de desafíos** coincidentes registrados antes de utilizar las API de push.
> Aprenda más sobre los manejadores de desafíos en la guía de aprendizaje de [validación de credenciales](../../../authentication-and-security/credentials-validation/android).
### Lado del cliente
{: #client-side }
| Métodos Java | Descripción |
|-----------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| [`initialize(Context context);`](#initialization) | Inicia MFPPush con el contexto proporcionado. |
| [`isPushSupported();`](#is-push-supported) | Indica si el dispositivo da soporte a notificaciones push. |
| [`registerDevice(JSONObject, MFPPushResponseListener);`](#register-device) | Registra el dispositivo con el servicio de notificaciones push. |
| [`getTags(MFPPushResponseListener)`](#get-tags) | Recupera las etiquetas disponibles en una instancia del servicio de notificaciones push. |
| [`subscribe(String[] tagNames, MFPPushResponseListener)`](#subscribe) | Suscribe el dispositivo para las etiquetas especificadas. |
| [`getSubscriptions(MFPPushResponseListener)`](#get-subscriptions) | Recupera todas las etiquetas a las que el dispositivo está actualmente suscrito. |
| [`unsubscribe(String[] tagNames, MFPPushResponseListener)`](#unsubscribe) | Anula la suscripción de una o varias etiquetas. |
| [`unregisterDevice(MFPPushResponseListener)`](#unregister) | Anula el registro del dispositivo del servicio notificaciones push. |
#### Inicialización
{: #initialization }
Requerido para la aplicación de cliente para conectarse al servicio MFPPush con el contexto de aplicación correcto.
* Primero se debe llamar al método de la API antes de utilizar cualquier otra API MFPPush.
* Registra la función de retorno de llamada para manejar las notificaciones push recibidas.
```java
MFPPush.getInstance().initialize(this);
Está push soportado
Comprueba si el dispositivo da soporte a las notificaciones push.
Boolean isSupported = MFPPush.getInstance().isPushSupported();
if (isSupported ) {
// Push is supported
} else {
// Push is not supported
}
Registrar el dispositivo
Registre el dispositivo para el servicio de notificaciones push.
MFPPush.getInstance().registerDevice(null, new MFPPushResponseListener<String>() {
@Override
public void onSuccess(String s) {
// Successfully registered
}
@Override
public void onFailure(MFPPushException e) {
// Registration failed with error
}
});
Obtener etiquetas
Recupere todas las etiquetas disponibles desde el servicio de notificaciones push.
MFPPush.getInstance().getTags(new MFPPushResponseListener<List<String>>() {
@Override
public void onSuccess(List<String> strings) {
// Successfully retrieved tags as list of strings
}
@Override
public void onFailure(MFPPushException e) {
// Failed to receive tags with error
}
});
Suscribir
Suscriba las etiquetas deseadas.
String[] tags = {"Tag 1", "Tag 2"};
MFPPush.getInstance().subscribe(tags, new MFPPushResponseListener<String[]>() {
@Override
public void onSuccess(String[] strings) {
// Subscribed successfully
}
@Override
public void onFailure(MFPPushException e) {
// Failed to subscribe
}
});
Obtener suscripciones
Recupere las etiquetas a las que el dispositivo está actualmente suscrito.
MFPPush.getInstance().getSubscriptions(new MFPPushResponseListener<List<String>>() {
@Override
public void onSuccess(List<String> strings) {
// Successfully received subscriptions as list of strings
}
@Override
public void onFailure(MFPPushException e) {
// Failed to retrieve subscriptions with error
}
});
Anular la suscripción
Anule la suscripción de etiquetas.
String[] tags = {"Tag 1", "Tag 2"};
MFPPush.getInstance().unsubscribe(tags, new MFPPushResponseListener<String[]>() {
@Override
public void onSuccess(String[] strings) {
// Unsubscribed successfully
}
@Override
public void onFailure(MFPPushException e) {
// Failed to unsubscribe
}
});
Anular el registro
Anule el registro del dispositivo de una instancia de servicio de notificaciones push.
MFPPush.getInstance().unregisterDevice(new MFPPushResponseListener<String>() {
@Override
public void onSuccess(String s) {
disableButtons();
// Unregistered successfully
}
@Override
public void onFailure(MFPPushException e) {
// Failed to unregister
}
});
Manejar una notificación push
Con el propósito de manejar una notificación push será necesario configurar un MFPPushNotificationListener
. Esto se puede conseguir implementando uno de los métodos siguientes.
Primera opción
En la actividad en que desea manejar las notificaciones push.
- Añada
implements MFPPushNofiticationListener
a la declaración de la clase. - Establezca la clase para ser el escucha llamando a
MFPPush.getInstance().listen(this)
en el métodoonCreate
. -
Necesitará añadir el siguiente método required:
@Override public void onReceive(MFPSimplePushNotification mfpSimplePushNotification) { // Handle push notification here }
- En este método recibirá
MFPSimplePushNotification
y podrá manejar la notificación para el comportamiento deseado.
Segunda opción
Cree un escucha llamando a listen(new MFPPushNofiticationListener())
en una instancia de MFPPush
tal como se indica a continuación:
MFPPush.getInstance().listen(new MFPPushNotificationListener() {
@Override
public void onReceive(MFPSimplePushNotification mfpSimplePushNotification) {
// Handle push notification here
}
});
Migración a FCM SDK v19.x
Para una aplicación existente que utiliza la versión antigua de FCM SDK, para utilizar FCM SDK v19.x y posterior, debe migrar el proyecto android a AndroidX. Añada lo siguiente a la aplicación.
-
En el archivo build.gradle de la aplicación
-
Elimine las dependencias siguientes del archivo
build.gradle
``` dependencies { ... implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:support-v4:28.0.0' implementation 'com.google.firebase:firebase-messaging:17.6.0' ... } ```
-
Sustitúyalas por las dependencias siguientes
``` dependencies { ... implementation "com.google.firebase:firebase-messaging:20.0.0" implementation "androidx.appcompat:appcompat:1.1.0'" implementation "androidx.legacy:legacy-support-v4:1.0.0" implementation "com.google.android.material:material:1.1.0" ... } ```
-
-
Configure el archivo AndroidManifest. Son necesarios los cambios siguientes en el
AndroidManifest.xml
-
Las entradas siguientes necesitan modificarse:
<service android:exported="true" android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushIntentService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
-
Modifique las entradas a:
<service android:exported="true" android:name="com.ibm.mobilefirstplatform.clientsdk.android.push.api.MFPPushNewIntentService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
-
Aplicación de ejemplo
Pulse para descargar el proyecto de Android Studio.
Uso de ejemplo
Siga el archivo README.md de ejemplo para obtener instrucciones.
▲Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.