改善 Android 13 以上版本裝置的判定結果

我們最近宣布強化 Play Integrity API 判定結果,提升速度、抗攻擊能力和使用者隱私,並進行其他安全性改善。

異動內容摘要

本文稍後會詳細說明異動內容和常見問題。2025 年 5 月的判定結果異動如下:

功能 異動內容 預估影響* 哪些裝置
影響所有提出 Play Integrity API 要求的開發人員
裝置判定結果回應:meets-device-integrity 必須有採用專屬硬體的正面驗證開機程序判定結果 影響極小,因為 Play Integrity API 已在 Android 13 以上版本的裝置上使用硬體支援的安全信號 (約 0.4%) Android 13 以上版本
應用程式完整性回應:應用程式辨識判定結果 不變 影響極小,這會反映裝置判定結果的變化 (約 0.4%) Android 13 以上版本
帳戶詳細資料回應:Play 授權判定結果 提出要求的應用程式必須透過 Google Play 安裝或更新 授權回覆略微減少 (~2.5%) Android 6 以上版本
僅影響 Play 管理中心開發人員和使用選用功能的 Play SDK 管理中心開發人員的異動
裝置判定結果回應:meets-basic-integrity 必須通過 Android 平台金鑰認證,但啟動狀態可以是已驗證或未驗證 基本回覆略微減少 (~0.4%) Android 13 以上版本
裝置判定結果回應:meets-strong-integrity 過去一年內必須有安全性更新 強烈反應減少 (~14.5%) Android 13 以上版本
所有選用信號 (裝置屬性除外)** 提出要求的應用程式必須透過 Google Play 安裝或更新 包含選用信號的回應百分比下降 (~7%) Android 13 以上版本

*上述所有預估影響百分比均以平均值為依據,視安裝數而定,不同應用程式的變化幅度可能會有所增減。

**選用信號 (裝置屬性除外) 包括: meets-basic-integrity、meets-strong-integrity、近期裝置活動、 裝置記憶 (Beta 版)、Play 安全防護狀態和應用程式存取風險。

常見問題

總覽

什麼是 Play Integrity API?

Play Integrity API 可取得裝置、應用程式和使用者的相關資訊,協助您評估使用者應用程式環境是否值得信任,以便偵測及因應潛在的濫用行為和攻擊。

Play Integrity API 提供哪些信號?

Play Integrity API 包含要求應用程式的身分、要求應用程式是否由 Google Play 安裝,以及裝置是否為正版且通過認證的 Android 裝置。系統預設會提供這些信號。您可以在應用程式的後端伺服器上讀取這些信號,並決定應用程式是否應回應,以及如何回應。Google Play 開發人員可以選擇加入在 Play 安裝中接收其他信號,查看更多資訊。

什麼是 Android 平台金鑰認證?

Android 平台金鑰認證可讓應用程式驗證裝置狀態,並取得採用專屬硬體支援的開機完整性強烈信號。這項功能仰賴 Google 在裝置採用專屬硬體支援的 KeyStore 中佈建的金鑰。Play Integrity API 已在部分裝置上使用金鑰認證,取得硬體支援的安全信號,現在則會在所有搭載 Android 13 以上版本的裝置上,進一步整合這些信號。

判定結果變更

Android 13 以上版本裝置的 Play Integrity API 判定結果有哪些異動?

Play Integrity API 現在需要採用專屬硬體支援的安全信號,才能做出所有完整性判定:

  • meets-device-integrity 裝置辨識判定結果,代表執行應用程式的裝置是正版且經過認證的 Android 裝置。這項判定結果會要求鎖定裝置系統啟動載入程式,且載入的 Android 作業系統必須是經過認證的裝置製造商映像檔。
  • meets-strong-integrity 裝置辨識判定結果,代表裝置是正版且經過認證的 Android 裝置,並已安裝最新安全性更新。這項判定結果需要 meets-device-integrity,以及裝置所有分區在過去一年的安全性更新,包括 Android 作業系統分區修補程式和供應商分區修補程式。這項條件日後可能會有變動。
  • meets-basic-integrity 裝置辨識判定結果,代表檢查是在實體 Android 裝置上進行。裝置的系統啟動載入程式可以鎖定或解鎖,啟動狀態可以是已驗證或未驗證。如果裝置未經認證,Google 無法提供任何安全性、隱私權或應用程式相容性保證,也無法保證裝置不會做為 Proxy (例如 Android 虛擬執行個體)。這也代表已解鎖的裝置只要通過金鑰認證,就符合傳回 meets-basic-integrity 的條件。

這些異動不會影響 Play 遊戲電腦版的 Play Integrity API,該 API 會繼續傳回 meets-virtual-integrity。

為什麼 Android 13 以上版本裝置的 Play Integrity API 判定結果有所變更?

在 Android 12 以下版本中,Play Integrity API 部分使用採用專屬硬體支援的安全信號。在 Android 13 以上版本中,Play Integrity API 判定結果必須採用專屬硬體安全機制,因此更能抵禦攻擊者、提升應用程式效能,並加強保護使用者隱私。在搭載 Android 13 以上版本的裝置上,開發人員可預期下列改善:

  • 在 Google 伺服器上產生預設判定結果時,需要收集和評估的裝置信號減少約 90%。選用信號則仍需收集額外信號。
  • 在最糟情況下,標準要求的判定延遲時間最多可縮短 80%,而所有傳統要求取得預設判定的延遲時間最多可縮短 80%。選用信號可能會增加延遲時間。
  • 為所有具備金鑰認證功能的 Android 板型規格提供一致的可靠性和支援,包括行動裝置、平板電腦、摺疊式裝置、電視、汽車、Wear OS 和 ChromeOS。
  • 裝置辨識判定結果中的每個裝置標籤 (meets-strong-integrity、meets-device-integrity 和 meets-basic-integrity) 之間有更明顯的差異。

Play 遊戲電腦版的 Play Integrity API 判定結果不會改變,Android 12 以下版本和 Android 13 以上版本都一樣。

如何更新應用程式的後端邏輯,讓完整性判定結果考量 Android SDK 版本?

如要根據 Android SDK 版本,在應用程式的後端伺服器上使用不同邏輯,可以使用判定結果中的新裝置屬性欄位。以下是操作範例:

Kotlin

val deviceIntegrity =
  JSONObject(payload).getJSONObject("deviceIntegrity")
val sdkVersion =
  if (deviceIntegrity.has("deviceAttributes")) {
    deviceIntegrity.getJSONObject("deviceAttributes").getInt("sdkVersion")
  } else {
    0
  }

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

Java

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
int sdkVersion =
  deviceIntegrity.has("deviceAttributes")
    ? deviceIntegrity.getJSONArray("deviceAttributes").getInt("sdkVersion")
    : 0;

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

如何跨所有 Android SDK 版本使用舊的 meets-strong-integrity 標籤定義?

如要達成這個目標,請更新應用程式的後端邏輯,在 Android 13 之前的裝置上使用 meets-strong-integrity,在 Android 13 以上版本的裝置上使用 meets-device-integrity,並在判定結果中使用包含 Android SDK 版本的新裝置屬性欄位。以下是操作範例:

Kotlin

val deviceRecognitionVerdict =
  if (deviceIntegrity.has("deviceRecognitionVerdict")) {
    deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
  } else {
    ""
  }

val deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

Java

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
String deviceRecognitionVerdict =
  deviceIntegrity.has("deviceRecognitionVerdict")
    ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
    : "";

String deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

由於這也是硬體支援的信號,因此在搭載 Android 13 以上版本的裝置上,裝置屬性欄位最為可靠。

還有哪些裁決異動?

我們持續投入資源,提升 Play Integrity API 現有信號的可靠性,並定期推出新功能,協助開發人員因應新興威脅和新用途。我們還對判定結果做了其他改善,包括:

  • Play 授權回應:Play Integrity API 現在一律要求提出要求的應用程式必須由 Google Play 安裝或更新,才能傳回 Play 授權回應。這項修正可解決一些極端案例,讓開發人員更容易解讀回應。
  • 選用信號可用性:開發人員透過 Google Play 管理中心或 Play SDK 管理中心取得的所有選用信號 (裝置屬性除外),現在都要求提出要求的應用程式必須由 Google Play 在 Android 13 以上版本安裝或更新。包括 meets-strong-integrity、meets-basic-integrity、近期裝置活動、裝置記憶 (Beta 版)、應用程式存取風險判定結果,以及 Play 安全防護判定結果。我們將所有其他 Play Integrity API 要求標準化,以接收裝置檢查 (僅附有 meets-device-integrity 標籤)、安裝程式檢查、應用程式完整性檢查和裝置屬性 (如已啟用)。
  • 特定裝置的判定結果異動:Play Integrity API 會在更多情況下自動變更裝置判定結果,以便在所有 Android SDK 版本中提早保護應用程式,例如有證據顯示活動過多或金鑰遭入侵。包括在無法使用硬體支援信號時,Play 可改用其他信號,為使用者產生暫時裝置判定結果。建議開發人員使用應用程式內 Play 修正對話方塊,或引導使用者前往 Play 商店應用程式修正完整性判定結果問題。日後,這些對話方塊將處理更多情境,並包含使用者專屬指引,根據特定裝置或帳戶告知需要修正的問題。

如何回報完整性判定結果的問題?

如要回報 Play Integrity API 回應的問題 (無論是舊版或新版判定結果),請按照支援頁面的指示操作。

可用性

Play Integrity API 需要什麼才能運作?

Play Integrity API 要求裝置必須安裝 Google Play 商店和 Google Play 服務,包括 Android 裝置和 Google Play 遊戲電腦版。傳統要求需要 Android 4.4 (API 級別 19) 以上版本,標準要求則需要 Android 5.0 (API 級別 21) 以上版本。在搭載 Android 13 (API 級別 33) 以上版本的裝置上,Play Integrity API 現在將在所有 Android 板型規格 (包括手機、平板電腦、摺疊式裝置、電視、Auto、Wear OS 和 ChromeOS) 上提供相同等級的可靠性和支援,並提供金鑰認證。

為什麼 Play Integrity API 會對不同裝置做出不同判定?

Play Integrity API 提供多種裝置判定結果,可滿足開發人員的不同用途和風險承受度,並可採用分級違規處置策略。舉例來說,如果應用程式和裝置較為可信,開發人員可能會簡化使用者驗證步驟;反之,如果裝置不明,開發人員可能會要求額外的使用者驗證,才能執行受保護或機密的動作。這種做法可有效減少濫用和攻擊行為。

什麼是通過認證的 Android 裝置?

通過認證的 Android 裝置 (也稱為通過 Play 安全防護認證的 Android 裝置) 執行可預測的軟體,並通過數百項 Google 相容性測試,遵循 Android 安全性和權限模型,且隨附 Google Play 安全防護套件的惡意軟體防護功能。如果 Play Integrity API 能夠驗證裝置是正版且經過認證的 Android 裝置,就會在裝置辨識判定結果中傳回 meets-device-integrity 回應。

什麼是 meets-basic-integrity 裝置?

Play Integrity API 也會在裝置判定結果中傳回選用回應 meets-basic-integrity。如果裝置只傳回 meets-basic-integrity 判定結果,而沒有 meets-device-integrity 或 meets-strong-integrity,表示 Android 作業系統無法驗證,但有金鑰認證。這表示檢查是在搭載 Android 的實體裝置上進行,但 Google 無法保證裝置的安全性、隱私權或應用程式相容性,也無法保證裝置不會做為 Proxy (例如 Android 的虛擬個體)。開發人員可以根據用途和風險容忍度,決定應用程式在這些裝置上的執行方式。

所有開發人員都能使用 Play Integrity API 嗎?

可以,任何 Android 開發人員都可以提出 Play Integrity API 要求,接收預設完整性判定結果。無論發布管道為何,用量上限均為每天 1 萬次要求。除了在任何其他發行管道外,開發人員也必須在 Google Play 上架應用程式,才能申請調高每日配額。

所有開發人員都能使用 Android 平台金鑰認證嗎?

可以,任何 Android 開發人員都可以使用 Android 平台金鑰認證取得金鑰認證記錄,並使用 Google 認證根金鑰的公開憑證進行驗證。Play Integrity API 可讓開發人員享有金鑰認證和額外功能的好處,不必自行整合金鑰認證,省去繁複作業。

強制執行

開發人員如何使用 Play Integrity API 判定結果?

開發人員可自行決定是否要使用 Play Integrity API 判定結果,以及使用方式。部分開發人員會收集信號,用於內部反濫用分析,其他開發人員則會根據判定結果,決定應用程式的行為。舉例來說,開發人員可以決定要求信任度較低的裝置在建立帳戶時執行額外的使用者驗證步驟,或決定信任度較低的裝置應在同一個多人遊戲伺服器上一起玩遊戲。

Play Integrity API 會封鎖使用者或裝置嗎?

不會,Play Integrity API 本身不會封鎖任何功能。這項選用開發人員服務會提供信號,開發人員可選擇如何根據這些信號採取行動。

如果使用者的裝置未通過 Play Integrity API 裝置檢查,該怎麼辦?

使用者可以前往裝置上的 Play 商店應用程式,開啟「設定」選單,選取「關於」,然後查看「Play 安全防護認證」。如果裝置的 Play 安全防護認證有問題,使用者可以按下按鈕,嘗試修正問題。這項操作會重新整理裝置的認證狀態,並提供具體指引,說明需要修正的問題。