일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Swift flutterview
- Flutter UIKitView MethodChannel
- 앱 백그라운드 푸시 데이터 저장
- 스위프트 푸시
- 앱 꺼졌을 때 푸시 데이터 저장
- 안드로이드 FCM
- NotificationService Extension
- Swift flutterviewcontroller
- 스위프트 UserDefaults
- flutter 회전
- 스위프트 테이블 뷰 셀
- 노티피케이션 익스텐션
- 스위프트
- 푸시 데이터 저장
- 플러터 뷰 컨트롤러
- swift autolayout
- native flutter view
- FlutterView MethodChannel
- 안드로이드 바로가기
- 안드로이드 에러
- silent push
- 스위프트 카메라
- 안드로이드 숏컷
- flutter rotate
- swift sms
- 스위프트 앨범
- swift 문자
- Flutter NativeView
- 안드로이드 앨범
- 스위프트 웹뷰
- Today
- Total
Things take time
[Android] FCM을 이용한 푸시 보내기 본문
[푸시]
FCM 관련 글을 쓴 것 같았는데, 옛날 블로그에만 기록이 되어있었다.
이번에 새로 앱을 하나 만들어야할 게 있어서, 기본 하이브리드앱 + 푸시만 들어간.. 거의 껍데기 앱을 만들었기에 이번에 하면서 정리하려 한다. 카메라/지도 등이 들어간다면 다시 정리해볼 수 있었을 텐데 아쉽네
https://firebase.google.com/docs/cloud-messaging/?hl=ko
기본 참고 사이트다. FCM은 구글에서 제공하는 클라우드 메시징 서비스이기 때문에 안드로이드와 궁합이 잘 맞다. 물론 iOS에서도 지원가능하다.
[순서 정리]
가장 간단하게 정리하면
1. 콘솔 사이트에서 앱 등록하기 / 안드로이드 스튜디오 내에 파일 import 및 Gradle 설정
2. 매니페스트 내 서비스 선언 및 실제 서비스 작성
이렇게 정리된다!
[상세]
1. 콘솔 사이트에서 앱 등록하기 / 안드로이드 스튜디오 내에 파일 import 및 Gradle 설정 가이드는 아래 참고
https://firebase.google.com/docs/android/setup?hl=ko
이렇게 도움말로 나온다. 거기서 클라우드 메시징을 눌러보서 보면, 가이드가 나오게 된다.
이렇게 Firebase에 연결하기를 눌러서 구글 계정으로 로그인하고, 프로젝트를 새로 생성하던지, 기존 것을 사용하면 되는데.. 나는 여기서 에러 발생했다.
Firebase: Connect to Firebase failed. Please check your internet connection and try again. If errors persist, you can connect manually at https://console.firebase.google.com
결국 수동으로 하란 뜻.
다시 가이드 링크를 따라 수동으로 진행한다.
Firebase 콘솔 페이지 (https://console.firebase.google.com/?hl=ko)로 이동하여 프로젝트를 생성한다. (혹은 기존 사용, 위 과정과 같음)
만들게 되면, 리소스 프로비저닝 작업이 진행되며 프로젝트가 생성된다.
이제 저기서 안드로이드를 선택해서 화면대로 진행한다. (패키지명 입력하기 -> google-services.json 다운로드하기 -> 스튜디오 내 루트 디렉토리에 해당 json파일 이동하기 => Gradle에 메시징 서비스 implementation하기 등 설명 그대로를 따라한다. json 이동 시엔 ctrl + c로 파일 복사하고 ctrl + v로 넣으면 된다. 드래그 X)
마지막 과정으로는 앱을 실행시켜서 Firebase와 통신했는지 테스트하면 기본 설정이 완료된다.
2. 매니페스트 내 서비스 선언 및 실제 서비스 작성
매니페스트 내 application 태그 안에 작성한다.
<service
android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
그리고 오레오부터 추가된 푸시 채널(짜증)을 위해 선언, 이 아이디는 서버에서 각 기기에 푸시 발송시 들어가는 channel_id에 이 식별자로 된 채널을 통하라고 알려줄 때 필요하다. 쓰지 않으면 기본 알림채널을 사용한다.
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id"/>
이제 매니페스트에서는 기본 설정을 등록했다. 아마 이 상태라면 저 두개의 서비스 밑에 빨간 줄이 그어져 있을 것이다. 해당 이름으로 등록된 자바파일이 없기 때문이다.
때문에, 2개의 서비스 파일을 생성한다.
그리고 각각은 FirebaseMessaginService와 FirebaseInstanceIdService를 각각 상속받게 하여 두 개의 클래스 파일을 생성한다.
주의점
1. FirebaseMessaginService를 상속받는다 해도, cannot resolve symbol FirebaseMessaginService 이렇게 떠서 상속을 못받는 경우가 있다. 이 이유는 1번에서 알려준 것 + 앱 단위의 Gradle에 한 줄 더 추가해야한다. 버전이 낮을 경우, 주의점 2번 해결방법이 되지 않으므로 버전 값을 잘 볼 것, 현재 도큐먼트에 나온 12.버전은 사용하면 안 된다.
dependencies { compile 'com.google.firebase:firebase-messaging:17.3.4' }
2. FirebaseInstanceIdService is deprecated
이 서비스가 곧 사라질 운명에 처했다. 가이드에서 하란대로 했더니 곧 삭제될 서비스라니?
https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceIdService
이 서비스의 역할은 토큰이 생성 되거나, refresh 등의 역할을 수행한다. 근데 이 서비스는 이제 사용되지 않고(onTokenRefresh() 포함) onNewToken()이란 함수를 FirebaseMessaginService를 상속받는 클래스내에 선언하여 사용하면 된다고 한다. 가이드에서도 업데이트가 이루어 질 듯 하다.
즉 => FirebaseInstanceIdService 이 서비스를 사용할 이유가 없다.
또한 현재 토큰 값을 얻어오는 문법 또한 변경되었다. 그리고 서비스의 특성상 토큰이 생성되었을 때(확실히) 값을 얻어내야 Null 에러가 나지 않기때문에 아래의 코드를 선호한다.
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MainActivity.this, new OnSuccessListener() { @Override public void onSuccess(InstanceIdResult instanceIdResult) { String newToken = instanceIdResult.getToken(); Log.e("newToken",newToken); } });
stackOverFlow에서 얻은 좋은 코드 :)
그리고 얻어낸 토큰값을 아래의 사이트에서 테스트!
https://console.firebase.google.com/project/콘솔 내 프로젝트명/notification?hl=ko
'Android(기능)' 카테고리의 다른 글
[Android] 푸시 Notification 만들기, 노티 빌더(Builder), 그리고 클릭 PendingIntent (1) | 2018.11.27 |
---|---|
[Android] FCM Error : MismatchSenderId (0) | 2018.11.26 |
[Android] Content://로 시작하는 콘텐츠 프로바이더 Uri주소 값을 실제 Path로 얻어내기 (0) | 2018.06.29 |
[Android] 앨범 가져올 때 주의점 및 코드 (0) | 2018.06.28 |
[Android] 현재 디바이스의 너비/높이 얻어오기 (0) | 2018.05.25 |