注意:針對線上應用程式和遊戲的授權機制,建議使用 Play Integrity API。瞭解詳情

授權總覽

「Google Play 授權」是一種網路式服務,可讓應用程式查詢信任的 Google Play 授權伺服器,判斷該應用程式是否已授權給目前的裝置使用者。授權服務是憑藉 Google Play 授權伺服器的功能,來判斷指定使用者是否擁有使用特定應用程式的授權。如果該使用者在記錄中是該應用程式的購買者,Google Play 就會認定他已獲得授權。

您的應用程式向 Google Play 用戶端應用程式代管的服務提出要求時,要求就會開始。接著,Google Play 應用程式會向授權伺服器傳送要求,並接收結果。Google Play 應用程式會將結果傳送至您的應用程式,系統可以視需要允許或禁止進一步使用該應用程式。

注意:如果應用程式的某個版本處於封閉或公開測試群組,凡是獲得授權下載及安裝該應用程式的使用者,系統都會認定為該應用程式的授權使用者。詳情請參閱透過測試群組在初期向使用者取得寶貴的意見回饋

圖 1. 您的應用程式會透過授權驗證庫和負責聯繫 Google Play 伺服器的 Google Play 用戶端,啟動授權檢查程序。

注意:以前您可以透過上傳未發布的「草稿」版本來測試應用程式,現在系統不再支援這項功能。您必須改為將應用程式發布到封閉或公開測試群組。詳情請參閱不再支援草稿應用程式

為正確識別使用者並判定授權狀態,授權伺服器需要關於應用程式和使用者的資訊:您的應用程式和 Google Play 用戶端會共同彙整資訊,再由 Google Play 用戶端將資訊傳送至伺服器。

為協助您在應用程式中新增授權驗證機制,Android SDK 提供了一組可下載的程式庫原始碼,您可以將其納入自己的應用程式專案中:Google 市場授權套件。授權驗證庫 (LVL) 是一種程式庫,您可新增到自家應用程式中,用來聯繫 Google Play 授權服務,處理所有與授權相關的通訊作業。在應用程式中新增 LVL 後,應用程式只要呼叫方法並導入可接收狀態回應的回呼,就能判定目前使用者的授權狀態。

您的應用程式不會直接向授權伺服器提出查詢,而會改為透過遠端處理序間通訊 (IPC) 呼叫 Google Play,啟動授權要求。在授權要求中:

  • 您的應用程式會提供:本身的套件名稱、一個 Nonce (稍後用來驗證伺服器傳來的任何回應),以及一個回呼 (回應可以透過這個回呼以非同步方式回傳)。
  • Google Play 用戶端會收集使用者與裝置的必要相關資訊,例如裝置的主要 Google 帳戶使用者名稱、IMSI 和其他資訊。接著 Google Play 用戶端會代表您的應用程式將授權檢查要求傳送到伺服器。
  • Google Play 伺服器會使用所有可用資訊來評估要求,嘗試建立使用者的身分,盡可能達到可靠的程度。接著,伺服器會根據您應用程式的購買記錄檢查使用者身分,並傳回授權回應,讓 Google Play 用戶端透過處理序間通訊 (IPC) 回呼傳回到您的應用程式。

您可以選擇要讓應用程式檢查授權的時機與頻率,也能完全掌控系統處理回應、驗證已登入的回應資料,以及強制執行存取權控管的方式。

請注意,在授權檢查期間,您的應用程式不會管理任何網路連線,也不會使用 Android 平台中的任何授權相關 API。

授權回應安全無虞

為確保各授權查詢的完整性,伺服器會使用 RSA 金鑰組簽署授權回應資料,這個 RSA 金鑰組僅限在 Google Play 伺服器與您之間共用。

授權服務會為各個應用程式產生單一授權金鑰組,並在應用程式的「服務與 API」頁面 (位於 Play 管理中心) 中顯示公開金鑰。您必須從 Play 管理中心複製公開金鑰,然後將其嵌入應用程式原始碼中。伺服器會在內部保留私密金鑰,並針對您透過該帳戶發布的應用程式,使用該金鑰簽署授權回應。

應用程式收到已簽署的回應時,會使用嵌入的公開金鑰來驗證資料。在授權服務中使用公開金鑰加密編譯,可讓應用程式偵測出遭到竄改或假冒身分的回應。

授權驗證庫

Android SDK 提供名為「Google 市場授權」套件的可下載套件,其中包含授權驗證庫 (LVL)。LVL 可大幅簡化在應用程式中新增授權驗證機制的程序,並確保應用程式的實作更安全、更可靠。LVL 提供的內部類別會處理授權查詢的大部分標準作業,例如聯絡 Google Play 用戶端以啟動授權要求,還有驗證及確認回應有效性。此外,LVL 還會提供可讓您輕鬆插入自訂程式碼的介面,以便定義授權政策並視需要由您的應用程式管理存取權。主要 LVL 介面如下:

Policy
您的實作會判定是否允許存取該應用程式,判斷依據是從伺服器收到的授權回應,以及任何其他可用資料 (例如來自後端伺服器並與您的應用程式相關聯的資料)。實作可評估授權回應的各種欄位,並視需要套用其他限制。此外,實作也可讓您管理造成錯誤 (例如網路錯誤) 的授權檢查的處理方式。
LicenseCheckerCallback
您的實作會根據 Policy 物件對於授權回應的處理結果,管理存取該應用程式的權限。您的實作可以用任何必要方式管理存取權,包括在 UI 中顯示授權結果,或是將使用者導向購買該應用程式的頁面 (如果目前未獲授權)。

為協助您開始使用 Policy,LVL 提供兩個完整的 Policy 實作,可以不經修改直接使用,也可以配合您的需求進行調整:

ServerManagedPolicy
一種靈活的 Policy,可以在裝置離線的情況下 (例如使用者在飛機上),使用授權伺服器提供的設定來管理回應快取和該應用程式的存取權。我們強烈建議大多數應用程式都採用 ServerManagedPolicy
StrictPolicy
一種限制性的 Policy,不會快取任何回應資料,而且「只有」在伺服器傳回已授權回應時才會允許應用程式存取

LVL 為 Android SDK 的可下載套件。套件包含 LVL 本身和應用程式範例,範例中會呈現授權驗證庫該如何與您的應用程式整合,以及您的應用程式該如何管理回應資料、UI 互動和錯誤情形。

系統會以 Android「檔案庫專案」的形式提供 LVL 原始碼,也就是說,您只需要管理一組驗證庫原始碼,就能分享給多個應用程式。您也可以透過 SDK 取得完整的測試環境,這樣即使您沒有實體裝置的存取權,也能在發布之前先在應用程式內開發及測試授權實作。

相關規定和限制

「Google Play 授權」的設計宗旨,是要讓您將授權控制項套用在透過 Google Play 發布的應用程式上。如果您要控管存取權的應用程式並非透過 Google Play 發布,或者該應用程式適用的裝置不提供 Google Play 用戶端,就不屬於這項服務的服務範圍。

在應用程式中導入授權機制時,請注意下列幾點:

  • 應用程式的執行環境需符合以下條件,才能使用該服務:Google Play 用戶端安裝在應用程式的主機裝置上,而且該裝置運行的是 Android 1.5 (API 級別 3) 以上版本。
  • 如要完成授權檢查,授權伺服器必須可透過網路存取。如果是沒有網路連線的情況,您可以導入授權快取行為來管理存取您應用程式的權限。
  • 應用程式授權控制項的安全性,最終取決於實作本身的設計。伺服器會提供讓您安全檢查授權所需的基礎,但實際執行及處理授權事項,則完全由您掌控。只要遵循下列文件中的最佳做法,就能確保實作安全無虞。
  • 為應用程式新增授權,並不會影響應用程式在沒有提供 Google Play 的裝置上運作的方式。
  • 您可以為免費應用程式導入授權控制項,但前提是必須使用該服務提供 APK 擴充檔案

取代複製保護

Google Play 授權服務是一項靈活、安全的機制,可控管存取您應用程式的權限。該服務能有效取代以往 Google Play 上提供的複製保護機制 (不再支援),為您的應用程式拓展發行範圍。

授權機制能讓您步入以授權為基礎的模型,此模型能在擁有 Google Play 存取權的所有裝置上執行。存取權不會與主機裝置的特性綁定,而是會綁定您在 Google Play 上的應用程式 (透過該應用程式的公開金鑰) 以及您定義的授權政策。在任何裝置與任何儲存空間 (包括 SD 卡) 都能安裝並管理您的應用程式。

雖然沒有授權機制可完全防止所有未經授權的使用,但授權服務可讓您控管一般使用方式中大部分類型的存取,涵蓋所有相容裝置,已鎖定或未鎖定都包含在內。

如要開始將應用程式授權機制加入到您的應用程式,請繼續進行設定授權