*파이어베이스-클라우드 메시징(Cloud Messaging, FCM)
-스마트폰에 메시지를 전달하는 서비스
-서비스의 정식 명칭 : 푸시 메시징(Firebase Cloud Messaging(FCM))
-사용자 디바이스에 특별한 코드없이 메시지를 전달할 수 있음
-전달한 메시지를 사용자가 클릭하여 앱을 실행할 수 있음
-사용자 토큰을 기반으로 동작함
-토큰은 사용자 디바이스에서 생성되며 파이어베이스에서 제공하는 FirebaseMessagingService를 상속받아 사용
*메시지 기본구조
-메시지를 전송할 때 받는 사람의 토큰과 메시지가 담긴 알림(notification)을 함께 보냄
-알림 이외에도 메시지에 data를 함께 전달할 수 있음
{
"message": {
"token": "tototototo...", //받는 사람 토큰
"notification": {
"title": "Argentina vs. France"
"body": "Final match!!"
}
}
}
*FCM 접근 진행 방식 (보안문제)
-디바이스에서 직접 접근하지 않음
-백엔드 서버를 통해서 전송
--(백엔드 서버를 통해 전송하는 이유 : FCM 서버에 접속할 수 있는 서버키를 숨겨 보안을 유지하기 위함)
-FCM 서버는 전송받은 메시지와 서버키 확인
-메시지가 전송되어야 할 디바이스(웹, 앱)로 메시지 전송
*안드로이드 프로젝트 생성 및 파이어베이스 연동
-파이어베이스 웹 사이트 접속 : https://console.firebase.google.com/
-왼쪽 탭 상단 ⚙️ - 프로젝트 설정 - 앱 추가
-앱 등록 - 패키지명 - 앱 닉네임 - 앱등록
-구성파일 다운로드 후 추가 - google-services.json 다운로드 - 파일 복사
-안드로이드 스튜디오 프로젝트 - Project - app 디렉토리에 붙여넣기
-Firebase SDK 추가
-프로젝트 build.gradle(Project:) - plugins{} 코드 추가
//파이어베이스 SDK추가
id 'com.google.gms.google-services' version '4.3.13' apply false
-프로젝트 build.gradle(Module:) - plugins{} 코드 추가
//파이어베이스 사용을 위한 구글서비스 플러그인
id 'com.google.gms.google-services'
-프로젝트 build.gradle(Module:) - dependencies{} 코드 추가
//파이어베이스 SDK추가
implementation platform('com.google.firebase:firebase-bom:31.1.1')
implementation 'com.google.firebase:firebase-analytics-ktx'
//파이어베이스 메시지 의존성 추가
implementation 'com.google.firebase:firebase-messaging-ktx'
-다음 - 콘솔로 이동
*클라우드 메시징 서비스 생성
-사용자 토큰을 기반으로 동작, 사용자 디바이스에서 생성됨
-파이어베이스에서 제공하는 FirebaseMessagingService를 상속받아 토큰 사용
-build.gradle
-- android{} 에 뷰바인딩 추가
//뷰바인딩
buildFeatures{
viewBinding true
}
-MainActivity.kt
//1
//app - java밑 패키지명 우클릭 - New - Service - Service
//MyFirebaseMessagingService - Finish
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//2
//토큰을 다시 출력하기위한 코드
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful){
Log.e("토큰", "FCM registration token failed", task.exception)
return@OnCompleteListener
}
val token = task.result.toString()
Log.d("토큰", "재호출: $token")
})
}//onCreate
}//MainActivity
-MyFirebaseMessagingService.kt
//1
//기본으로 Service()를 상속받고 있음
//FirebaseMessagingService()를 상속받도록 수정
//클래스 안 코드 모두 삭제
class MyFirebaseMessagingService : FirebaseMessagingService() {
//2
//토큰을 받을 수 있는 상태가 되면 호출되는
//onNewToken()메서드 오버라이드
//onNewToken(): 토큰이 생성될 때마다 안드로이드가 호출해줌
//메서드 안에서 받은 토큰은 디바이스나 서버에 저장해두어야 함...
//현재 프로젝트에서는 일단 로그로 토큰 출력 후 복사해서 사용함...
override fun onNewToken(token: String) {
Log.d("토큰", "$token")
}
//3
//AndroidManifest.xml의 <service>태그 수정
//intent-filter에 MESSAGING_EVENT설정
//메시지가 수신되면 MyFirebaseMessagingService 동작
//수신코드를 작성하지 않았어도 토큰을 기반으로 동작하기 때문에
//해당 토큰을 가진 디바이스 상단에 별도의 메시지 알림이 보여짐
//4
//앱 실행 시 로그캣 창으로 실제 토큰 문자열이 출력됨
//토큰 복사해두기...
//5
//토큰이 갱신되기 전까지 앱을 재실행해도 토큰출력 호출이되지 않음
//토큰을 다시 출력하기위해 MainActivity.kt 코드 추가
}
-AndroidManifest.xml
<!-- <service> 태그 수정 -->
<!-- intent-filter에 MESSAGING_EVENT를 달아 -->
<!-- 메시지가 수신되면 MyFirebaseMessagingService가 동작하게 됨 -->
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
*파이어베이스 콘솔에서 메시지 보내기
-파이어베이스 웹 사이트 접속 - 프로젝트 화면 이동
-왼쪽 메뉴탭 - 참여 - Messaging - 첫 번째 캠페인 만들기
-Firebase 알림 메시지 만들기 - 알림제목 및 텍스트 작성
-테스트 메시지 전송 - FCM등록 토큰 추가(로그창 토큰 복사 붙여넣기) - +버튼 - 테스트
-결과
이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.
'Android App > Kotlin' 카테고리의 다른 글
Collections(컬렉션)-List, Set, Map (0) | 2022.12.29 |
---|---|
Double형 변수 소수점 자릿수 (0) | 2022.12.28 |
파이어베이스-스토리지(Storage) (2) | 2022.12.24 |
파이어베이스-리얼타임 데이터베이스 구현(실시간 채팅 앱) (1) | 2022.12.13 |
날짜형식-SimpleDateFormat() (0) | 2022.12.13 |