기기가 잠금 해제되기 전에 앱에 FCM 메시지를 보내려면 직접 부팅 모드를 사용 설정하면 됩니다. 예를 들어 잠긴 기기에서도 앱 사용자가 경보 알림을 받도록 할 수 있습니다.
이 사용 사례를 빌드할 때 일반적인 직접 부팅 모드 권장사항 및 제한사항을 확인하세요. 직접 부팅이 사용 설정된 메시지의 공개 상태를 고려해야 합니다. 기기에 액세스할 수 있는 모든 사용자는 사용자 인증 정보를 입력하지 않고도 이러한 메시지를 볼 수 있습니다.
기본 요건
- 기기가 직접 부팅 모드로 설정되어야 합니다.
- 기기에 최신 버전의 Google Play 서비스(19.0.54 이상)가 설치되어 있어야 합니다.
- 앱에서 FCM 메시지를 수신하기 위해 FCM SDK(
com.google.firebase:firebase-messaging
)를 사용해야 합니다.
앱에서 직접 부팅 모드 메시지 처리 사용 설정
앱 수준 Gradle 파일에서 FCM 직접 부팅 지원 라이브러리에 종속 항목을 추가합니다.
implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
앱 매니페스트에
android:directBootAware="true"
속성을 추가하여 앱의FirebaseMessagingService
가 직접 부팅을 인식하도록 합니다.<service android:name=".java.MyFirebaseMessagingService" android:exported="false" android:directBootAware="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
이 FirebaseMessagingService
가 직접 부팅 모드에서 실행되는지 확인하는 것이 중요합니다. 다음 요구사항을 사용하여 확인할 수 있습니다.
- 직접 부팅 모드에서 실행되는 동안 서비스가 사용자 인증 정보로 보호되는 스토리지에 액세스하면 안 됩니다.
- 직접 부팅 모드에서 실행되는 동안 서비스가 직접 부팅 인식으로 표시되지 않는
Activities
,BroadcastReceivers
또는 기타Services
와 같은 구성요소를 사용하려고 시도해서는 안 됩니다. - 서비스에서 사용하는 모든 라이브러리도 직접 부팅 모드에서 실행되는 동안 사용자 인증 정보로 보호되는 스토리지에 액세스하거나 directBootAware가 아닌 구성요소를 호출해서는 안 됩니다. 즉, 서비스에서 호출되는 앱에서 사용하는 라이브러리는 직접 부팅을 인식해야 하며, 그렇지 않은 경우 앱에서 라이브러리가 직접 부팅 모드에서 실행되는지 확인하고 해당 모드에서 호출하지 않아야 합니다. 예를 들어 Firebase SDK는 직접 부팅에서 작동하지만(직접 부팅 모드에서 비정상 종료되지 않고 앱에 포함될 수 있음) 많은 Firebase API는 직접 부팅 모드에서 호출되는 것을 지원하지 않습니다.
- 앱에서 커스텀
Application
을 사용하는 경우Application
도 직접 부팅을 인식해야 합니다(직접 부팅 모드에서 사용자 인증 정보로 보호되는 스토리지에 액세스할 수 없음).
직접 부팅이 사용 설정된 메시지 전송
HTTP v1 API를 사용하여 직접 부팅 모드의 기기로 메시지를 보낼 수 있습니다.
메시지 요청에는 요청 본문의 AndroidConfig
옵션에 "direct_boot_ok": true
키를 포함해야 합니다. 예를 들면 다음과 같습니다.
https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Content-Type:application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data": {
"score": "5x1",
"time": "15:10"
},
"android": {
"direct_boot_ok": true,
},
}