如果您的 Android 應用程式使用 Firebase ML 的其中一個雲端 API,請在正式環境中啟動應用程式前,採取額外步驟防範未經授權的 API 存取活動。
對於正式版應用程式,您必須確保只有經過驗證的用戶端才能存取雲端服務。(請注意,只有未解鎖的裝置可以使用上述方法進行驗證)。
接著,您將建立僅供偵錯的 API 金鑰,方便您在測試和開發期間使用。
1. 透過 Firebase 註冊正式版應用程式
首先,請透過 Firebase 註冊正式版應用程式。
請確認您已取得應用程式的 SHA-1 簽名。如要瞭解如何操作,請參閱「驗證用戶端」一文。
前往 Firebase 控制台中的 「專案設定」,然後選取「Settings」分頁標籤。
向下捲動至「你的應用程式」資訊卡,然後選取 Android 應用程式。
將應用程式的 SHA-1 簽名新增至應用程式資訊。
2. 限制 API 金鑰的範圍
接下來,請設定現有的 API 金鑰,禁止存取 Cloud Vision API:
針對清單中的每個現有 API 金鑰,開啟編輯檢視畫面。
在「API 限制」區段,選取「限制金鑰」,然後將您要 API 金鑰可存取的所有 API 加入清單中。請務必不要包含 Cloud Vision API。
設定 API 金鑰的 API 限制時,您會明確宣告金鑰可存取的 API。根據預設,如果「API 限制」專區已選取「Don't restrict key」,則可使用 API 金鑰存取專案已啟用的任何 API。
現有的 API 金鑰將無法授予雲端 ML 服務存取權,但每個金鑰仍可繼續支援您已加入 API 限制清單的任何 API。
請注意,如果日後啟用其他 API,您必須將這些 API 加入適用 API 金鑰的 API 限制清單。
3. 建立及使用僅限偵錯的 API 金鑰
最後,請建立新的 API 金鑰,僅用於開發作業。Firebase ML 可以在無法驗證應用程式的環境中 (例如在模擬器上執行時) 使用此 API 金鑰存取 Google Cloud 服務。
建立用於開發的新 API 金鑰:
為確保新的偵錯 API 金鑰不會與發布的應用程式外洩,請在僅用於偵錯版本的 Android 資訊清單檔案中指定偵錯 API 金鑰:
如果您還沒有偵錯資訊清單,請依序點選「File」>「New」>「Other」>「Android Manifest File」,然後從目標來源集選取
debug
,即可建立資訊清單。在偵錯資訊清單中加入以下宣告:
<application> <meta-data android:name="com.firebase.ml.cloud.ApiKeyForDebug" android:value="your-debug-api-key" /> </application>
在您的應用程式中,將 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 功能時,準備應用程式以便啟動,請參閱啟動檢查清單。