写点什么

[译] 轻松发布私有 App

用户头像
Android架构
关注
发布于: 21 小时前

启用私有 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 提供了 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 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}."

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
[译] 轻松发布私有 App