[譯] 輕鬆釋出私有 App

Hydroph發表於2019-01-19

[譯] 輕鬆釋出私有 App

來自插圖 Virginia Poltrack

不論你的團隊擁有 5 個還是 100 個 App,你總能找到幫你管理 Play Store 列表的自動化工具。Google Play 允許你通過其開發者 API 來管理你的 Play Store 列表、打包好的 APK 等。2017 年 1 月的時候,Google 從 Twitter 收購了名為 Fabric 的開發者套件,其中包含了可以自動化截圖、管理測試版部署、簽名並將 App 推送到 Play Store 的 fastlane

除此之外,私有 App 釋出 API 允許擁有管理許可權的 Google Play 使用者在跳過 最低版本檢查 的情況下建立併發布私有的 App。Managed Google Play 是為企業版 Android 使用者提供私有應用程式支援的應用商店。私有 App 只會被分發給內部使用者而不會被大眾獲取。私有 App 的部署可以在被建立後的幾分鐘內完成。Jan Piotrowskifastlane 提出的這個 pull request,讓零程式碼部署 App 成為可能。對此特性的請求歷史可以在 這裡 看到。如果想要更多瞭解 Managed Google Play 和 Google Play 專案,請看看這篇 部落格

這為什麼很重要:私有 App 釋出 API 或者 fastlane 大大簡化了遷移到 Managed Google Play 的流程,並且可以方便地被整合到 CI 工具中。

配置私有 App 功能

重要:在建立用於除錯或產品的 keystore 時,請確保使用最佳的 app 簽名方式。千萬別丟失您用於生產的 keystore!因為一旦你將它應用於 Google Play 上的某一個 App ID(包括私有 App),你將永遠不能在不建立新的應用程式列表及修改其 App ID 的情況下更換 keystore。

推薦:利用 Google Play App Signing 來為你的 APK 檔案簽名。這是保管的 keystore 的一個好方法。你可以在 這裡 看到此方法的細節。

重要:在 Google Play 上的所有 App(包括私有 App)必須具有一個唯一的且不可重用的 App ID。

在釋出你的私有 App 之前,你只需要三步。

跟著這篇 指導說明 進行如下三步:

  1. 在 Cloud API 控制檯中啟用 Google Play 的 私有 App 釋出 API;
  2. 建立一個服務賬戶,並下載其 JSON 格式的私鑰;
  3. 啟用私有 App 功能。

配置 fastlane

  • 請閱讀這篇 文件 來安裝 fastlane 。其中包含了 Managed Google Play 支援。

啟用私有 App — 獲取你的開發者賬戶 ID

這篇 指南 將告訴你如何建立一個需要通過 OAuth 回撥來獲取開發者賬戶 ID 的私有 App。有兩種方法來啟用私有 App 功能:使用 fastlane 或者使用 API。下面將向你展示如何使用這兩種方法並比較其複雜程度:

使用 fastlane — 非常簡單

> fastlane run get_managed_play_store_publishing_rights
複製程式碼

樣例輸出:

[13:20:46]: To obtain publishing rights for custom apps on Managed Play Store, open the following URL and log in:

[13:20:46]: https://play.google.com/apps/publish/delegatePrivateApp?service_account=SERVICE-ACCOUNT-EMAIL.iam.gserviceaccount.com&continueUrl=https://fastlane.github.io/managed_google_play-callback/callback.html

[13:20:46]: ([Cmd/Ctrl] + [Left click] lets you open this URL in many consoles/terminals/shells)

[13:20:46]: After successful login you will be redirected to a page which outputs some information that is required for usage of the `create_app_on_managed_play_store` action.
複製程式碼

把這個連結貼上到你的瀏覽器中你就可以向這個 Managed Google Play 的賬戶所有者發起授權請求了。

使用 API — 有點複雜

如果 你不打算為了管理你的 App 做一個基於 Web 的前端頁面,你可以使用下面的 node 指令碼以及 Firebase 的功能來快速獲取你的開發者賬戶 ID。如果你不在意跳轉的 URL(continueUrl)的話,你可以把它設定成類似於 foo.bar 這樣的假 URL。但是出於安全的考慮,這麼做是不被推薦的。

配置 Firebase 的雲功能

這篇 指南 將告訴你怎樣去配置 Firebase 的雲功能。下面的程式碼可被用於你的終端。

const functions = require('firebase-functions');

exports.oauthcallback = functions.https.onRequest((request, response) => {
  response.send(request.query.developerAccount);
});
複製程式碼

functions/index.js

建立私有 App 列表

使用 fastlane — 非常簡單

  ENV['SUPPLY_JSON_KEY'] = 'key.json'
  ENV['SUPPLY_DEVELOPER_ACCOUNT_ID'] = '111111111111000000000'
  ENV['SUPPLY_APP_TITLE'] = 'APP TITLE'
  desc "Create the private app on the Google Play store"
  lane :create_private_app do
      gradle(
        task: 'assemble',
        build_type: 'Release'
      )

      # Finds latest APK
      apk_path = Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]

      create_app_on_managed_play_store(
        json_key: ENV['SUPPLY_JSON_KEY'],
        developer_account_id: ENV['SUPPLY_DEVELOPER_ACCOUNT_ID'],
        app_title: ENV['SUPPLY_APP_TITLE'],
        language: "en_US",
        apk: apk_path
      )
    end
複製程式碼

樣例 Fastfile

> fastlane create_private_app
複製程式碼

使用 API — 有點複雜

或許你應當先讀讀 API 文件。Google 提供了 JavaPythonC#Ruby 的使用者端庫檔案。

API 樣例

下面這段 Ruby 程式碼在使用 Google 服務賬戶 的 JSON 格式金鑰檔案認證之後,通過呼叫 Play Custom App 服務建立了一個私有 App 並上傳了其第一版 APK 檔案。這段程式碼只應當在第一次建立 App 時使用,後續更新應使用 Google Play 的釋出 API 中的上傳 APK 功能。

require "google/apis/playcustomapp_v1"

# Auth Info
KEYFILE = "KEYFILE.json" # PATH TO JSON KEYFILE
DEVELOPER_ACCOUNT = "DEVELOPER_ACCOUNT_ID" # DEVELOPER ACCOUNT ID

# App Info
APK_PATH = "FILE_NAME.apk" # PATH TO SIGNED APK WITH V1+V2 SIGNATURES
APP_TITLE = "APP TITLE"
LANGUAGE_CODE = "EN_US"

scope = "https://www.googleapis.com/auth/androidpublisher"
credentials = JSON.parse(File.open(KEYFILE, "rb").read)
authorization = Signet::OAuth2::Client.new(
 :token_credential_uri => "https://oauth2.googleapis.com/token",
 :audience => "https://oauth2.googleapis.com/token",
 :scope => scope,
 :issuer => credentials["client_id"],
 :signing_key => OpenSSL::PKey::RSA.new(credentials["private_key"], nil),
)
authorization.fetch_access_token!

custom_app = Google::Apis::PlaycustomappV1::CustomApp.new title: APP_TITLE, language_code: LANGUAGE_CODE
play_custom_apps = Google::Apis::PlaycustomappV1::PlaycustomappService.new
play_custom_apps.authorization = authorization

play_custom_apps.create_account_custom_app(
 DEVELOPER_ACCOUNT,
 custom_app,
 upload_source: APK_PATH,
) do |created_app, error|
 unless error.nil?
   puts "Error: #{error}"
 else
   puts "Success: #{created_app}."
 end
end
複製程式碼

更新私有 App

建立 Play Store 列表之後,一旦你建立了一個私有 App,你就可以使用 Google Play 釋出 API 來推送你的新 APK 檔案。fastlane 支援這個功能。你可以在 這裡 找到更多資訊。

部署到使用者

Managed Google Play 需要 EMM (Enterprise Mobility Management)系統將 App 分發給使用者。瞭解更多請戳這裡

部署和管理企業私有 App 從未變得如此容易。這兩種使用 Managed Google Play 來部署 App 的方法都是可行的。使用哪一種取決於你的持續整合系統以及你是否想要寫程式碼。試試 fastlane 吧,你會省下很多時間的。

如果你在使用 fastlane 的時候遇到任何問題或者 bug,請在 github 上給我們提 issue。

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章