English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في الأشهر القليلة الماضية كنت أبحث عن وظيفة وأثناء البحث عن العمل، استثمرت الكثير، وأخيراً حصلت على بعض النتائج، لذلك لم أكن قد قمت بتقديم ملاحظات. فقط في الآونة الأخيرة أتيحت لي الفرصة لتنظيم ملاحظاتي وإرسالها للنشر، لأشارك تجربتي التعليمية.
إرسال
بسبب أن مشروعي الحالي يحتاج إلى إرسال الرسائل على Android، هناك العديد من حلول إرسال الرسائل على Android، مثل C2DM، البحث المتكرر، SMS، بروتوكول MQTT، بروتوكول XMPP، والمنصات الثالثة، بعد النظر في احتياجات المشروع، اخترنا منصة التسويق الثالثة من Xiaomi للإرسال، وما يلي هو طريقة تنفيذ Xiaomi Push.
Implementation preparation
To use Xiaomi Push, you first need to register and apply for a developer account on the Xiaomi Developer Platform. After the review takes 1 to 3 days, it will be approved, and then you can apply for push services. After applying for a push service for an App, you can get AppID and AppKey and then learn how to use the Demo. Below, I will mainly talk about my understanding of the Demo.
Push description
The content of the push can be sent by the background service端 using the Xiaomi Push SDK, or sent on the Xiaomi Push platform. There are two types of messages to be sent: notification messages and transparent information.
Notification message:
It is the message that will be displayed in the Android system notification bar, and the user needs to implement the response event by himself or specify it when sending the message to open the App.
Transparent message:
It is transparent transmission, that is, the transmission network is responsible for transmitting the business to the destination node regardless of the transmission business, and ensures the quality of transmission, without processing the transmission business. It is to directly pass the message to the App without automatically displaying it in the notification bar.
Official Demo description
The official Demo simply shows us the various settings and how to implement push reception of Xiaomi Push. First, the Xiaomi Push SDK is added to the Library, and there are 4 Java files inside, as shown in the figure
The fourth Dialog can be ignored, the key is the DemoMessageReceiver broadcast receiver, which receives various push information and processes it. And that DemoApplication and MainActivity are used to implement the display of received information.
Then the interface is like this (the demo didn't do screen adaptation, so it's like that):
A series of push configuration and a TextView to display Log. It mainly shows the process of using Xiaomi Push.
DemoMessageReceiver broadcast receiver
To implement the mobile end reception of Xiaomi Push, the core is the most important DemoMessageReceiver broadcast receiver mentioned above. This receiver inherits the PushMessageReceiver class inside the Xiaomi SDK, and this broadcast receiver can implement push processing by overriding the following 5 callback methods.
@Override public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) { // تستخدم لاستقبال الرسائل الشفافة التي يرسلها الخادم إلى العملاء، يتم إطلاق هذه الدالة عند استقبال رسالة شفافة. } @Override public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) { // تستخدم لاستقبال الرسائل الإشعارية التي يرسلها الخادم إلى العملاء، يتم إطلاق هذه الدالة عند ضغط المستخدم على الإشعار. } @Override public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) { // تستخدم لاستقبال الرسائل الإشعارية التي يرسلها الخادم إلى العملاء، يتم إطلاق هذه الدالة عند وصول رسالة الإشعار إلى العملاء. بالإضافة إلى ذلك، يتم إطلاق هذه الدالة أيضًا عند وصول رسائل الإشعار التي لا تفتح عند وجود التطبيق في الخلفية إلى العملاء } @Override public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) { // تستخدم لاستقبال استجابة النتائج بعد إرسال أوامر التسجيل من العملاء إلى الخادم } @Override public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) { // تستخدم لاستقبال استجابة النتائج بعد إرسال الأوامر من العملاء إلى الخادم. يمكن استقبال نتائج أوامر متعددة هنا، مثل نتائج التسجيل في الخدمة وتعيين الأسماء المزعجة وما إلى ذلك، يمكن تنفيذ وظائف مثل إعادة التشغيل بعد خطأ التشغيل هنا. }
يُ継د DemoApplication من الفئة Application
المهام الرئيسية للفئة Application هي تعيين ID وKEY للApp، بالإضافة إلى التسجيل في خدمة الإشعارات في طريقة onCreate.
في هذاDEM، يتم إنشاء مانيجر هناك لتمكين مستقبل الإشعارات من استخدامه لإرسال Toast ولفهم MainActivity لطباعة Log على TextView.
// استخدم appid الخاص بك وكلمة المرور. private static final String APP_ID = "1000270"; // استخدم appid الخاص بك وكلمة المرور. private static final String APP_KEY = "670100056270"; // البحث عن المعلومات المطلوبة في adb logcat، فقط اكتب adb logcat | grep في محطة الأوامر // 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
النشاط الرئيسي في Demo هو تنفيذ معالجة الأزرار في واجهة المستخدم، بهذا الشكل يمكننا معرفة كيفية إعداد خطة التسليم المحلية، والتعديلات المحددة تشمل
تعدادية AndroidManifest
首先小米推送支持最低的Android版本是2.2,所以要
后需要的是如下权限:
然后就是要注册一堆的BroadcastReceiver(都是静态注册,因为要长期处在后台运行,还有继承了PushMessageReceiver的DemoMessageReceiver也需要注册不要忘了)和Service,一共是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>
ببساطة قم بتعديل AppId وAppKey في demo لتكون الخاص بك (تأكد من أنها تتطابق مع اسم الحزمة واسم التطبيق)، ثم يمكنك استقبال التوصيلات المطلوبة.
نقل على الجهاز المحمول
بعد فهم هذا المثال بشكل جيد، يمكنك نقل Xiaomi Push إلى تطبيقك الخاص لتحقيق احتياجاتك الخاصة، عند النقل، يجب الانتباه إلى ما يلي:
إعلان: محتويات هذا المقال تم جمعها من الإنترنت، ويتمتع صاحب الحقوق الأصلي بهذه المحتويات، تم جمع المحتويات من قبل المستخدمين عبر الإنترنت الذين قدموا مساهماتهم بشكل تلقائي وتم تحميلها، ويملك هذا الموقع حقوق الملكية، لم يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية ذات صلة. إذا لاحظت أن هناك محتويات مشبوهة بالنسبة لحقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال # ب @ عند إرسال البريد الإلكتروني) لإبلاغنا، وتقديم الدليل على ذلك، وإذا تم التحقق من ذلك، فإن هذا الموقع سيزيل المحتويات المشبوهة فوراً.