English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Negli ultimi mesi, sto cercando di trovare lavoro e lavorando, ho speso molto, finalmente ho un po' di guadagno, quindi non ho organizzato quasi le mie note. Solo di recente ho avuto il tempo di organizzare le mie note e pubblicarle, condividendo la mia esperienza di apprendimento.
Notifica
Poiché di recente il progetto utilizza la notifica di messaggio Android, ci sono molte soluzioni per la notifica di Android, tra cui C2DM, polling, SMS, protocollo MQTT, protocollo XMPP e piattaforme di terze parti. Dopo aver considerato le esigenze del progetto, abbiamo scelto di utilizzare la notifica di terze parti XiaoMi Push. Di seguito è riportato il metodo di implementazione di XiaoMi Push.
实现准备
想要用小米推送首先要去小米开发者平台注册申请开发者账号,经过1到3天的审核之后就会通过,然后就可以申请推送服务。申请一个App的推送服务之后,获得AppID和AppKey就可以去学习它给Demo来使用了,下面我主要就是讲一下我对Demo的理解。
推送说明
推送的内容可以由后台服务端利用小米推送的SDK实现发送,也可以在小米的推送平台发送,发送的消息有两种:通知消息和透传信息。
通知消息:
就是会显示在Android系统通知栏的消息,用户点击它的响应事件要自己实现或者在发送的时候说明点击打开App。
透传消息:
即是透明传送,即传送网络无论传输业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理。就是直接把消息传给App,不会自动在通知栏上显示。
官方Demo说明
官方给出的Demo里面简单地为我们展示了一下小米推送的各种设置和怎样实现接收推送。Demo首先把小米推送的SDK加入Library,然后里面有4个Java文件,如图
第4个Dialog可以不用看,关键是DemoMessageReceiver这个广播接收器,接收推送到的各种信息然后进行处理。还有那个DemoApplication和MainActivity就是用来实现接收到信息的显示。
然后界面是这样的(demo没做屏幕适配,所以就那样了):
一堆关于推送的配置,和一个显示Log的TextView。主要为我们展示了小米推送的使用过程。
DemoMessageReceiver广播接收器
要实现小米推送的移动端接收,核心就是上面所说到的最主要的DemoMessageReceiver这个广播接收器。这个继承了小米SDK里面的PushMessageReceiver类,这个广播接收器可以通过重写下面这5个回调方法来实现对推送的处理。
@Override public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) { // Utilizzato per ricevere i messaggi di trasmissione trasparente inviati dal server al client, viene attivato quando si riceve un messaggio di trasmissione trasparente. } @Override public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) { // Utilizzato per ricevere i messaggi di notifica inviati dal server al client, questo metodo di callback viene attivato quando l'utente clicca manualmente sulla notifica. } @Override public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) { // Utilizzato per ricevere i messaggi di notifica inviati dal server al client, questo metodo di callback viene attivato quando il messaggio di notifica arriva al client. Inoltre, se l'app è in primo piano e non viene visualizzata la notifica, il metodo di callback viene attivato anche quando il messaggio di notifica arriva al client. } @Override public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) { // Utilizzato per ricevere la risposta del server dopo che il client ha inviato un comando di registrazione. } @Override public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) { // Utilizzato per ricevere la risposta del server dopo che il client ha inviato un comando. È possibile ricevere i risultati di vari comandi, ad esempio i risultati di registrazione del servizio, impostazione degli alias e così via, è possibile implementare funzioni come l'inizializzazione dell'errore e il riavvio qui. }
DemoApplication eredita la classe Application
Le principali funzioni di questa classe Application sono impostare l'ID e la KEY dell'app, e registrare il servizio di notifiche nell' metodo onCreate.
In questo Demo, c'è anche un Handler all'interno che permette al ricevitore di broadcast di utilizzarlo per inviare Toast e far stampare il Log nel TextView di MainActivity.
// Usa il tuo appid per la chiave. private static final String APP_ID = "1000270"; // Usa il tuo appid per la chiave. private static final String APP_KEY = "670100056270"; // Questo TAG nel logcat adb ricerca le informazioni di cui hai bisogno, è sufficiente inserire adb logcat | grep nella riga di comando // 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(); // 注册push服务,注册成功后会向DemoMessageReceiver发送广播 // 可以从DemoMessageReceiver的onCommandResult方法中MiPushCommandMessage对象参数中获取注册信息 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()); } } //这里是检测进程是否处于前台的方法 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
Il MainActivity nel Demo è principalmente responsabile della gestione dei pulsanti dell'interfaccia, utilizzando questo per illustrare come impostare il piano di invio locale, le impostazioni specifiche includono
Configurazione del file AndroidManifest
Prima di tutto, Xiaomi Push supporta la versione minima di Android 2.2, quindi]}
<uses-sdk android:minSdkVersion="8"/>
Successivamente, sono necessarie le seguenti autorizzazioni:
<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" /> <!--Qui cambiare com.xiaomi.mipushdemo con il nome del pacchetto dell'app--> <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" /> <!--Qui cambiare com.xiaomi.mipushdemo con il nome del pacchetto dell'app-->
Poi è necessario registrare una serie di BroadcastReceiver (tutti registrati staticamente, perché devono rimanere in background a lungo, e non dimenticare di registrare anche DemoMessageReceiver che eredita PushMessageReceiver). In totale, ci sono 3 ricevitori di broadcast e 4 servizi.
<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>
Basta modificare il demo AppId e AppKey in quelli propri (ricorda di abbinarli correttamente al nome del pacchetto e al nome dell'app), poi sarai in grado di ricevere le notifiche corrispondenti.
Implementazione di riadattamento mobile
Dopo aver compreso大概 questo Demo, puoi riadattare Xiaomi Push nel tuo App per soddisfare le tue esigenze, attenzione quando riadatti:
Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il diritto d'autore è di proprietà del proprietario originale, il contenuto è stato caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una email a: notice#oldtoolbag.com (al momento dell'invio dell'email, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, il sito eliminerà immediatamente il contenuto sospetto di violazione del copyright.