Android 응용 프로그램에 Firebase Cloud Messaging 설치(2) - 응용 프로그램에서 메시지 수신

Firebase Cloud Messaging을 사용하여 Android 응용 프로그램에서 푸시 알림을 가져오는 방법을 썼습니다.
이 항목은 실제 통지를 받는 데 필요한 코드를 써서 통지를 받을 때까지 정리했다.

FCM 메시지 유형


FCM 메시지의 종류는 다음과 같습니다.자세한 내용은 을 참조하십시오여기.
메시지 유형
개요
알림 메시지
어플리케이션 처리를 대신하는 FCM 메시지미리 정의된 키로 보내기 때문에 결정 이외의 정보를 보낼 수 없습니다
데이터 메시지
응용 프로그램이 직접 처리하는 메시지입니다.보내는 쪽은 메시지 형식을 자유롭게 결정할 수 있습니다. 예를 들어 메시지의 키
양자의 차이는 주로 다음과 같은 두 가지가 있다.
  • 메시지를 보내는 데 사용되는 JSON의 형식이 다르다
  • 애플리케이션에서 메시지를 수신할 때 동작이 달라집니다
  • 메시지를 받았을 때 프로그램의 동작은 다음과 같습니다.
    "onMessageReceived"라고 적힌 상태에서 호출Firebase Messaging Service 클래스의 서비스를 계승하는 onMessageReceived 방법.
    메시지 유형
    응용 프로그램은 프론트입니다.
    응용 프로그램은 백그라운드입니다.
    알림 메시지
    작업 트레이 진입
     onMessageReceived
    데이터 메시지
    onMessageReceived
     onMessageReceived
    알림 메시지에는 데이터도 포함될 수 있습니다.양자 병용의 경우 참조여기.

    전제 조건


    Android 프로젝트에 Firebase를 추가했습니다.추가 방법은 확인 이전 항목 하십시오.

    환경


    다음 환경을 사용하여 구현합니다.
  • macOS Mojave 버전 10.14.5
  • Android Studio 3.4.1
  • Nexus5X + Android7.1.2
  • Pixel3a + Android9
  • 실시


    서비스 정의


    계승 FirebaseMessagingService 의 서비스를 만듭니다.
    이 서비스는 다음과 같은 두 가지 방법을 구현합니다.
    방법
    호출 시간
    onNewToken
    토큰(터미널 + 어플리케이션 조합을 고유하게 식별하는 문자열)이 업데이트되었습니다.
    onMessageReceived
    통지를 받다
    나는 각자의 방법을 실현해 보았다.원래 영패가 업데이트되면 서버에 저장해서 처리해야 하는데, 여기에는 기록만 하면 된다.
    MyFirebaseMessagingService.java
    public class MyFirebaseMessagingService extends FirebaseMessagingService {
        @Override
        public void onNewToken(String token) {
            // 端末+アプリを一意に識別するためのトークンを取得
            Log.i("FIREBASE", "[SERVICE] Token = " + token);
        }
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            if (remoteMessage != null) {
                // 通知メッセージ
                RemoteMessage.Notification notification = remoteMessage.getNotification();
                if (notification != null) {
                    // 通知メッセージを処理
                }
    
                // データメッセージ
                Map<String, String> data = remoteMessage.getData();
                if (data != null) {
                    // データメッセージを処理
                }
            }
        }
    }
    
    MyFirebaseMessagingService.kt
    class MyFirebaseMessagingService : FirebaseMessagingService() {
        override fun onNewToken(token: String?) {
            // 端末+アプリを一意に識別するためのトークンを取得
            Log.i("FIREBASE", "[SERVICE] Token = ${token ?: "Empty"}")
        }
    
        override fun onMessageReceived(remoteMessage: RemoteMessage?) {
            remoteMessage?.let { message ->
                // 通知メッセージ
                message.notification?.let {
                    // 通知メッセージを処理
                }
    
                // データメッセージ
                message.data?.let {
                    // データメッセージを処理
                }
            }
        }
    }
    
    제작된 서비스는 Android Manifest입니다.등록xml.
    AndroidManifest.xml
    <service
            android:name=".MyFirebaseMessagingService"
            android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
    

    최신 태그 보기


    터미널 등록 토큰(이하 토큰)은 터미널 + 애플리케이션 조합을 고유하게 식별하는 데 사용되는 문자열입니다.이것을 이용하여 응용 프로그램에 메시지를 보냅니다.
    영패는 사용자의 상황과 서버 측의 상황에 따라 업데이트할 수 있다.최신 영패를 자주 얻는 것을 추천하기 때문에 응용 프로그램이 시작될 때 확인하는 것이 적합하다.
    영패를 가져오는 코드는 다음과 같습니다.
    태그 가져오기(Java)
    FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener((task) -> {
        if (!task.isSuccessful()) {
            Log.w("FIREBASE", "getInstanceId failed.", task.getException());
            return;
        }
    
        String token = (task.getResult() == null) ? "empty" : task.getResult().getToken();
        Log.i("FIREBASE", "[CALLBACK] Token = " + token);
    });
    
    태그 가져오기
    FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { task ->
        if (!task.isSuccessful) {
            Log.w("FIREBASE", "getInstanceId failed", task.exception)
            return@addOnCompleteListener
        }
    
        Log.i("FIREBASE", "[CALLBACK] Token = ${task.result?.token}")
    }
    

    FCM 메시지 수신


    메시지를 받으면 Firebase Messaging Service 하위 클래스에서 구현된 원격 메시지를 호출합니다.그 중에서 메시지를 투시하고 처리하는 논리를 정의합니다.
    '서비스 정의'부분의 예시 코드는 각각 알림 메시지와 데이터 메시지에 대응한다.확인하세요.

    FCM 메시지 보내기


    가능하다면 정보를 받을 준비가 완성될 것이다.
    Firebase 콘솔 또는 HTTP 요청을 통해 메시지를 보낼 수 있습니다.

    a. 콘솔에서 보내기


    알림 메시지를 보내려면 Firebase 콘솔에 로그인하여 필요한 항목을 열고 "Cloud Messaging"으로 이동하십시오.
    First message 보내기를 클릭합니다.
  • 알림 제목 알림 텍스트에 적절한 문자열을 입력하십시오.
  • 대상에 응용 프로그램 ID를 입력하십시오.
  • 두 번째 이후라면 지금까지 보낸 메시지가 한눈에 들어온다.
    화면 왼쪽 상단에 있는 "새 알림"을 클릭하여 새 메시지를 보냅니다.기존 메시지를 복사할 수도 있습니다.

    b.cURL 보내기


    그리고 cURL을 사용하여 알림 메시지와 데이터 메시지를 보냅니다.더 이상 cURL을 배치하고 사용하는 방법을 설명하지 않습니다.
    서버 키를 확인합니다.
    Firebase 콘솔에서 톱니바퀴 모양 설정 아이콘 ① 을 클릭하여 화면을 엽니다.설정 화면에서 "클라우드 메시징"탭 ②를 클릭하십시오.서버 키 ③ 을 표시하고 복사하십시오.

    다음은 데이터 메시지를 보내는 명령의 예입니다.
    SERVER_KEY=(サーバーキー)
    TARGET_TOKEN=(トークン)
    
    curl -X POST -H "Content-Type:application/json" \
         -H "Authorization:key=$SERVER_KEY" \
         -d "{\"data\":{\"name\" : \"Taro Nihon\",\"age\" : \"20\",\"address\" : \"Tokyo\"},\"to\" : \"$TARGET_TOKEN\"}" \
         https://fcm.googleapis.com/fcm/send
    

    총결산


    나는 코드 제작부터 정보 수신까지 써 보았다.
    여기에는 최소한의 내용으로 FCM 메시지를 만들었지만 유효기간과 우선순위 등 다양한 정보를 포함할 수 있다.
    다음 내용을 참고하여 각종 설치를 시도하십시오.
  • 알림 메시지와 데이터 메시지의 차이와 같은 FCM 메시지의 자세한 내용은 여기 에서 확인하십시오.
  • 발송 시 JSON에서 정의할 수 있는 내용은 인용하다 에서 확인할 수 있습니다.
  • 개정 기록

  • 2019/05/24
  • 동작, 검증 환경을 변경했다.
  • Java 코드가 수정되었습니다.
  • 에 Kotlin 코드가 추가되었습니다.
  • Firebase Instance Id Service가 deprecated이기 때문에 설명을 삭제했습니다.
  • 모든 캡처를 재촬영했다.
  • 좋은 웹페이지 즐겨찾기