如果 Android 應用程式使用 Firebase ML 的雲端 API,請先採取幾個額外步驟來防範未經授權的 API 存取活動,再於正式環境中啟動應用程式。
如果是實際工作環境的應用程式,請確保只有經過驗證的用戶端可以存取雲端服務。(請注意,只有未解鎖的裝置才能使用上述方法進行驗證)。
接著,您將建立僅供偵錯的 API 金鑰,方便在測試和開發期間使用。
1. 向 Firebase 註冊正式版應用程式
首先,請向 Firebase 註冊正式版應用程式。
請確認您已取得應用程式的 SHA-1 簽章。如要瞭解如何驗證用戶端,請參閱「驗證用戶端」。
前往 Firebase 控制台的「專案設定」 ,然後選取「設定」分頁。
向下捲動至「你的應用程式」資訊卡,然後選取 Android 應用程式。
在應用程式資訊中新增應用程式的 SHA-1 簽章。
2. 限制 API 金鑰的範圍
接著,設定現有的 API 金鑰,禁止存取 Cloud Vision API:
針對清單中的每個現有 API 金鑰,開啟編輯檢視畫面。
在「API 限制」部分,選取「限制金鑰」,然後將您希望 API 金鑰可存取的所有 API 新增至清單。請務必不要加入 Cloud Vision API。
設定 API 金鑰的 API 限制時,您會明確聲明金鑰可存取的 API。根據預設,如果「API 限制」部分選取「不要限制金鑰」,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 使用憑證指紋比對功能,在正式版中驗證用戶端,並僅在偵錯版本中使用 API 金鑰 (偵錯金鑰):
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)
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 功能時準備發布應用程式,請參閱發布檢查清單。