Android 앱이 Firebase ML의 클라우드 API 중 하나를 사용하는 경우 프로덕션 환경에서 앱을 시작하기 전에 승인되지 않은 API 액세스를 방지하기 위한 몇 가지 추가 단계를 수행해야 합니다.
프로덕션 앱의 경우 인증된 클라이언트만 클라우드 서비스에 액세스할 수 있도록 합니다. (루팅되지 않은 장치만 설명된 방법을 사용하여 인증할 수 있습니다.)
그런 다음 테스트 및 개발 중에 편의를 위해 사용할 수 있는 디버그 전용 API 키를 생성합니다.
1. Firebase에 프로덕션 앱 등록
먼저 Firebase에 프로덕션 앱을 등록합니다.
앱의 SHA-1 서명이 있는지 확인하십시오. 방법을 알아 보려면 클라이언트 인증을 참조하세요 .
Firebase 콘솔에서
프로젝트 설정 으로 이동한 다음 설정 탭을 선택합니다.내 앱 카드까지 아래로 스크롤한 다음 Android 앱을 선택합니다.
앱 정보에 앱의 SHA-1 서명을 추가합니다.
2. API 키 범위 제한
다음으로 Cloud Vision API에 대한 액세스를 허용하지 않도록 기존 API 키를 구성합니다.
Google Cloud Console의 자격 증명 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.
목록의 각 기존 API 키에 대해 편집 보기를 엽니다.
API 제한 섹션에서 키 제한 을 선택한 다음 API 키로 액세스할 모든 API를 목록에 추가합니다. Cloud Vision API를 포함 하지 않도록 합니다.
API 키의 API 제한사항 을 구성할 때 키가 액세스할 수 있는 API를 명시적으로 선언합니다. 기본적으로 API 제한 섹션에서 키 제한 안 함을 선택하면 API 키를 사용하여 프로젝트에 대해 활성화된 모든 API에 액세스할 수 있습니다.
이제 기존 API 키는 클라우드 ML 서비스에 대한 액세스 권한을 부여하지 않지만 각 키는 API 제한 목록에 추가한 모든 API에 대해 계속 작동합니다.
나중에 추가 API를 활성화하는 경우 해당 API 키에 대한 API 제한 목록에 추가해야 합니다.
3. 디버그 전용 API 키 생성 및 사용
마지막으로 개발에만 사용할 새 API 키를 만듭니다. Firebase ML은 이 API 키를 사용하여 에뮬레이터에서 실행할 때와 같이 앱 인증이 불가능한 환경에서 Google Cloud 서비스에 액세스할 수 있습니다.
개발에 사용할 새 API 키를 만듭니다.
Google Cloud Console의 자격 증명 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.
신임 정보 작성 > API 키 를 클릭하고 새 API 키를 기록해 두십시오. 이 키는 인증되지 않은 앱의 API 액세스를 허용하므로 이 키를 기밀로 유지하십시오 .
출시된 앱에서 새 디버그 API 키가 유출되지 않도록 하려면 디버그 빌드에만 사용되는 Android 매니페스트 파일에 디버그 API 키를 지정합니다.
디버그 매니페스트가 아직 없는 경우 파일 > 새로 만들기 > 기타 > Android 매니페스트 파일 을 클릭하고 대상 소스 세트에서
debug
를 선택하여 만듭니다.디버그 매니페스트에서 다음 선언을 추가합니다.
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="your-debug-api-key" /> </application>
앱에서 인증서 지문 일치를 사용하여 프로덕션에서 클라이언트를 인증하고 디버그 빌드에서만 API 키(디버그 키)를 사용하도록 Firebase ML을 구성합니다.
Kotlin+KTX
val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder() if (!BuildConfig.DEBUG) { // Requires physical, non-rooted device: optionsBuilder.enforceCertFingerprintMatch() } // Set other options. For example: optionsBuilder.setConfidenceThreshold(0.8f) // ... // And lastly: val options = optionsBuilder.build() FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)
Java
FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder = new FirebaseVisionCloudImageLabelerOptions.Builder(); if (!BuildConfig.DEBUG) { // Requires physical, non-rooted device: optionsBuilder.enforceCertFingerprintMatch(); } // Set other options. For example: optionsBuilder.setConfidenceThreshold(0.8f); // ... // And lastly: FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build(); FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);
다음 단계
다른 Firebase 기능을 사용할 때 앱 실행 준비에 대한 정보는 실행 체크리스트 를 참조하세요.