Firebase/Cloud Messaging

파이어 베이스 클라우드 메시징 서비스 1/3 (Set Up a Firebase Cloud Messaging Client App on Android)

창업자닉군 2016. 8. 4. 14:55

Set Up a Firebase Cloud Messaging Client App on Android

본 문서는 https://firebase.google.com/docs/cloud-messaging/android/client 문서를 기준으로 작성하였습니다.


참고한 문서들.

http://cosmosjs.blog.me/220739141098



사전 준비 사항.

Firebase Messaging API 와 Android Studio 1.4이상.

파이어 베이스 SDK 안드로이드 앱에 추가 완료. https://firebase.google.com/docs/android/setup ( 제가 만들어 둔 http://it-backup.tistory.com/114 를 참고해도 됩니다.)

FCM (Firebase Cloud Messaging Service)는 Andriod 2.3 이상이 설치된 장치와 그 장치에 Google Play Store 앱이 설치되어 있어야 동작합니다. (Android 장치는 기본적으로 구글 플레이 앱이 설치되어 있으므로, 앱 설치는 신경 쓰지 않아도 됩니다.)



파이어 베이스 SDK와 FCM SDK 설치.

만약 Firebase SDK가 설치되어 있지않다면, 설치해 줍니다. (공식문서 링크, 블로그 설명 링크 중 하나를 참고 하면됩니다.)

안드로이드 스튜디오 속 app-Level build.gradle 파일을 다음과 같이 수정합니다.



앱속의 Manifest 파일을 수정합니다.

공식 문서에서의 설명은 FCM 서비스를 확장하는 것 이라고 합니다. 백그라운드 앱에의 알림을 지나온 메시지를 핸들링 하기 원한다면, 다음과 같은 작업이 요구됩니다. 알림 받기를 대기하고 있는 포그라운드 앱(실행되는 메인 앱), 받을 데이터, 포그라운드로 보낼 업스트림 메시지, 그렇게 하기 위해서는 서비스 확장이 필요하다고 합니다.

FCM 서비스 확장은  등록된 토큰의 생성, (대기하고 있는 장치들에) 순환, 업데이트를 핸들링 합니다. 이것은 장치그룹 생성과 특정 장치에 (메시지 혹은 토큰)을 보내기위해 요구됩니다.

만약 앱의 기능에 FCM이 크리티컬한 경우(error) 매니페이스트에 'android:minSdkVersion="8"' 또는 그 이상의 값으로 셋팅해야 합니다. 이 설정은 확실히 동작하지 않은 한 기능, 앱의 기능을 설치할 수 없는 것에 대한 보장을 합니다. (기능이 없는 경우 버전을 올리므로써, 해결 할 수 있다는 의미 같음).



Google Play Services APK를 위한 확인.

Google Play Service의 기능에 접근하기 전 Google Play Service 설계를 위해 Play Service SDK에 의존하는 앱은 항상 장치를 확인해야 합니다. 이것은 MainActivity 속 OnCreate() 메소드와 OnResume() 메소드 2곳에서 이 것을 하기 위한 권한 입니다. OnCreate() 메소드 속에서 성공적인 확인 없이 앱은 이 것을 이용할 수 없습니다. OnResume()에서의 확인은 유저가 백버튼등을 통해 앱을 재 실행할 경우 여전히 동작됨을 확인합니다. 만약 장치에 Google Play Service 앱의 기능이 구축되지 않은 경우, 여러분이 만들고 있는 앱은 GooglePlayServicesUtil.GetErrorDialog()를 불러 Google Play Store 통해 APK 다운로드 허용 또는 장치에서 허용하도록 합니다. 해당 정보는 https://developers.google.com/android/guides/setup 링크를 참고 하세요. 저도 보지 않았습니다.



장치 등록토큰 접근

여러분의 앱이 초기화 구동을 할 때, FCM SDK는 클라이언트 앱을 위한 등록토큰을 생성합니다. 만약 지정한 하나의 장치 또는 장치 그룹 생성을 위해서, 여러분은 FirebaseInstanceIDService를 확장할 필요가 있습니다. (아마 기기를 특정하지 않고, 전체 기기에 보낼 때는 설정할 필요가 없을 듯 보입니다.) 자세한 내용은 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceIdService 문서를 참고 하면되며, 매니패스트 정도 수정하면될 듯 합니다.

이 섹션에서는 토큰을 회수하는 방법, 교환되는 토큰을 회수하는 방법을 설명합니다. 초기화 이후 순환된 토큰을 더 강한 권한으로 마지막으로 업데이트된 토큰을 회수 해야 하기 때문입니다.

토큰이 변경될 때 :

앱의 인스턴스 아이디 제거

새로운 장치에서 앱이 복원될 때

유저가 앱을 언인스톨 하고 다시 인스톨 할 때

앱에서 유저 데이터가 삭제 될 때



현재의 등록 토큰을 회수

현재의 토큰 회수가 필요할 때, FirebaseInstanceID.getToken() 메소드를 호출 합니다. 생성된 토큰이 없었을 경우 null을 반환합니다.
해당 메소드의 정보는 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId#public-methods 를 참조 합니다.



토큰 생성을 모니터

새로운 토큰이 생성될때 항상 onTokenRefresh 콜백이 호출(본문에서는 Fires 를 동사처럼 사용함, 아마 점화되다는 의미 처럼 보임)됩니다. 그렇게 컨텍스트에서 불려진 getToken 는 토큰에 접근하고, 등록된 토큰의 활성화를 보장 봤습니다. onTokenRefresh속에서 getToken 호출되려면 매니페스트에 서비스가 추가되어 있어야 합니다. (위에서 이미 하였음)


@Override
public void onTokenRefresh() {
   
// Get updated InstanceID token.
   
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
   
Log.d(TAG, "Refreshed token: " + refreshedToken);

   
// If you want to send messages to this application instance or
   
// manage this apps subscriptions on the server side, send the
   
// Instance ID token to your app server.
    sendRegistrationToServer
(refreshedToken);
}


토큰을 획득한 뒤, 여러분은 그것을 우선권이 있는 메소드의 여러분의 앱과 스토어로 보낼 수 있습니다. Instance ID API 참고의 자세히 모두 나와 있는 페이지 주소는 https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId 입니다.



다음 단계

한번의 클라이언트 셋업으로 Firebase Console로 다운 스트림 메시지 보내기와 Firebase Console로 토픽 메시지 보내기를 시작할 준비를 완료 하였습니다. (지금까지의 작업으로). 이 기능은 검증된 퀵스타트 샘플 (https://github.com/firebase/quickstart-android/tree/master/messaging) 을 다운로드 하고 실행하고 검토할 수 있습니다.


또 다른, 더 강력한 행동을 앱에 추가하기위해, 메시지를 받을 작업을 위한 intent filter와 액티비티에 상속을 정의 할 수 있습니다. 앱서버로 부터 더 메시지를 보내기 위한 자세한 가이드는 아래와 같습니다.

다운 메시지 보내기 : https://firebase.google.com/docs/cloud-messaging/downstream

토픽 메시지 보내기 : https://firebase.google.com/docs/cloud-messaging/topic-messaging

디바이스 그룹에 보내기 : https://firebase.google.com/docs/cloud-messaging/notifications

업스트림 메시지 보내기 : https://firebase.google.com/docs/cloud-messaging/upstream