App Check를 사용하여 API 키 보호
Firebase 앱 체크는 정상적인 앱 이외의 소스에서 발생하는 트래픽을 차단하여 앱에서 Google Maps Platform으로의 호출을 보호합니다. Play Integrity와 같은 증명 제공업체의 토큰을 확인하여 이를 수행합니다. 앱을 앱 체크와 통합하면 악의적인 요청을 방지하여 승인되지 않은 API 호출에 대한 요금이 청구되지 않습니다.
앱 체크가 나에게 적합한가요?
대부분의 경우 앱 확인이 권장되지만 다음 경우에는 앱 확인이 필요하지 않거나 지원되지 않습니다.
- 원본 Places SDK를 사용하고 있습니다. App Check는 Places SDK (신규)에서만 지원됩니다.
- 비공개 또는 실험용 앱 앱에 공개적으로 액세스할 수 없는 경우 앱 확인이 필요하지 않습니다.
- 앱이 서버 간으로만 사용되는 경우 앱 확인은 필요하지 않습니다. 하지만 GMP와 통신하는 서버가 모바일 앱과 같은 공개 클라이언트에서 사용되는 경우 GMP 대신 App Check를 사용하여 해당 서버를 보호하는 것이 좋습니다.
- 앱 체크의 권장 증명 제공자는 증명 제공자가 보안이 취약하거나 신뢰할 수 없는 것으로 간주하는 기기에서는 작동하지 않습니다. 이러한 기기를 지원해야 하는 경우 맞춤 증명 서비스를 배포하면 됩니다. 자세한 내용은 안내를 참고하세요.
구현 단계 개요
대략적으로 앱을 앱 확인과 통합하는 단계는 다음과 같습니다.
- 앱에 Firebase를 추가합니다.
- 앱 체크 라이브러리를 추가하고 초기화합니다.
- 토큰 제공업체를 추가합니다.
- 디버깅을 사용 설정합니다.
- 앱 요청을 모니터링하고 시행 여부를 결정합니다.
App Check와 통합하면 Firebase 콘솔에서 백엔드 트래픽 측정항목을 확인할 수 있습니다. 이러한 측정항목은 유효한 앱 체크 토큰이 포함되었는지 여부에 따라 요청을 분류합니다. 자세한 내용은 Firebase 앱 체크 문서를 참고하세요.
대부분의 요청이 합법적인 소스에서 발생하고 사용자가 앱 체크 구현이 포함된 최신 버전의 앱으로 업데이트한 것이 확실하면 시행을 사용 설정할 수 있습니다. 적용이 사용 설정되면 앱 체크에서 유효한 앱 체크 토큰이 없는 모든 트래픽을 거부합니다.
앱 체크 통합을 계획할 때 고려사항
통합을 계획할 때 고려해야 할 사항은 다음과 같습니다.
- Google에서 권장하는 증명 제공업체인 Play Integrity에는 표준 API 사용 등급의 일일 호출 한도가 있습니다. 호출 한도에 관한 자세한 내용은 Google Play Integrity 개발자 문서의 설정 페이지를 참고하세요. - 맞춤 증명 제공업체를 사용할 수도 있지만 이는 고급 사용 사례입니다. 자세한 내용은 커스텀 앱 체크 제공자 구현을 참고하세요. 
- 
  앱 사용자는 시작 시 약간의 지연 시간을 경험하게 됩니다. 하지만 이후에는 주기적인 재증명이 백그라운드에서 이루어지므로 사용자에게 더 이상 지연 시간이 발생하지 않습니다. 시작 시 정확한 지연 시간은 선택한 증명 제공업체에 따라 달라집니다. 앱 체크 토큰이 유효한 시간 (수명 또는 TTL)에 따라 재증명의 빈도가 결정됩니다. 이 기간은 Firebase Console에서 구성할 수 있습니다. 재증명은 TTL의 약 절반이 경과하면 발생합니다. 자세한 내용은 증명 제공업체의 Firebase 문서를 참고하세요. 
앱을 앱 체크와 통합
기본 요건 및 요구사항
- 버전 4.1 이상의 Places SDK가 통합된 앱
- 앱의 SHA-256 지문입니다.
- 앱의 패키지 이름입니다.
- Cloud Console에서 앱의 소유자여야 합니다.
- Cloud 콘솔의 앱 프로젝트 ID가 필요합니다.
1단계: 앱에 Firebase 추가
Firebase 개발자 문서의 안내에 따라 앱에 Firebase를 추가합니다.
2단계: 앱 체크 라이브러리 추가 및 앱 체크 초기화
기본 증명 제공자인 Play Integrity 사용에 관한 자세한 내용은 Android에서 Play Integrity로 앱 체크 사용 시작하기를 참고하세요.
- 아직 하지 않았다면 Places SDK를 앱에 통합합니다.
- 다음으로 App Check 및 Places 클라이언트를 초기화합니다. - // Initialize App Check FirebaseApp.initializeApp(/* context= */ this); FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance()); // Initialize Places SDK Places.initializeWithNewPlacesApiEnabled(context, API_KEY); PlacesClient client = Places.createClient(context);. 
3단계: 토큰 제공자 추가
Places API를 초기화한 후 setPlacesAppCheckTokenProvider()를 호출하여 PlacesAppCheckTokenProvider를 설정합니다.
Places.initializeWithNewPlacesApiEnabled(context, API_KEY); Places.setPlacesAppCheckTokenProvider(new TokenProvider()); PlacesClient client = Places.createClient(context);.
다음은 토큰 가져오기 프로그램 인터페이스의 샘플 구현입니다.
/** Sample client implementation of App Check token fetcher interface. */ static class TokenProvider implements PlacesAppCheckTokenProvider { @Override public ListenableFuture<String> fetchAppCheckToken() { SettableFuture<String> future = SettableFuture.create(); FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener( appCheckToken -> { future.set(appCheckToken.getToken()); }) .addOnFailureListener( ex -> { future.setException(ex); }); return future; } }
4단계: 디버깅 사용 설정 (선택사항)
로컬에서 앱을 개발 및 테스트하거나 지속적 통합 (CI) 환경에서 앱을 실행하려면 디버그 비밀을 사용하여 유효한 앱 체크 토큰을 획득하는 앱의 디버그 빌드를 만들면 됩니다. 이렇게 하면 디버그 빌드에서 실제 증명 제공자를 사용하지 않아도 됩니다.
에뮬레이터 또는 테스트 기기에서 앱을 실행하려면 다음 단계를 따르세요.
- build.gradle파일에 앱 체크 라이브러리를 추가합니다.
- 디버그 빌드에서 디버그 제공자 팩토리를 사용하도록 앱 체크를 구성합니다.
- 앱을 실행하면 로컬 디버그 토큰이 생성됩니다. 이 토큰을 Firebase Console에 추가합니다.
- 자세한 내용과 안내는 앱 체크 문서를 참고하세요.
CI 환경에서 앱을 실행하려면 다음 단계를 따르세요.
- Firebase Console에서 디버그 토큰을 만들고 CI 시스템의 보안 키 저장소에 추가합니다.
- build.gradle파일에 앱 체크 라이브러리를 추가합니다.
- 디버그 토큰을 사용하도록 CI 빌드 변형을 구성합니다.
- 테스트 클래스에서 앱 체크 토큰이 필요한 코드를 DebugAppCheckTestHelper로 래핑합니다.
- 자세한 내용과 안내는 앱 체크 문서를 참고하세요.
5단계: 앱 요청 모니터링 및 시정 조치 결정
시행을 시작하기 전에 앱의 적법한 사용자를 방해하지 않는지 확인해야 합니다. 이렇게 하려면 앱 체크 측정항목 화면을 방문하여 앱 트래픽 중 인증된 트래픽, 오래된 트래픽, 불법 트래픽의 비율을 확인하세요. 대부분의 트래픽이 인증된 것으로 확인되면 시행을 사용 설정할 수 있습니다.
자세한 내용과 안내는 Firebase 앱 체크 문서를 참고하세요.