Skip to content

Instantly share code, notes, and snippets.

@muabe
Last active August 24, 2020 02:13
Show Gist options
  • Save muabe/bb3e3a86594d9813cc04bb7517f844ad to your computer and use it in GitHub Desktop.
Save muabe/bb3e3a86594d9813cc04bb7517f844ad to your computer and use it in GitHub Desktop.
FCM

Android 환경 설정

루트수준(프로젝트 수준) build.gradle 설정

Firebase의 제품을 사용하기 위해선 별도의 gradle 플러그인이 필요하기 때문입니다. 해당 플러그인은 google 저장소 있기 때문에 repositories에 google()을 추가합니다. 추가적으로 dependencies에 classpath를 명시합니다.

  • repositories에 google()을 추가
  • dependencies에 classpath 'com.google.gms:google-services:4.3.3' 추가
buildscript {
    repositories {
        google()
        ...
    }
    dependencies {
        classpath 'com.google.gms:google-services:4.3.3' 
        ...
    }
}

Note : google-services의 최신 버전은 여기를 참고


모듈(앱 수준) build.gradle 설정

  • 이제 build.gradle 파일에 google-services 플러그인을 적용해 줍니다.
  apply plugin: 'com.google.gms.google-services'

  • FCM 라이브러리를 사용하기 위해 dependencies를 추가합니다.
  • 정확한 내용은 없지만 구글 애널리틱스까지 사용설정을 해야 최적화 된다고 권장하고 있습니다.
    따라서 구글 애널리틱스도 dependencies에 추가힙니다.(안해도됨)
  dependencies {
     // 구글 애널릭틱스 
     implementation 'com.google.firebase:firebase-analytics:17.4.4'
     // FCM SDK
     implementation 'com.google.firebase:firebase-messaging:20.2.3'
  }

Note : FCM SDK 최신 버전은 여기를 참고


AndroidManifest.xml 설정

  • FCM을 사용하기 위해서 추후 FirebaseMessagingService 클래스를 상속하여 필요한 내용을 구현 해야합니다. 구현한 클래스는 서비스로 동작하기 때문에 아래 처럼 AndroidManifest에 서비스를 등록 해주어야 합니다.
<application>
 ...
  <service
      android:name=".MyFirebaseMessagingService"
      android:exported="false">
      <intent-filter>
          <action android:name="com.google.firebase.MESSAGING_EVENT" />
      </intent-filter>
  </service>
 
</application>

  • 아래와 같이 노티바에 표시되는 아이콘과 배경색을 설정할 수 있습니다.
  • 서버에서 지정한 아이콘과 배경색이 우선 적용되며 서버에서 설정하지 않았을 경우에 적용됩니다.
<application>
 ...
<!-- 서버에서 기본 배경색을 지정하지 않고 메세지를 보냈을때 아래 아이콘을 사용합니다.-->
<meta-data
    android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_stat_ic_notification" />
<!-- 서버에서 기본 배경색을 지정하지 않고 메세지를 보냈을때 아래 배경색을 사용합니다.-->
<meta-data
    android:name="com.google.firebase.messaging.default_notification_color"
    android:resource="@color/colorAccent" />
 
</application>

채널 설정

채널은 Android 8.0(API 수준 26) 부터 지원하는 기능으로 사용자가 앱을 통하지 않고 시스템에서 직접 알림 설정할게 해줍니다.
시스템에서 모든 알림을 통제하는 하려는 기능로 알림별로 켜고끄는 항복을 나눌수 있는게 그게 바로 채널입니다.

[시스템 알림 채널 관리]로 이동해서 보면 쉽게 이해를 도울수 있습니다.

<application>
 ...
 <meta-data
     android:name="com.google.firebase.messaging.default_notification_channel_id"
     android:value="@string/default_notification_channel_id" />
 
</application>
<string name="default_notification_channel_id" translatable="false">fcm_default_channel</string>

채널 이름도 strings.xml 파일에 잊지 않고 해줍니다.

Push 구현

기기 등록 토큰 액세스

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

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment