English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
최근 몇 개월은 취업을 준비하고 취업을 찾는 과정에서 많은 노력을 했습니다. 결국 조금의 성과를 얻었습니다. 따라서 메모를 정리하지 않았습니다. 최근에야 자신의 메모를 정리하여 올립니다. 제 학습 경험을 공유합니다.
推送
최근 프로젝트에서 Android 메시지推送를 사용해야 하는 경우, Android推送 솔루션은 많이 있습니다. C2DM, Polling, SMS, MQTT 프로토콜, XMPP 프로토콜 및 제3자 플랫폼을 통해 프로젝트 요구 사항을 고려한 후, 제3자 플랫폼推送의 Xiaomi Push를 선택했습니다. 아래는 Xiaomi Push 구현 방법입니다.
준비
Xiaomi Push를 사용하려면 먼저 Xiaomi 개발자 플랫폼에 등록하고 개발자 계정을 신청해야 합니다. 이후1까지3심사가 끝나면 통과됩니다. 그런 다음推送 서비스를 신청할 수 있습니다. App의推送 서비스를 신청하면 AppID와 AppKey를 받고, Demo를 사용하기 위해 학습할 수 있습니다. 아래에서는 Demo에 대한 이해를 설명하겠습니다.
推送 설명
推送 내용은 백그라운드 서비스 엔드포인트가 Xiaomi Push SDK를 사용하여 발신할 수 있으며, Xiaomi Push 플랫폼에서도 발신할 수 있습니다. 발신 메시지는 두 가지가 있습니다: 알림 메시지와 투명 전송 정보.
알림 메시지:
Android 시스템 알림 표시板上에 표시되는 메시지이며, 사용자가 클릭한 응답 이벤트는 자신이 구현하거나 전송 시 클릭하여 App을 열기로 설명할 수 있습니다.
투명 전송 메시지:
투명 전송이며, 전송 네트워크는 전송 비즈니스와 관계없이 전송이 필요한 비즈니스를 목적 지점에 전송하고, 전송 품질을 보장하면 됩니다. 전송 비즈니스를 처리하지 않습니다. 그냥 메시지를 App에 전달합니다. 알림 표시板上에 자동으로 표시되지 않습니다.
공식 Demo 설명
공식적으로 제공된 Demo는 Xiaomi Push의 다양한 설정과推送 수신을 어떻게 구현하는지 간단히 보여줍니다. Demo는 먼저 Xiaomi Push SDK를 Library에 추가한 후, 그 안에4개의 Java 파일,如图
제4Dialog는 보지 않아도 됩니다. 중요한 것은 DemoMessageReceiver 브로드캐스트 수신기입니다. 이 수신기는推送된 여러 가지 정보를 수신하여 처리합니다. 또한 DemoApplication과 MainActivity는 수신된 정보를 표시하기 위해 사용됩니다.
그런 인터페이스가 됩니다 (디모는 스크린 어댑트를 하지 않았기 때문에 그렇게 됩니다):
推送에 대한 설정이 많이 있고, 로그를 표시하는 TextView가 있습니다. 주로 Xiaomi Push의 사용 과정을 보여줍니다.
DemoMessageReceiver 브로드캐스트 수신기
xiaomi 푸시의 모바일 수신을 구현하려면, 위에서 언급한 가장 중요한 DemoMessageReceiver 브로드캐스트 리시버가 핵심입니다. 이는 xiaomi SDK 내의 PushMessageReceiver 클래스를 상속한 것으로, 이 브로드캐스트 리시버는 아래와 같은 메서드를 재정의하여 푸시를 처리할 수 있습니다.5콜백 메서드를 통해 푸시를 처리합니다.
@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 클래스의 주요 기능은 App의 ID와 KEY를 설정하고 onCreate 메서드에서 푸시 서비스를 등록하는 것입니다.
이 데모 안에서는, 브로드캐스트 리시버가 토스트를 발송하고 MainActivity에서 로그를 TextView에 출력할 수 있도록 Handler를 설정했습니다.
// your appid the key. private static final String APP_ID = "1000270"; // your appid the key. private static final String APP_KEY = "670100056270"; // 이 TAG를 사용하여 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에서 MainActivity는 인터페이스 버튼 처리를 구현하는 주요 부분이며, 이를 통해 지역 푸시 계획을 설정하는 방법을 알려줍니다. 구체적인 설정은 다음과 같습니다:
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를 앱 패키지 이름으로 변경하세요--> <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" /> <!--여기서 com.xiaomi.mipushdemo를 앱 패키지 이름으로 변경하세요-->
그 다음 등록해야 할 BroadcastReceiver(모두 정적 등록입니다. 배경에서 장기적으로 실행되기 때문입니다. 또한 PushMessageReceiver를 상속한 DemoMessageReceiver도 등록하지 마세요)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" /> <!--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" /> <!--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>
demo의 AppId와 AppKey를 자신의 것으로 변경하시면 됩니다. 패키지 이름과 애플리케이션 이름이 일치해야 합니다. 그런 다음, 해당推送을 수신할 수 있습니다.
모바일 단위 이식 구현
이 Demo를大概 이해한 후, 자신의 애플리케이션에 미쓰리推送을 이식하여 자신의 요구를 구현할 수 있습니다. 이식할 때 주의할 점은 다음과 같습니다:
고지: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용을 발견하시면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 신고를 할 때는 #을 @으로 변경하시고, 관련 증거를 제공해 주시면, 사실이 확인되면, 이 사이트는 즉시 위반 내용을 삭제할 것입니다.