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

Android 手机端小米推送 Demo 解析和实现方法

Ces derniers mois, je suis en train de chercher un travail et de chercher du travail, j'ai beaucoup travaillé, j'ai enfin quelque chose à gagner, donc je n'ai pas beaucoup organisé des notes. J'ai enfin du temps pour organiser mes notes et les partager, pour partager mes expériences d'apprentissage.

Push
En raison de l'utilisation récente du push de message Android dans le projet, il y a beaucoup de solutions pour Android push, y compris C2DM, polling, SMS, protocole MQTT, protocole XMPP et plateformes tierces. Après avoir pris en compte les besoins du projet, nous avons choisi le service de push de Xiaomi via la plateforme tierce, voici la méthode d'implémentation de Xiaomi Push.

Préparation de mise en œuvre

Pour utiliser Xiaomi Push, il faut d'abord s'inscrire et demander un compte développeur sur la plateforme de développeurs Xiaomi, après1à3Après l'audit du jour, il sera approuvé, puis vous pouvez demander le service de push. Après avoir demandé le service de push d'une App, en obtenant l'AppID et l'AppKey, vous pouvez l'apprendre et l'utiliser dans le demo, donc je vais principalement parler de mon compréhension du demo.

Instructions de push

Le contenu de la push peut être envoyé par le serveur backend en utilisant le SDK de Xiaomi Push, ou envoyé sur la plateforme de push de Xiaomi. Les messages envoyés ont deux types : messages de notification et informations de transmission transparente.

Message de notification :

Ce sont les messages qui s'affichent dans la barre de notifications du système Android, et l'utilisateur doit réaliser l'événement de réponse en cliquant dessus ou indiquer lors de l'envoi de cliquer pour ouvrir l'App.

Message de transmission transparente :

C'est le transmission transparente, c'est-à-dire que la transmission de réseau n'a qu'à transférer le service nécessaire au nœud de destination, tout en garantissant la qualité de transmission, sans traiter le service de transmission. C'est transférer directement le message à l'App, sans s'afficher automatiquement dans la barre de notifications.

Instructions du demo officiel

Le demo officiel nous montre simplement diverses configurations de Xiaomi Push et comment le recevoir. D'abord, le SDK de Xiaomi Push est ajouté à la bibliothèque, puis il y a4fichier Java, comme

Le4On peut ne pas regarder ce Dialog, l'essentiel est que DemoMessageReceiver ce récepteur de broadcast reçoive diverses informations push et les traite. En plus, DemoApplication et MainActivity sont utilisés pour afficher les informations reçues.

Ensuite, l'interface est ainsi (le demo n'a pas fait d'adaptation d'écran, donc c'est comme ça):

Un tas de configurations sur les push et un TextView pour afficher les logs. Il nous montre principalement le processus d'utilisation de Xiaomi Push.

DemoMessageReceiver récepteur de broadcast

Pour réaliser la réception mobile de Xiaomi Push, le cœur est le récepteur de broadcast DemoMessageReceiver mentionné précédemment. Ce récepteur de broadcast hérite de la classe PushMessageReceiver dans le SDK Xiaomi, ce récepteur de broadcast peut surcharger les méthodes suivantes pour gérer les notifications.5Cette méthode de rappel permet de gérer les notifications.
 

@Override
  public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {
    //Utilisé pour recevoir les messages de notification transitoires envoyés par le serveur au client, cette méthode de rappel est déclenchée lorsque le message transitoire est reçu.
  }
  @Override
  public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {
    //Utilisé pour recevoir les messages de notification envoyés par le serveur au client, cette méthode de rappel est déclenchée après que l'utilisateur clique sur la notification.
  }
  @Override
  public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {
    //Utilisé pour recevoir les messages de notification envoyés par le serveur au client, cette méthode de rappel est déclenchée lorsque le message de notification atteint le client. De plus, lorsque l'application est en avant-plan et que le message de notification ne déclenche pas de notification, cette méthode de rappel est également déclenchée.
  }
  @Override
  public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //Utilisé pour recevoir la réponse du serveur après que le client envoie une commande d'enregistrement.
  }
  @Override
  public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //Utilisé pour recevoir la réponse du serveur après que le client envoie une commande. Ici, on peut recevoir les résultats de diverses commandes, par exemple, les résultats de l'enregistrement du service, de la configuration de l'alias, etc. Ici, on peut réaliser des fonctions telles que l'initialisation de l'erreur et le redémarrage.
  }

DemoApplication hérite de la classe Application

Les principales fonctions de cette classe Application sont de définir l'ID et la KEY de l'App, ainsi que de s'inscrire au service de notification dans la méthode onCreate.

Dans ce Demo, il a également ajouté un Handler pour permettre au récepteur de广播使用它来发送Toast和让MainActivity在TextView上打印Log。

 // user your appid the key.
  private static final String APP_ID = "1000270";
  // user your appid the key.
  private static final String APP_KEY = "670100056270";
  // Ce TAG peut être utilisé pour rechercher les informations nécessaires dans adb logcat, il suffit d'entrer adb logcat | grep dans le terminal de commande
  // 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();
    // Enregistrez le service push, une fois enregistré avec succès, il enverra une broadcast à DemoMessageReceiver
    // On peut obtenir les informations d'enregistrement à partir de l'objet MiPushCommandMessage du paramètre de la méthode 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());
    }
  }
  //Cet est une méthode pour vérifier si le processus est en avant-plan
  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

Le MainActivity dans le démon est principalement utilisé pour traiter les boutons de l'interface, à travers cela, nous sommes informés de la manière de configurer le plan de diffusion local, les configurations spécifiques incluent

  • Configuration et annulation des alias : l'alias (Alias) est une identité utilisateur en plus du Regid (généré automatiquement) et du UserAccount. Il peut être configuré et annulé via les méthodes MiPushClient.setAlias() et MiPushClient.unsetAlias().
  • Configuration et annulation du compte utilisateur (UserAccount) : la configuration et l'annulation peuvent être effectuées via les méthodes MiPushClient.setUserAccount() et MiPushClient.unsetUserAccount().
  • Abonnement et annulation des étiquettes : les développeurs peuvent combiner leurs caractéristiques d'entreprise pour attribuer différents étiquettes (Topic) aux utilisateurs. Lors de la diffusion de messages, les développeurs peuvent combiner le contenu de chaque message et l'utilisateur cible pour choisir l'étiquette correspondante pour chaque message et diffuser des messages aux utilisateurs ayant cette étiquette. L'abonnement et l'annulation peuvent être effectués via MiPushClient.subscribe() et MiPushClient.unsubscribe().
  • La pause et la reprise de la diffusion, la configuration du temps de diffusion : le démon de configuration du temps de diffusion utilise une classe Dialog personnalisée TimeIntervalDialog pour permettre aux utilisateurs de le configurer (ce qui a fortement augmenté la quantité de code), ce qui peut être configuré via MiPushClient.setAcceptTime(). La pause et la reprise sont configurées via pausePush() et resumePush().
  •  Cependant, l'implémentation de la pause et de la reprise en arrière-plan consiste en fait à appeler la définition du temps de push à 00:00 - 00:00 et 00:00 - 23:59et c'est tout, et il convient également de noter que si ce n'est pas le moment de réception, les messages de push ne sont pas reçus temporairement, mais une fois que le moment de réception est atteint, les messages continueront à être envoyés progressivement.

Configuration du fichier AndroidManifest

D'abord, le support minimum de Xiaomi Push pour la version d'Android est2.2par conséquent, il faut

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

Les permissions nécessaires sont les suivantes :

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.GET_TASKS" />
  <uses-permission android:name="android.permission.VIBRATE" />
  <permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />
  <!--Ici, com.xiaomi.mipushdemo est modifié pour devenir le nom de package de l'application-->  
  <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" />
  <!--Ici, com.xiaomi.mipushdemo est modifié pour devenir le nom de package de l'application-->

Ensuite, il faut enregistrer une série de BroadcastReceiver (tous sont enregistrés de manière statique, car ils doivent rester en arrière-plan pendant une longue période, et n'oubliez pas de registering DemoMessageReceiver qui hérite de PushMessageReceiver) et Service, au total c'est3broadcast receivers and4services.

       

<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" />
    <!--Note: This service must be in3.0.1version and later (including3.0.1version)added-->
    <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" /> 
    <!--Note: This service must be in2.2.5version and later (including2.2.5version)added-->
    <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>

Il suffit de modifier l'AppId et l'AppKey du demo en votre nom (n'oubliez pas que les noms de paquet et de nom d'application doivent correspondre), puis vous pouvez recevoir les push correspondants.

Implémentation de portage mobile

Après avoir大概 comprendre ce demo, vous pouvez transférer le push Xiaomi dans votre application pour réaliser vos besoins. Notez lors du transfert :

  1. Tout d'abord, réfléchissez bien au nom du paquet de l'application, enregistrez-le sur la plate-forme de push Xiaomi pour obtenir l'AppID et l'AppKey.
  2. Ensuite, ajoutez le SDK de push Xiaomi à la bibliothèque.
  3. Configurez les permissions dans le fichier AndroidManifest (dans Android6Les permissions dans .0 peuvent devoir être obtenues dynamiquement), enregistrez ces services et BroadcastReceiver
  4. N'oubliez pas d'initialiser l'enregistrement du service de push Xiaomi dès le début de l'application.
  5. Enfin, vous pouvez hériter de PushMessageReceiver et agir à votre guise à l'intérieur.
  6. Enfin, je fournis un demo simplifié que j'ai écrit. Après avoir compris ce qui précède, vous pouvez vous référer à mon implémentation simplifiée, car celle-ci est trop complète. Nous devons réaliser ce dont nous avons besoin en fonction de nos besoins réels.

Déclaration : Le contenu de cet article est tiré d'Internet, et appartient aux propriétaires respectifs. Le contenu est apporté par les utilisateurs d'Internet de manière volontaire et téléversé, ce site n'possède pas de propriété, n'a pas été traité par l'homme, et n'assume pas de responsabilité juridique. Si vous trouvez du contenu suspect de violation des droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (au moment de l'envoi d'un e-mail, veuillez remplacer # par @ pour signaler un abus, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)