안 드 로 이 드 폰 엔 드 샤 오미 푸 시 데모 분석 및 구현 방법

10877 단어 android푸 시
최근 몇 달 간 일자 리 를 구 하려 고 준비 하고 일자 리 를 구 하 는 데 많은 노력 을 기 울 였 고,마침내 약간의 수확 을 거 두 었 기 때문에 필 기 를 별로 정리 하지 못 했다.최근 에 야 자신의 필 기 를 정리 해서 보 내 고 나의 학습 경험 을 공유 할 수 있 었 다.
푸 시
최근 프로젝트 가 안 드 로 이 드 메 시 지 를 사용 하기 때문에 안 드 로 이 드 푸 시 에 관 한 해결 방안 은 여러 가지 가 있 습 니 다.C2DM,폴 링,SMS,MQTT 프로 토 콜,XMPP 프로 토 콜 과 제3자 플랫폼 이 있 습 니 다.저희 가 프로젝트 수 요 를 고려 한 후에 우 리 는 제3자 플랫폼 에서 푸 시 한 샤 오미 푸 시 를 선 택 했 습 니 다.다음은 샤 오미 푸 시 실현 방법 입 니 다.
준 비 를 실현 하 다
샤 오미 로 푸 시 하려 면 먼저 샤 오미 개발 자 플랫폼 에 가서 개발 자 계 정 을 등록 하고 1~3 일간 의 심 사 를 거 쳐 통과 한 뒤 푸 시 서 비 스 를 신청 할 수 있다.앱 의 푸 시 서 비 스 를 신청 한 후에 앱 ID 와 앱 키 를 얻 으 면 데모 에 사용 하 는 것 을 배 울 수 있 습 니 다.다음은 제 가 데모 에 대한 이 해 를 말씀 드 리 겠 습 니 다.
푸 시 설명
푸 시 내용 은 백 스테이지 서버 에서 샤 오미 가 푸 시 하 는 SDK 를 이용 하여 발송 할 수 있 고 샤 오미 의 푸 시 플랫폼 에서 도 발송 할 수 있 으 며 보 내 는 메 시 지 는 두 가지 가 있 습 니 다.알림 메시지 와 투과 정보 입 니 다.
알림 메시지:
안 드 로 이 드 시스템 알림 표시 줄 에 표시 되 는 메시지 입 니 다.사용자 가 응답 이 벤트 를 클릭 하면 스스로 실행 하거나 보 낼 때 앱 을 여 는 것 을 설명 합 니 다.
메시지 전달:
즉,투명 전송,즉 전송 네트워크 는 전송 업무 가 어떻든 전송 이 필요 한 업 무 를 목적 노드 로 전송 하 는 동시에 전송 의 질 을 확보 하면 되 고 전송 업 무 를 처리 하지 않 는 다.앱 에 직접 메 시 지 를 전달 하 는 것 으로 알림 표시 줄 에 자동 으로 표시 되 지 않 습 니 다.
공식 데모 설명
공식 적 으로 제 시 된 데모 에 서 는 샤 오미 가 푸 시 하 는 각종 설정 과 수신 푸 시 를 어떻게 실현 하 는 지 간단하게 보 여 주 었 다.Demo 는 먼저 샤 오미 가 푸 시 한 SDK 를 Library 에 추가 한 다음 에 그 안에 4 개의 자바 파일 이 있다.그림 과 같다.

네 번 째 Dialog 는 보지 않 아 도 됩 니 다.관건 은 DemoMessage Receiver 라 는 라디오 수신 기 입 니 다.푸 시 된 각종 정 보 를 받 고 처리 하 는 것 입 니 다.그리고 그 데모 애플 리 케 이 션 과 MainActivity 는 정 보 를 받 은 디 스 플레이 를 실현 하 는 데 사 용 됩 니 다.
그리고 화면 이 이 렇 습 니 다.

푸 시 에 대한 설정 과 Log 를 표시 하 는 TextView주로 좁쌀 푸 시 사용 과정 을 보 여 주 었 다.
DemoMessage Receiver 방송 수신 기
샤 오미 가 푸 시 하 는 모 바 일 수신 을 실현 하려 면 핵심 은 위 에서 말 한 가장 주요 한 DemoMessage Receiver 라 는 방송 수신 기 이다.샤 오미 SDK 의 PushMessage Receiver 클래스 를 계승 한 이 라디오 수신 기 는 아래 의 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) {
    //                     。                ,      、         ,                     。
  }

데모 어 플 리 케 이 션 계승 어 플 리 케 이 션 클래스
이 애플 리 케 이 션 류 의 주요 기능 은 앱 의 ID 와 KEY 를 설정 하고 onCreate 방법 에 푸 시 서 비 스 를 등록 하 는 것 입 니 다.
이 데모 에 서 는 라디오 수신 기 가 Toast 를 보 내 고 MainActivity 가 Log 를 TextView 에 인쇄 할 수 있 도록 Handler 를 만 들 었 습 니 다.

 // user your appid the key.
  private static final String APP_ID = "1000270";
  // user 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 는 주로 인터페이스의 버튼 처 리 를 실현 합 니 다.이 를 통 해 로 컬 푸 시 방안 을 어떻게 설정 하 는 지 알려 줍 니 다.구체 적 인 설정 은
  • 별명 설정,취소:별명(Alias)은 Regid(자동 생 성)와 UserAccount 을 제외 한 사용자 표지 로 MiPushClient.setAlias()방법 과 MiPushClient.unsetAlias()를 통 해 설정 하고 취소 할 수 있 습 니 다
  • 사용자 계 정 설정,취소(UserAccount):MiPushClient.setUserAccount()방법 과 MiPushClient.unsetUserAccount()방법 으로 설정 하고 취소 할 수 있 습 니 다
  • 구독,취소 태그:개발 자 는 자신의 업무 특징 과 결합 하여 사용자 에 게 서로 다른 태그(Topic)를 칠 수 있 습 니 다.메시지 푸 시 를 할 때 개발 자 는 모든 메시지 의 내용 과 대상 사용 자 를 결합 하여 모든 메시지 에 해당 하 는 탭 을 선택 하여 이 탭 을 친 모든 사용자 에 게 메 시 지 를 푸 시 할 수 있 습 니 다.MiPushClient.subscribe()와 MiPushClient.unsubscribe()를 통 해 구독 하고 취소 할 수 있 습 니 다
  • 푸 시 일시 정지,복구,푸 시 시간 설정:푸 시 시간 설정 Demo 는 사용자 가 설정 할 수 있 도록 자체 제작 한 Dialog 류 TimeIntervalDialog 를 사용 합 니 다(코드 양 을 강제로 증가 시 켰 습 니 다).MiPushClient.setAcceptTime()을 통 해 설정 할 수 있 습 니 다.일시 정지 와 복 구 는 pausePush()와 resume Push()를 통 해 설정 할 수 있 습 니 다
  •  그러나 일시 정지 와 복구 밑바닥 의 실현 은 호출 설정 푸 시 시간 이 00:00-00:00 과 00:00-23:59 일 뿐 이 며,수신 시간 대 에 있 지 않 으 면 푸 시 메 시 지 를 잠시 받 지 않 을 뿐 수신 시간 대 에 이 르 면 그 메 시 지 는 계속 전달 된다 는 점 에 주의해 야 한다
  • AndroidManifest 파일 설정
    우선 샤 오미 푸 시 지원 이 가장 낮은 안 드 로 이 드 버 전 은 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(모두 정적 등록 입 니 다.장시간 백 스테이지 에서 실행 되 어야 하기 때문에 PushMessage Receiver 를 계승 한 DemoMessage Receiver 도 등록 해 야 합 니 다.잊 지 마 세 요)와 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 를 대충 이해 한 후에 샤 오 미 를 자신의 App 에 옮 겨 자신의 수 요 를 실현 할 수 있 습 니 다.이식 할 때 주의해 야 합 니 다.
    4.567917.먼저 응용 프로그램의 가방 이름 을 잘 생각 하고 샤 오미 푸 시 플랫폼 에서 등록 하여 AppID 와 AppKey 를 받 아야 한다샤 오미 가 밀어 준 SDK 를 창고 에 넣 고 있 습 니 다
  • AndroidManifest 파일 에 권한 을 설정 합 니 다(Android 6.0 에 있 는 권한 은 동적 으로 가 져 올 수 있 습 니 다).Service 와 BroadcastReceiver 를 등록 하 십시오
  • 4.567917.응용 이 시 작 될 때 등록 샤 오미 푸 시 서 비 스 를 초기 화 하 는 것 을 기억 하 세 요4.567917.마지막 으로 PushMessage Receiver 를 물 려 받 아 하고 싶 은 대로 할 수 있 습 니 다4.567917.마지막 으로 제 가 쓴 간단 한 데 모 를 제공 합 니 다.위 에서 이해 한 후에 제 간단 한 이식 을 참고 할 수 있 습 니 다.위 에 있 는 것 이 너무 전면적 이기 때문에 우 리 는 실제 적 으로 수요 가 실현 되 는 것 을 보면 됩 니 다

    좋은 웹페이지 즐겨찾기