[译] 轻松发布私有 App
启用私有 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: ([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 dogradle(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 提供了 Java、Python、C# 和 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 KEYFILEDEVELOPER_ACCOUNT = "DEVELOPER_ACCOUNT_ID" # DEVELOPER ACCOUNT ID
App Info
APK_PATH = "FILE_NAME.apk" # PATH TO SIGNED APK WITH V1+V2 SIGNATURESAPP_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_CODEplay_custom_apps = Google::Apis::PlaycustomappV1::PlaycustomappService.newplay_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}"elseputs "Success: #{created_app}."
评论