채널톡 안드로이드 SDK는 Firebase Cloud Messaging(FCM)을 통해서 고객이 오프라인일 때 상담 답변 알림을 받을 수 있도록 설정할 수 있습니다. SDK 설치하기를 완료한 이후 아래 단계를 따릅니다.

📘

Android API level 33(Tiramisu) 이상에서 시스템 푸시 알림을 표시하고자 하는 경우 POST_NOTIFICATIONS 권한이 필요합니다.

채널톡 안드로이드 SDK는 직접 POST_NOTIFICATIONS 권한을 요청하지 않으므로 앱에 해당 권한이 있는지 확인해야 합니다. 자세한 사항은 알림에 관한 안드로이드 공식 문서를 확인합니다.

Firebase 연동 설정

Firebase 프로젝트 생성하기

  1. Firebase 설치 가이드에 따라 안드로이드 앱 프로젝트를 설정합니다.
  2. google-service.json 파일을 다운로드 받아서 앱 모듈 단위의 최상위 디렉토리에 복사합니다.

Firebase와 SDK 연동하기

프로젝트에서 Firebase를 처음 사용하는지 여부에 따라 아래 두 개 섹션 중 하나에 따릅니다.

Firebase를 처음 사용하는 경우

아래 모듈을 설치해서 간편하게 연동할 수 있습니다. 라이브러리를 설치하면 자동으로 Firebase 메시지가 처리됩니다.

먼저 루트 build.gradle에 아래 내용을 추가합니다:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenCentral()

        maven { url 'https://maven.channel.io/maven2' }
    }
}

다음으로 프로젝트 단위 build.gradle에서 디펜던시를 추가합니다. 최신 버전에 대해서는 릴리즈 노트를 참고합니다.

dependencies {
	// 코어 모듈
	implementation 'io.channel:plugin-android:$[version]'

	// FCM을 쉽게 사용하기 위해서 사용
	implementation 'io.channel:plugin-android-fcm:$[version]'
}

Firebase를 기존 프로젝트에서 사용하고 있는 경우

SDK로 Firebase 메시지가 온 것을 전달함으로써 사용할 수 있습니다. FirebaseMessagingService에서 ChannelIO.receivePushNotification()을 통해 SDK가 Firebase 푸시가 왔음을 알 수 있도록 합니다.

class SampleFirebaseMessagingService : FirebaseMessagingService() {
	override fun onNewToken(refreshedToken: String) {
		ChannelIO.initPushToken(refreshedToken)
		// ...
	}

	override fun onMessageReceived(remoteMessage: RemoteMessage) {
		val pushMessage = remoteMessage.data

		if (ChannelIO.isChannelPushNotification(pushMessage)) {
			ChannelIO.receivePushNotification(application, pushMessage)
		} else {
			// ...
		}
	}
}

📘

만약 프로젝트에 FCM가 이미 설치되어 있었다면 onNewToken이 호출되지 않을 수 있습니다. 이 경우 토큰이 SDK에 설정되지 않아 푸시 알림이 오지 않을 수 있습니다. 앱을 재설치하면 문제가 해결됩니다.

앱의 런쳐 액티비티에서, openStoredPushNotification(Activity)을 통해서 SDK에 저장된 푸시 정보를 이용해 채팅 화면을 열 수 있도록 합니다.

class SampleActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
		super.onCreate(savedInstanceState)

		if (ChannelIO.hasStoredPushNotification(this)) {
			ChannelIO.openStoredPushNotification(this)
		}
	}
}

📘

부트 과정이 완료되면 푸시 알림 관련된 정보가 삭제되기 때문에, 부트가 완료되기 이전에 openStoredPushNotification을 호출해야 합니다.

Firebase와 채널톡 데스크 연동하기

  1. Firebase 콘솔에서 왼쪽 사이드바의 프로젝트 오버뷰 > 프로젝트 설정을 클릭합니다.
  1. Cloud Messaging 탭으로 이동해서 Firebase Cloud Messaging API(V1) 섹션에 있는 서비스 계정 관리(Manager Service Accounts)를 클릭합니다.
  1. 서비스 계정을 만들기 이전에 먼저 역할을 만들어야 합니다. 역할 관리(Roles) 페이지로 이동합니다.
  1. 역할 만들기(CREATE ROLE)를 클릭합니다.
  1. 커스텀 역할 제목을 넣고, 권한 추가(ADD PERMISSIONS)를 클릭합니다.
  1. cloudmessaging.messages.create 권한을 선택하여 추가한 후, 역할을 만듭니다. ‘역할을 기준으로 권한 필터링’(Filter permissions by role) 하는 곳에서 검색하지 않도록 주의합니다.
  1. 다시 맨 처음 화면으로 돌아와서, 서비스 계정 만들기(CREATE SERVICE ACCOUNT)를 클릭합니다.
  1. 서비스 계정 세부정보를 채워넣고 만들고 계속하기(CREATE AND CONTINUE)를 클릭합니다.
  1. 역할 선택(Select a role)을 클릭합니다.
  1. 만든 커스텀 역할을 부여해서 서비스 계정을 완성합니다.
  1. 만든 서비스 계정의 키 관리(Manage keys)에 들어갑니다.
  1. 키 추가(ADD KEY)- 새 키 만들기(Create new key) - key 타입을 json으로 선택하여 키를 만듭니다.
  1. 채널톡 데스크에서 설정 > 보안 및 개발 > 모바일 SDK 푸시 > 안드로이드를 클릭합니다.
  2. Select File을 눌러 key 파일을 업로드합니다.

푸시 알림 커스터마이징

푸시 타이틀 변경

푸시 알림의 타이틀을 변경하고자 하는 경우에는 strings.xml에서 notification_title 키의 값을 추가할 수 있습니다. 기본값은 앱의 이름입니다.

<resources>
  <string name="notification_title">Your notification title</string>
</resources>

푸시 아이콘 변경

푸시 알림의 아이콘을 변경하고 싶다면 원하는 이미지를 다음 경로에 복사해주세요.

/res/drawable/ch_push_icon.png