通过 Node.JS/Deno 访问 App Store Connect API 进行自动化

叶举
2023-12-01

什么是 App Store Connect API?

App Store Connect API 是一个由苹果公司提供的用于访问和管理 App Store Connect 资源的编程接口。App Store Connect 是苹果公司的一个在线平台,开发者可以使用该平台提交、管理和发布他们的 iOS、iPadOS、macOS、watchOS 和 tvOS 应用程序。

通过 App Store Connect API,开发者可以自动化管理他们的 App Store Connect 资源,例如创建和更新应用程序、添加和删除用户、获取和提交应用程序的审核信息、处理应用程序销售和财务数据等。

App Store Connect API 使用 RESTful 风格的 API,可以使用多种编程语言(例如 Python、Java、Ruby、PHP、Swift 等)进行访问和集成。苹果公司提供了一系列的文档和代码示例,帮助开发者了解如何使用该 API,以及如何进行身份验证和授权。

我们可以用 App Store Connect API 来干嘛?

App Store Connect API 可以用于自动化管理和监控您的应用程序、App Store 上的销售数据和用户反馈等。以下是一些使用 App Store Connect API 的具体例子:

自动提交新应用程序:开发者可以使用 App Store Connect API 创建新应用程序,从而自动化提交到 App Store 审核队列。这可以提高工作效率并减少手动工作量。

应用程序信息更新:开发者可以使用 App Store Connect API 更新应用程序元数据(如应用程序描述、屏幕截图、定价等),以便及时更新应用程序信息并吸引更多用户。

监控应用程序审核状态:开发者可以使用 App Store Connect API 获取应用程序审核状态,以便及时了解应用程序审核进程并做好发布准备。

查看应用程序销售和财务数据:开发者可以使用 App Store Connect API 获取应用程序的销售和财务数据,如销售收入、下载次数、应用程序内购等,以便分析和优化应用程序的销售策略和业务模式。

添加和管理用户:开发者可以使用 App Store Connect API 添加和管理应用程序的用户,以便控制他们对应用程序的访问权限和角色。

使用 Node.JS 访问 App Store Connect API

appstore-connect-sdk 是一个 Node.js 模块,使用 TypeScript 编写,为开发人员提供了一个方便的与 App Store Connect API 进行交互。该模块基于 OpenAPI Generator 工具构建,并支持所有基于 OpenAPI 规范的 API。

以下是一些使用 appstore-connect-sdk 的好处:

  • 方便快捷的使用:提供了易于使用的函数和类,开发者可以很容易地使用它来管理他们的应用程序和访问销售和财务数据。无需手动处理复杂的 RESTful API 请求和响应,这极大地简化了开发流程。

  • 简化 App Store Connect API 调用:简化 App Store Connect API 的调用,无需手动创建 URL 和处理 HTTP 请求和响应。该库封装了所有必要的请求和响应细节,使开发人员可以更专注于实际的开发工作。

  • 更高效的工作流程:可以节省大量时间和精力。开发者可以使用该库来自动化提交新应用程序、更新应用程序元数据、获取应用程序审核状态和访问销售和财务数据等操作。这些功能可以帮助开发人员更高效地管理和优化他们的应用程序。

  • 开源免费:App Store Connect SDK 是一个完全开源的项目,使用 MIT 许可证授权。开发者可以免费使用该库并对其进行修改和定制。同时,该库的代码托管在 Github 上,任何人都可以参与该项目的开发和贡献。

安装

npm install appstore-connect-sdk

使用

1. Import appstore-connect-sdk

import AppStoreConnectAPI from "appstore-connect-sdk";

2. 创建 API 配置

进入 App Sotre Connect -> Users and Access -> Keys 并创建您自己的密钥,这里也可以找到你的 private key IDissuer ID.

下载私钥后,通过文本编辑器打开包含私钥的 .p8 文件,它看起来像这样:

-----BEGIN PRIVATE KEY-----
AIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgKEn1VBakCdHIEcdS
aBWr/9laASzaAbF2LP7wTYjHK52gCgYIKoZIzj0DAQehRANCAAQ/jf2sxRvXEhjn
srw8kJcHvO0dQ1KmUlxZvATsFsjJbdQ1yAENAWItUoeTV0rhdajcdOQxKl1OPse0
nNdXXbA4
-----END PRIVATE KEY-----

现在使用这个 Private Key + isuer ID + private key ID 创建请求配置:

const appStoreConnect = new AppStoreConnectAPI({
  issuerId: "<YOUR ISSUER ID>",
  privateKeyId: "<YOUR PRIVATE KEY ID>",
  privateKey: "<YOUR PRIVATE KEY>",
});

有关如何在 App Store Connect API 中通过 JWT 认证的更多信息,请查看 Apple 的身份验证指南:

3. 创建 API 并发送请求

你可以在 src/openapi/apis 找到所有 API 实体定义, 这些类通过 App Store Connect API - OpenAPI specification 进行自动化生成, 如果你遇到任何问题请提交一个 issue

const res = await client.call(AppsApi).appsGetCollection();
console.log(res);

这是完整的示例代码:

import AppStoreConnectAPI from "appstore-connect-sdk";
import {
  AppsApi,
  AppEventLocalizationsApi,
} from "appstore-connect-sdk/dist/openapi/apis";
const appStoreConnect = new AppStoreConnectAPI({
  issuerId: "<YOUR ISSUER ID>",
  privateKeyId: "<YOUR PRIVATE KEY ID>",
  privateKey: "<YOUR PRIVATE KEY>",
});
const res = await client.call(AppsApi).appsGetCollection();
console.log(res);

自定义网络库

默认情况下使用内置的 fetch 函数进行 HTTP 请求,但请注意此函数需要 Node.js 版本 v18.0.0 或更高版本。

或者,你也可以通过在 AppStoreConnectAPI 构造函数中设置 fetchApi 选项来配置符合 Fetch API 标准规范的任何网络库,将其他网络库桥接过来。

import AppStoreConnectAPI from "appstore-connect-sdk";
import fetch from "node-fetch";
new AppStoreConnectAPI({
  // ...
  fetchApi: fetch as unknown as FetchAPI, // 这样所有网络请求都通过 node-fetch 接管
});

更新 OpenAPI 生成的代码

要更新 OpenAPI 生成的代码,请运行以下命令:

$ sh gen-openapi.sh

这将基于由 Apple 官方发布的 OpenAPI specification 规范文件,通过 OpenAPI Generator 生成 Typescript 代码。

Deno 兼容性

appstore-connect-sdk 模块在大多数情况下都与 Deno 兼容,但在 Deno 环境下使用时有一些限制。目前,Deno 对于 Node crypto 模块的兼容性支持尚未完成,这意味着 appstore-connect-sdk 模块的某些依赖此模块的特性在 Deno 中可能无法正常工作。

具体而言,appstore-connect-sdk 模块使用的 jsonwebtoken 包不完全兼容 Deno。因此,在 Deno 环境中,无法使用 jsonwebtoken 生成 JWT(JSON Web Token),以便与 App Store Connect API 进行身份验证。

为了解决这个问题,您可以手动使用与 Deno 完全兼容的库(如 djwt)生成 JWT。然后将手动生成的 JWT 传递给 appstore-connect-sdk 模块,以便与 App Store Connect API 进行身份验证。

您可以在 deno_example 中查看在 Deno 环境中使用 appstore-connect-sdk 模块的示例。

我们致力于确保 appstore-connect-sdk 模块能够完全兼容 Node.js 和 Deno,我们将继续努力提高其与 Deno 的兼容性,随着 Deno 运行时的发展而不断改进。

通过 AWS/Vercel/Deno Deploy 等函数计算快速构建 App Store Connect 自动化任务

appstore-connect-sdk 模块提供了一个方便的方式,让开发者快速地与 App Store Connect API 进行交互。不过,为了进一步提高使用效率,你也可以将 appstore-connect-sdk 模块与 AWS Lambda、Vercel 或 Deno Deploy 等函数计算服务一起使用。

以 AWS Lambda 为例,你可以通过将 appstore-connect-sdk 作为依赖包添加到 AWS Lambda 函数的 Node.js 运行时环境中,快速搭建一个用于自动化 App Store Connect API 操作的 Lambda 函数。在 Vercel 或 Deno Deploy 等平台上,你也可以通过类似的方式使用 appstore-connect-sdk 模块。

 类似资料: