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

Analyse und Implementierungsmethode des Xiaomi Push Demo auf dem Android-Mobilgerät

In den letzten Monaten habe ich viel Zeit damit verbracht, nach einem Job zu suchen und dabei viel investiert. Schließlich habe ich etwas erreicht, daher habe ich nicht viel Notizen gemacht. Erst kürzlich habe ich meine Notizen zusammengefasst und hochgeladen, um meine Lernerfahrungen zu teilen.

Push
Da das Projekt kürzlich Android-Nachrichten-Push verwenden muss, gibt es viele Lösungen für Android-Push, darunter C2DM, Polling, SMS, MQTT Protocol, XMPP Protocol und Drittanbieterplattformen. Nach unserer Überlegung zu den Projektanforderungen haben wir uns für den Push von Drittanbieterplattformen entschieden, und hier ist die Implementierungsmethode von Xiaomi Push.

Vorbereitung zur Implementierung

Um Xiaomi Push zu verwenden, müssen Sie zunächst auf der Xiaomi Entwicklerplattform registriert und ein Entwicklerkonto beantragt werden, nach1bis3Nach der Prüfung am selben Tag wird sie genehmigt und dann kann der Push-Dienst beantragt werden. Nachdem ein Push-Dienst für eine App beantragt wurde, erhält man den AppID und den AppKey und kann dann das Demo verwenden, das bereitgestellt wird. Ich werde im Wesentlichen über mein Verständnis des Demos sprechen.

Push-Erläuterung

Der Inhalt der Push-Benachrichtigungen kann von der Backend-Serverseite mit dem Xiaomi Push SDK gesendet werden oder auf der Xiaomi Push-Plattform gesendet werden. Es gibt zwei Arten von gesendeten Nachrichten: Benachrichtigungsnachrichten und Transparenzinformationen.

Benachrichtigungsnachricht:

Dies sind Nachrichten, die im Android-Systembenachrichtigungsfeld angezeigt werden, und der Benutzer muss die Reaktion auf den Klick selbst implementieren oder beim Senden angeben, dass das App geöffnet wird.

Transparenz-Nachricht:

Ist die transparente Übertragung, d.h. die Übertragung des Netzwerks, egal wie das Übertragungsgeschäft ist, verantwortlich dafür, das zu übertragende Geschäft zum Zielknoten zu übertragen und gleichzeitig die Übertragungsqualität zu gewährleisten, ohne das Übertragungsgeschäft zu verarbeiten. Es wird die Nachricht direkt an das App gesendet, ohne automatisch in der Benachrichtigungsfleiste zu erscheinen.

Offizielle Demo-Übersicht

Der offizielle Demo zeigt uns einfach verschiedene Einstellungen von Xiaomi Push und wie man Push-Benachrichtigungen empfängt. Zunächst wird das Xiaomi Push SDK in die Library aufgenommen, und darin gibt es4Java-Datei, wie gezeigt

第4Dieser Dialog kann übersprungen werden, der Schlüssel ist der DemoMessageReceiver Broadcast Receiver, der verschiedene Informationen, die durch Push-Benachrichtigungen gesendet werden, empfängt und verarbeitet. Und die DemoApplication und MainActivity dienen dazu, die empfangenen Informationen anzuzeigen.

Die Oberfläche sieht dann so aus (der Demo hat keine Bildschirmanpassung vorgenommen, daher so):

Eine Reihe von Konfigurationen für Push-Benachrichtigungen und ein TextView zum Anzeigen von Logs. Hauptsächlich zeigt es den Prozess der Verwendung von Xiaomi Push.

DemoMessageReceiver Broadcast Receiver

Um die mobile Empfangsfunktion von Xiaomi Push zu implementieren, liegt der Kern darin, wie oben erwähnt, dem wichtigsten DemoMessageReceiver-BroadcastReceiver. Dieser BroadcastReceiver erbt von der PushMessageReceiver-Klasse im Xiaomi SDK, dieser BroadcastReceiver kann durch Überschreiben der folgenden }}5dieser Callback-Methode, um die Push-Bearbeitung durchzuführen.
 

@Override
  public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {
    //um die durchsichtigen Nachrichten zu empfangen, die von einem Server an einen Client gesendet werden, dieser Callback wird ausgelöst, wenn eine durchsichtige Nachricht empfangen wird.
  }
  @Override
  public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {
    //um die Benachrichtigungsnachrichten zu empfangen, die von einem Server an einen Client gesendet werden, dieser Callback wird ausgelöst, wenn der Benutzer die Benachrichtigung manuell anklickt.
  }
  @Override
  public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {
    //um die Benachrichtigungs-Nachrichten zu empfangen, die von einem Server an einen Client gesendet werden, dieser Callback wird ausgelöst, wenn eine Benachrichtigungsnachricht den Client erreicht. Außerdem wird dieser Callback-Funktion ausgelöst, wenn eine Benachrichtigungsnachricht den Client erreicht, während die Anwendung im Vordergrund ist und keine Benachrichtigung ausgeblendet wird.
  }
  @Override
  public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //um die Antworten auf die Registrierungsbefehle zu empfangen, die von einem Client an den Server gesendet werden
  }
  @Override
  public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {
    //um die Antworten auf die Befehle zu empfangen, die von einem Client an den Server gesendet werden. Hier können verschiedene Befehlsresultate empfangen werden, z.B. die Ergebnisse der Registrierung von Diensten oder der Festlegung von Aliases. Hier kann eine Initialisierungsfehlerbehandlung und Neustart implementiert werden.
  }

DemoApplication erbt von der Application-Klasse

Die Hauptfunktionen der Application-Klasse sind die Festlegung der App-ID und des Keys sowie die Registrierung des Push-Dienstes im onCreate-Methodenaufruf.

In diesem Demo ist ein Handler integriert, der es dem BroadcastReceiver ermöglicht, Toast-Nachrichten zu senden und den MainActivity, Log-Einträge im TextView anzuzeigen.

 // Verwenden Sie Ihren AppID und den Schlüssel.
  private static final String APP_ID = "1000270";
  // Verwenden Sie Ihren AppID und den Schlüssel.
  private static final String APP_KEY = "670100056270";
  // Dieser TAG kann in adb logcat verwendet werden, um die benötigten Informationen abzurufen, geben Sie einfach adb logcat | grep ein
  // 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();
    // Registrieren Sie den Push-Dienst, senden Sie nach einer erfolgreichen Registrierung einen Broadcast an DemoMessageReceiver
    // Die Registrierungsinformationen können aus dem MiPushCommandMessage-Objektparameter der Methode onCommandResult von DemoMessageReceiver abgerufen werden
    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());
    }
  }
  //Dies ist eine Methode zur Überprüfung, ob der Prozess im Vordergrund ist
  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

Der MainActivity im Demo ist hauptsächlich für die Verarbeitung der Buttons auf der Oberfläche verantwortlich und zeigt uns so, wie man die lokale Push-Strategie einstellt. Die spezifischen Einstellungen sind

  • Einstellen und Aufheben von Aliases: Aliases (Alias) sind Benutzeridentifikationen neben Regid (automatisch generiert) und UserAccount. Sie können durch die Methoden MiPushClient.setAlias() und MiPushClient.unsetAlias() eingestellt und aufgehoben werden.
  • Einstellen und Aufheben des Benutzerkontos (UserAccount): Dies kann durch die Methoden MiPushClient.setUserAccount() und MiPushClient.unsetUserAccount() eingestellt und aufgehoben werden.
  • Abonnieren und Aufheben von Tags: Entwickler können ihre eigenen Geschäftsfunktionen kombinieren und den Benutzern verschiedene Tags (Topic) zuweisen. Bei der Nachrichtenpush-Benachrichtigung können Entwickler die Inhalte jeder Nachricht und den Zielbenutzer kombinieren, um für jede Nachricht das entsprechende Tag auszuwählen und Nachrichten an alle Benutzer mit diesem Tag zu senden. Dies kann durch MiPushClient.subscribe() und MiPushClient.unsubscribe() abonniert und abgebrochen werden.
  • Pausieren und Wiederaufnehmen von Push-Benachrichtigungen, Einstellen der Push-Benachrichtigungszeit: Der Demo verwendet eine selbst erstellte Dialog-Klasse TimeIntervalDialog, um den Benutzern die Einstellung zu ermöglichen (was den Codeumfang erheblich erhöht hat), die Einstellung kann durch MiPushClient.setAcceptTime() vorgenommen werden. Pausieren und Wiederaufnehmen werden durch pausePush() und resumePush() eingestellt.
  •  不过暂停和恢复底层上的实现其实还是调用设置推送时间为00:00 - 00:00和00:00 - 23:59而已,而且还要注意的是不处在接收时段是暂时不接收推送消息而已,一旦到了接收时段那个消息还是会陆续推送到来。

AndroidManifest文件的配置

首先小米推送支持最低的Android版本是2.2,所以要

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

后需要的是如下权限:

  <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" />
  <!--这里com.xiaomi.mipushdemo改成app的包名-->  
  <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" />
  <!--这里com.xiaomi.mipushdemo改成app的包名-->

然后就是要注册一堆的BroadcastReceiver(都是静态注册,因为要长期处在后台运行,还有继承了PushMessageReceiver的DemoMessageReceiver也需要注册,不要忘了)和Service,一共是3Dienste und Broadcast-Receivern.4Dienste.

       

<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" />
    <!--Hinweis: Dieser Service muss in3.0.1Version thereafter (including3.0.1Version)hinzugefügt-->
    <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" /> 
    <!--Hinweis: Dieser Service muss in2.2.5Version thereafter (including2.2.5Version)hinzugefügt-->
    <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>

Schließlich müssen Sie nur die AppId und AppKey des Demos in Ihre eigenen ändern (denken Sie daran, dass die Paketnamen und Anwendungsbezeichnungen übereinstimmen), dann können Sie die entsprechenden Push-Benachrichtigungen empfangen.

Mobile Portierung

Nachdem Sie das Demo verstanden haben, können Sie das Xiaomi-Push in Ihre eigene App migrieren, um Ihre eigenen Anforderungen zu erfüllen. Beachten Sie beim Migrieren:

  1. Denken Sie zunächst daran, den Namen des Pakets der Anwendung zu bestimmen, sich bei der Xiaomi-Push-Plattform zu registrieren und die AppID und AppKey zu erhalten.
  2. Fügen Sie dann die Xiaomi-Push-SDK in die Bibliothek ein.
  3. Konfigurieren Sie die Berechtigungen im AndroidManifest-Datei (in Android6Die Berechtigungen in .0 müssen möglicherweise dynamisch abgerufen werden), registrieren Sie diejenigen Services und BroadcastReceiver
  4. Denken Sie daran, den Xiaomi-Push-Dienst beim Start der Anwendung zu initialisieren.
  5. Am Ende können Sie einfach eine PushMessageReceiver vererben und darin tun, was Sie möchten.
  6. Schließlich biete ich einen von mir geschriebenen vereinfachten Demo an. Nachdem Sie das Obige verstanden haben, können Sie meine vereinfachte Migration referenzieren, da das Obige zu umfassend ist und wir nur das umsetzen sollten, was wir tatsächlich benötigen.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheberrechtinhaber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine Haftung für die rechtlichen Konsequenzen. Wenn Sie Inhalte finden, die urheberrechtlich geschützt sind, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Sobald nachgewiesen wird, dass das Material urheberrechtlich geschützt ist, wird diese Website das fragliche Material sofort löschen.)

Dir auch gefallen