Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

保護您的Firebase ML Android應用程序的雲憑據

如果您的Android應用使用Firebase ML的一種雲API,則在正式投入生產之前,您應該採取一些其他措施來防止未經授權的API訪問。

對於生產應用程序,您將確保只有經過身份驗證的客戶端才能訪問云服務。 (請注意,只有非root用戶的設備才能使用所述方法進行身份驗證。)

然後,您將創建僅調試API密鑰,可在測試和開發過程中使用該密鑰以方便使用。

1.向Firebase註冊生產應用程序

首先,向Firebase註冊您的生產應用程序。

最快的方法是將Firebase項目與Google Play項目關聯。您可以從Firebase控制台中項目設置的“集成”部分執行此操作。

鏈接項目時,生產應用程序的SHA-1簽名將導入到Firebase項目中,您可以在“設置”頁面上進行確認。請注意,將Firebase和Google Play項目鏈接起來,還將使Firebase可以訪問其他Google Play數據(包括崩潰和收入統計信息),而Google Play可以訪問Firebase數據(包括分析數據)。

另外,如果您不想在Firebase和Google Play項目之間共享數據,則可以在“設置”頁面上自行指定應用程序的SHA-1簽名。請參閱對客戶端進行身份驗證以了解如何獲取應用的SHA-1簽名。

2.限制API密鑰的範圍

接下來,配置您現有的API密鑰以禁止訪問Cloud Vision API:

  1. 打開Google Cloud Console的“憑據”頁面。

  2. 對於列表中的每個API密鑰,打開編輯視圖,然後在“密鑰限制”部分中,將Cloud Vision API之外的所有可用API添加到列表中。

3.創建和使用僅調試API密鑰

最後,創建一個僅用於開發的新API密鑰。 Firebase ML可以使用此API密鑰在無法進行應用程序身份驗證的環境中(例如在模擬器上運行時)訪問Google Cloud服務。

  1. 創建一個新的API密鑰以用於開發:

    1. 打開Google Cloud Console的“憑據”頁面。
    2. 單擊創建憑證> API密鑰,並記下新的API密鑰。此密鑰允許未經身份驗證的應用訪問API,因此請對此密鑰進行保密
  2. 為了確保新的調試API密鑰不會與您發布的應用程序一起洩漏,請在僅用於調試版本的Android清單文件中指定調試API密鑰:

    1. 如果您還沒有調試清單,請通過單擊文件>新建>其他> Android清單文件並從目標源集中選擇debug來創建一個清單

    2. 在調試清單中,添加以下聲明:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. 在您的應用中,將Firebase ML配置為使用證書指紋匹配來在生產中對客戶端進行身份驗證,並僅在調試版本中使用API​​密鑰(調試密鑰):

    爪哇

    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);

    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)

下一步

有關使用其他Firebase功能時準備啟動應用程序的信息,請參閱啟動清單