Manejo de las notificaciones push en Android

improve this page | report issue

Visió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: **

Ir a:

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.

  1. 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.
  2. 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 de implementation. Si utiliza implementation se restringen las API de MobileFirst al mismo módulo, y si utiliza api, 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.+'
  1. Configure su archivo Gradle. Añada lo siguiente al archivo build.gradle de la aplicación

    dependencies {
       ......
       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.gradle
      classpath '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.

  2. 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.

  1. Añada implements MFPPushNofiticationListener a la declaración de la clase.
  2. Establezca la clase para ser el escucha llamando a MFPPush.getInstance().listen(this) en el método onCreate.
  3. Necesitará añadir el siguiente método required:

    @Override
    public void onReceive(MFPSimplePushNotification mfpSimplePushNotification) {
         // Handle push notification here
    }
    
  4. 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.

  1. 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"
            ...
        }   ```
      
  2. 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>
      

Imagen de la aplicación de ejemplo

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.
Last modified on June 29, 2020