English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Análisis y método de implementación del Demo de notificación XiaoMi en el terminal de Android

En los últimos meses he estado preparándome y buscando trabajo, he invertido mucho, al menos he obtenido algo de rendimiento, por lo que no he organizado muchos apuntes. Hasta hace poco he tenido tiempo de organizar mis apuntes y publicarlos aquí, para compartir mis experiencias de aprendizaje.

Notificaciones
Debido a que últimamente el proyecto necesita usar notificaciones de Android, hay muchas soluciones para la notificación de Android, hay C2DM, consulta, SMS, protocolo MQTT, protocolo XMPP y plataformas de terceros, después de considerar las necesidades del proyecto, hemos elegido la plataforma de notificación de Xiaomi de terceros, a continuación, se muestra el método de implementación de Xiaomi Push.

Preparación para la implementación

Para usar la notificación de Xiaomi primero debes registrarte y solicitar una cuenta de desarrollador en la plataforma de desarrolladores de Xiaomi, después de1Hasta3Después de la revisión del día, se aprobará y luego se puede solicitar el servicio de notificación. Después de solicitar el servicio de notificación de un App, se obtendrá AppID y AppKey para aprender a usar el Demo, a continuación, me centraré en explicar mi comprensión del Demo.

Explicación de la notificación

El contenido de la notificación se puede enviar mediante el SDK de notificación de Xiaomi desde el servidor de backend, o en la plataforma de notificación de Xiaomi, los mensajes enviados tienen dos tipos: mensajes de notificación y mensajes de transmisión transparente.

Mensajes de notificación:

Son los mensajes que se mostrarán en la barra de notificaciones del sistema Android, y el usuario debe implementar la respuesta al hacer clic o especificar que se abra el App al enviar.

Mensajes de transmisión transparente:

Es la transmisión transparente, es decir, la transmisión de red no procesa el negocio, solo se encarga de transmitir el negocio necesario al nodo de destino, al mismo tiempo que garantiza la calidad de la transmisión, sin procesar el negocio de transmisión. Es decir, transmite directamente el mensaje al App, sin mostrarlo automáticamente en la barra de notificaciones.

Instrucciones del demo oficial

El demo oficial simplemente nos muestra cómo configurar la notificación de Xiaomi y cómo recibir notificaciones. Primero, el SDK de notificación de Xiaomi se agrega a la Library, y luego hay4archivo Java, como se muestra

El4Puedes omitir el Dialog, lo importante es el DemoMessageReceiver, que recibe toda la información de las notificaciones y la procesa. Además, DemoApplication y MainActivity se utilizan para mostrar la información recibida.

Luego, la interfaz es así (el demo no ha hecho ajustes de pantalla, así que se mantiene así):

Un montón de configuraciones sobre notificaciones push y un TextView para mostrar logs. Principalmente muestra el proceso de uso de la notificación de Xiaomi.

DemoMessageReceiver receptor de broadcast

Para implementar la recepción del extremo móvil de Xiaomi Push, lo más importante es el receptor de广播 DemoMessageReceiver mencionado anteriormente. Este receptor de broadcast hereda de la clase PushMessageReceiver dentro de Xiaomi SDK, y este receptor de broadcast puede sobrescribir lo siguiente.5Para implementar la gestión de notificaciones.
 

@Override
  public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {
    //Para recibir los mensajes de paso del servidor al cliente, se activa cuando se recibe un mensaje de paso.
  }
  @Override
  public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {
    //Para recibir los mensajes de notificación enviados por el servidor al cliente, este método de devolución de llamada se activa cuando el usuario hace clic en la notificación.
  }
  @Override
  public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {
    //Para recibir los mensajes de notificación enviados por el servidor al cliente, este método de devolución de llamada se activa cuando el mensaje de notificación llega al cliente. Además, cuando el mensaje de notificación llega al cliente y la aplicación está en primer plano, también se activa esta función de devolución de llamada.
  }
  @Override
  public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //Para recibir la respuesta del servidor después de que el cliente envía un comando de registro
  }
  @Override
  public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //Para recibir la respuesta del servidor después de que el cliente envía un comando. Aquí se pueden recibir varios resultados de comandos, como resultados de registro de servicios, configuración de alias, etc., y aquí se puede implementar la función de inicialización de errores y reinicio.
  }

DemoApplication hereda de la clase Application

Las principales funciones de esta clase Application incluyen la configuración del ID y la KEY de la aplicación, además de registrar el servicio de notificaciones en el método onCreate.

En este Demo, aún se configuró un Handler para que el receptor de广播可以使用lo para enviar Toast y hacer que MainActivity imprima Log en TextView.

 // use your appid the key.
  private static final String APP_ID = "1000270";
  // use your appid the key.
  private static final String APP_KEY = "670100056270";
  // Este TAG se utiliza para buscar la información necesaria en adb logcat, simplemente ingrese adb logcat | grep en el terminal de comandos
  // com.xiaomi.mipushdemo
  public static final String TAG = "com.xiaomi.mipushdemo";
  private static DemoHandler sHandler = null;
  private static MainActivity sMainActivity = null;
  @Override
  public void onCreate() {
    super.onCreate();
    // Registrar el servicio de push, después de que se registre con éxito, se enviará un broadcast a DemoMessageReceiver
    // Se puede obtener la información de registro desde el objeto MiPushCommandMessage del método onCommandResult de DemoMessageReceiver
    if (shouldInit()) {
      MiPushClient.registerPush(this, APP_ID, APP_KEY);
    }
    LoggerInterface newLogger = new LoggerInterface() {
      @Override
      public void setTag(String tag) {
        // ignore
      }
      @Override
      public void log(String content, Throwable t) {
        Log.d(TAG, content, t);
      }
      @Override
      public void log(String content) {
        Log.d(TAG, content);
      }
    };
    Logger.setLogger(this, newLogger);
    if (sHandler == null) {
      sHandler = new DemoHandler(getApplicationContext());
    }
  }
  //Este es el método para verificar si el proceso está en primer plano
  private boolean shouldInit() {
    ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));
    List<RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
    String mainProcessName = getPackageName();
    int myPid = Process.myPid();
    for (RunningAppProcessInfo info : processInfos) {
      if (info.pid == myPid && mainProcessName.equals(info.processName)) {
        return true;
      }
    }
    return false;
  }

MainActivity

El MainActivity en el demo es responsable de manejar los botones de la interfaz, aprovechando esto para mostrarnos cómo configurar el plan de推送 local, las configuraciones específicas incluyen

  • Configuración y revocación de alias: El alias (Alias) es una identificación de usuario adicional a parte del Regid (generado automáticamente) y UserAccount. Se puede configurar y revocar mediante los métodos MiPushClient.setAlias() y MiPushClient.unsetAlias().
  • Configuración y revocación de la cuenta de usuario (UserAccount): Se puede configurar y revocar mediante los métodos MiPushClient.setUserAccount() y MiPushClient.unsetUserAccount().
  • Suscripción y revocación de etiquetas: Los desarrolladores pueden combinar sus características de negocio propias para aplicar diferentes etiquetas (Topic) a los usuarios. Al momento de enviar mensajes de推送, los desarrolladores pueden combinar el contenido de cada mensaje y el usuario objetivo para seleccionar la etiqueta correspondiente y enviar el mensaje a todos los usuarios que tienen esa etiqueta. Se puede suscribir y cancelar mediante MiPushClient.subscribe() y MiPushClient.unsubscribe().
  • Pausar y reanudar la推送,configurar el tiempo de推送:El demo de configuración del tiempo de推送 utilizó una clase Dialog personalizada TimeIntervalDialog para permitir que los usuarios configuren (aumentó la cantidad de código), que se puede configurar mediante MiPushClient.setAcceptTime(). La pausa y la reanudación se configuran mediante pausePush() y resumePush().
  •  Sin embargo, la implementación de pausa y recuperación en la capa inferior es realmente llamar a configurar el tiempo de推送 a 00:00 - 00:00 y 00:00 - 23:59solo, y también hay que tener en cuenta que no recibir mensajes de push durante el período de recepción es solo una pausa temporal, una vez que llega el período de recepción, los mensajes seguirán llegando sucesivamente.

La configuración del archivo AndroidManifest

Primero, el soporte de Xiaomi Push para la versión más baja de Android es2.2Por lo tanto, se necesita

<uses-sdk android:minSdkVersion="8"/>

Las permisos necesarios después son los siguientes:

  <uses-permiso android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permiso android:name="android.permission.INTERNET" />
  <uses-permiso android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permiso android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permiso android:name="android.permission.READ_PHONE_STATE" />
  <uses-permiso android:name="android.permission.GET_TASKS" />
  <uses-permiso android:name="android.permission.VIBRATE" />
  <permiso android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" /> />
  <!--Aquí cambia com.xiaomi.mipushdemo por el nombre del paquete de la aplicación-->  
  <uses-permiso android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" />
  <!--Aquí cambia com.xiaomi.mipushdemo por el nombre del paquete de la aplicación-->

Luego es necesario registrar una serie de BroadcastReceiver (todos son registros estáticos, ya que deben estar en ejecución en segundo plano a largo plazo, y no olvides que también se debe registrar DemoMessageReceiver que hereda de PushMessageReceiver)3个广播接收器和4个服务。

       

<service
     android:enabled="true"
     android:process=":pushservice"
     android:name="com.xiaomi.push.service.XMPushService"/>
    <service
     android:name="com.xiaomi.push.service.XMJobService"
     android:enabled="true"
     android:exported="false"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:process=":pushservice" />
    <!--注:此service必须在3.0.1版本以后(包括3.0.1版本)加入-->
    <service
     android:enabled="true"
     android:exported="true"
     android:name="com.xiaomi.mipush.sdk.PushMessageHandler" /> 
    <service android:enabled="true"
     android:name="com.xiaomi.mipush.sdk.MessageHandleService" /> 
    <!--注:此service必须在2.2.5版本以后(包括2.2.5版本)加入-->
    <receiver
     android:exported="true"
     android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" >
     <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
      <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
    </receiver>
    <receiver
     android:exported="false"
     android:process=":pushservice"
     android:name="com.xiaomi.push.service.receivers.PingReceiver" >
     <intent-filter>
      <action android:name="com.xiaomi.push.PING_TIMER" />
     </intent-filter>
    </receiver>
    <receiver
      android:name="com.xiaomi.mipushdemo.DemoMessageReceiver"
      android:exported="true">
      <intent-filter>
        <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
      </intent-filter>
      <intent-filter>
        <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
      </intent-filter>
      <intent-filter>
        <action android:name="com.xiaomi.mipush.ERROR" />
      </intent-filter>
    </receiver>

Solo necesita cambiar el AppId y AppKey del demo a los suyos propios (recuerde que deben coincidir con el nombre del paquete y el nombre de la aplicación), luego podrá recibir las notificaciones correspondientes.

Implementación de移植 en dispositivos móviles

Después de comprender aproximadamente este Demo, puede移植推送 a su propia aplicación para implementar sus propias necesidades. Al移植, preste atención a lo siguiente:

  1. Primero, piense bien en el nombre del paquete de la aplicación, regístrese en la plataforma de推送 de Xiaomi, obtenga el AppID y AppKey.
  2. Luego, agregue el SDK de推送 a la biblioteca.
  3. Configurar los permisos en el archivo AndroidManifest (en Android6Las permisos en .0 pueden necesitar obtenerse dinámicamente), registre los Service y BroadcastReceiver correspondientes
  4. Recuerde inicializar y registrar el servicio de推送 en el inicio de la aplicación.
  5. Finalmente, puede heredar un PushMessageReceiver, y hacer lo que quiera dentro de él.
  6. Finalmente, proporciono un Demo simplificado que escribí. Después de entender lo anterior, puede referirse a mi移植简化版,因为上面的内容太全面了,我们 solo realizamos lo que necesitamos en la práctica.

Declaración: El contenido de este artículo se ha obtenido de Internet, pertenece a los propietarios originales, el contenido se ha subido por usuarios de Internet de manera voluntaria y autónoma, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar pruebas relacionadas. Una vez confirmado, este sitio eliminará inmediatamente el contenido sospechoso de infracción.

Te gustará