[譯] 輕鬆發佈私有 App

來自插圖 Virginia Poltrackhtml

不論你的團隊擁有 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 項目,請看看這篇 博客java

這爲何很重要:私有 App 發佈 API 或者 fastlane 大大簡化了遷移到 Managed Google Play 的流程,而且能夠方便地被集成到 CI 工具中。node

配置私有 App 功能

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

推薦:利用 Google Play App Signing 來爲你的 APK 文件簽名。這是保管的 keystore 的一個好方法。你能夠在 這裏 看到此方法的細節。android

重要:在 Google Play 上的全部 App(包括私有 App)必須具備一個惟一的且不可重用的 App ID。ios

在發佈你的私有 App 以前,你只須要三步。git

跟着這篇 指導說明 進行以下三步:github

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

配置 fastlane

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

啓用私有 App — 獲取你的開發者帳戶 ID

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

使用 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前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索