-
Firebase Clounding Message 구현 (2) - 서비스 구현Android/FireBase 2019. 8. 5. 18:29
기본셋팅까지 다 끝내셨으면 이제 Firebase에서 날라오는 알림을 받기 위한 서비스를 구현 해주어야 한다.
1. FirebaseMessagingService 상속받은 클래스 생성
class MyFirebaseMessagingService : FirebaseMessagingService() { /** * 메시지를 받았을 경우 그 메시지에 대하여 구현 */ override fun onMessageReceived(remoteMessage: RemoteMessage?) { Log.d(TAG, "Received Message !!") } /** * 구글 토큰 값 흭득 * 아래 토큰은 앱이 설치된 디바이스에 대한 고유값으로 푸시를 보낼때 사용 */ override fun onNewToken(token: String?) { Log.d(TAG, "Refreshed token: " + token!!) FirebaseTokenManager.sendRegistrationToServer(applicationContext, token) } }
구현 할 메서드는 딱 2개 이다.
onMessageReceived : 메시지를 받았을때 실행
onNewToken : 구글 토큰 값을 흭득 했을 때 실행
2. FirebaseTokenManager 생성
object FirebaseTokenManager { /** * 해당 디바이스의 Token을 받아옵니다. */ fun registerTokenManager(context: Context) { FirebaseInstanceId.getInstance().instanceId .addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { Log.w(TAG, "getInstanceId failed", task.exception) return@OnCompleteListener } // Get new Instance ID token val token = task.result?.token sendRegistrationToServer(context, token!!) }) } /** * 서버에 토큰값을 저장합니다. * document = 디바이스 고유 ID ( UniqueID ) */ @SuppressLint("HardwareIds") fun sendRegistrationToServer(context: Context, token: String) { FirebaseFirestore.getInstance().collection("Token") .document( Settings.Secure.getString( context.contentResolver, Settings.Secure.ANDROID_ID ) ) .set(mapOf("token" to token)) } }
FirebaseInstanceId.getInstance() 이것으로 해당 기기의 토큰값을 받아와 준다.
토큰은 기기를 식별하는 값이기에 토큰이 발급되었을때 DB에 저장을 해주도록 하자
DB는 Firebase의 Firestore를 사용하였다.
3. AndroidManifest.xml 수정하기
먼저 strings.xml에 값 하나를 추가해주도록 합시다.
<resources> <string name="app_name">My Application</string><resources> <string name="default_notification_channel_id">istmanagerfcm</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.donghun.myapplication"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_launcher_background"/> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent"/> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/> </application> </manifest>
meta data에 대해서 설정을 하자면 우리가 서버로 부터 데이터를 받아오지만 어떻게 노티를 출력시킬지는 정해지지 않았다. 이를 위해서 만약 노티가 들어왔을때 기본값으로 사용할 값을 지정해주어야 한다.
<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_launcher_background"/
먼저 Notification에 출력시킨 아이콘이다. 현재는 따로 준비한게 없어서 아이콘 런처의 백그라운드로 지정 하였다.
보통은 앱의 아이콘을 사용한다.
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
그다음은 Notification의 채널이다. 오레오부터 추가된 개념으로 적용하지 않으면 Notification이 출력되지 않을 수 있다.
<meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent"/>
그다음은 Notificication의 색상이다.
앱을 실행시켜 Firebase Firestore에 정상적으로 Token값이 저장되는지 확인을 해주도록 하자.
이로써 디바이스에서 기본적인 셋팅은 다 끝났다.
다음 강좌에서는 메시지를 직접 날려보고 추가적인 작업을 해보도록 하겠다.
'Android > FireBase' 카테고리의 다른 글
Firebase Clounding Message 구현 (3) - Notification 구현 (0) 2019.08.29 Firebase Clounding Message 구현 (1) - 기본적인 환경 구축 (0) 2019.08.05