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

news/2024/3/19 14:41:15/文章来源:https://blog.csdn.net/isaced/article/details/129136788

什么是 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 的身份验证指南:

  • Creating API Keys for App Store Connect API
  • Generating Tokens for API Requests
  • Revoking API Keys

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 模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_260723.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL零基础入门学习(三)

SQL零基础入门学习&#xff08;二&#xff09; SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录。 SQL WHERE 语法 SELECT column1, column2, ... FROM table_name WHERE condition;参数说明&#xff1a; column1, column2, …&#xff1a;要选择的字段名称&…

教你数分钟内创建并运行一个 DolphinScheduler Workflow

点击蓝字 关注我们作者 | 鲍亮&#xff0c;Apache DolphinScheduler PMC Member01Workflow是什么&#xff1f;对于数仓场景和数据湖场景来说&#xff0c;最显著的特点就是数据处理的长流程和高复杂度任务依赖关系&#xff0c;从源数据采集到最终报表数据的生成&#xff0c;中间…

软件工程 | 第一章:软件工程学概述

软件工程学概述一、前言二、软件危机1.典型表现2.产生原因3.消除危机途径三、软件工程1.概述2.软件本质特征3.软件工程基本原理4.软件工程方法学1️⃣传统方法学2️⃣面向对象方法学四、软件生命周期五、结语一、前言 本文将讲述软件工程导论的第一章相关知识点&#xff0c;主…

第一个Java程序(初识Java)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录1.Java概述1.1什么是Java1.2Java之父2.0第一个Java程序编译运行.class3.0程序如何跑起来的&#xff1f;3.1J…

加密,各种加密,耙梳加密算法(Encryption)种类以及开发场景中的运用(Python3.10)

不用说火爆一时&#xff0c;全网热议的Web3.0区块链技术&#xff0c;也不必说诸如微信支付、支付宝支付等人们几乎每天都要使用的线上支付业务&#xff0c;单是一个简简单单的注册/登录功能&#xff0c;也和加密技术脱不了干系&#xff0c;本次我们耙梳各种经典的加密算法&…

uniapp 原生安卓开发插件(module),以及android环境本地调试(二)

uniapp 原生安卓开发插件&#xff08;module&#xff09;&#xff0c;以及android环境本地调试&#xff08;一&#xff09; 1、前景 承接上一篇文章&#xff0c;由于uniapp每天只有限定的打包次数&#xff0c;所以每次插件调试都打包成为基座&#xff0c;这个不太方便&#x…

Java的Annotation接口

PS&#xff1a; 该博客将涉及Google Guice的一些知识&#xff0c;但不要惊慌&#xff0c;即使你从未了解过Guice&#xff0c;也能正常阅读该博客 1. 序言 学习Java注解时&#xff0c;曾提到&#xff1a;所有的注解都将继承java.lang.annotation.Annotation接口&#xff0c;无法…

Android自动化测试(UiAutomator)——UiObject

本文主要讲解使用UiAutomator的一些技巧&#xff0c;希望对于初学者有一定的帮助 UiObject 1、首先要声明对象 UiObject XXX new UiObject(new Selector) ; 2、其次对对象进行操作 操作类型包括&#xff1a; 执行类&#xff1a;文本输入与清除、点击/长按、拖动/滑动、 …

安装配置RabbitMQ(Win11)

一、安装依赖Erlang打开RabbitMQ官网&#xff1a;https://www.rabbitmq.com/点击Get Started点击Download Installation点击 Chocolatey or Installer点击? Erlang/OTP Version Tree点击win64下载完成后&#xff0c;右击“以管理员身份”安装配置Erlang环境变量 &#xff1a;…

Mybatis的介绍和基本使用

目录 数据库操作框架的历程 JDBC Hibernate JDBCTemplate 什么是Mybatis 快速搭建Mybatis项目 创建普通的maven项目 导入相关的依赖 创建对应的数据表 创建与表对应的实体类对象 创建对应的Mapper接口 编写配置文件 编写测试类 增删改查的基本操作 数据库操作框…

Java线程的6 种状态

Java 线程的状态 Java线程有六种状态&#xff1a; 初始&#xff08;NEW&#xff09;、运行&#xff08;RUNNABLE&#xff09;、阻塞&#xff08;BLOCKED&#xff09;、 等待&#xff08;WAITING&#xff09;、超时等待&#xff08;TIMED_WAITING&#xff09;、终止&#xff08…

vue-router 的基本用法

vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用&#xff0c;能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址&#xff1a;https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…

MacBook IDEA 顶部菜单栏不显示问题

文章目录背景&#xff1a;当前显示方式一1. 快捷键&#xff1a;双击shift 搜索 idea.vmoptions3. 在idea.vmoptions文件末尾添加 -Dapple.laf.useScreenMenuBarfalse方式二1. 访达 > 应用程序 > idea 右键 显示包内容2. 进入到bin包位置的命令终端3. 编辑文件 vi idea.pr…

EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)

文章目录1.前言2.准备工作3.导出测试3.1.单次查询、全量导出3.2. 多次查询&#xff0c;多个文件&#xff0c;单次写入3.3.多次查询&#xff0c;多个文件&#xff0c;多次写入3.4.多线程导出探索3.5.文件打包成ZIP3.6.响应给客户4.实现代码5.结语1.前言 最近接到一个需求&#…

多元化增长引擎业务占比超四成,联想开启混动模式?

一句话概括联想集团的业绩&#xff1a;预料之内的整体下滑&#xff0c;超出预期的第二曲线。 上周五&#xff08;2月17日&#xff09;&#xff0c;联想集团发布了2022到2023财年第三季度业绩。根据财报&#xff0c;联想集团实现营收152.67亿美元&#xff0c;同比下降24%&#…

【机器学习】决策树-Gini指数

1. CART树 分类回归树(CART,Classification And Regression Tree)算法是一种决策树分类方法。CART每一个节点上都采用二分法&#xff0c;采用一种二分递归分割的技术&#xff0c;CART生成的树必须是二叉树&#xff0c;也就是无论回归还是分类&#xff0c;无论特征离散还是连续&…

15-基础加强3-单元测试日志

文章目录1.单元测试1.1概述【理解】1.2特点【理解】1.3使用步骤【应用】1.4相关注解【应用】2.日志2.1概述【理解】2.2日志体系结构和Log4J【理解】2.3入门案例【应用】1.单元测试 1.1概述【理解】 JUnit是一个 Java 编程语言的单元测试工具。JUnit 是一个非常重要的测试工具…

Profinet转ModbusTCP网关连接昆仑通态触摸屏配置案例

本案例是模拟将Modbus TCP 设备数据接入到西门子PROFINET 网络中。 使用设备为西门子 S7-1500 型 PLC, Profinet转ModbusTCP网关。MODBUS 从站昆仑通态触摸屏。 配置方法&#xff1a; 打开博图&#xff0c;新建项目并添加站点。 添加1513PLC。 设置好IP并处于联网状态 导入Pr…

VTK学习笔记(四十)vtk提取单层数据

VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1.1 vtkImageReslice提取单层图像1.2 vtkExtractVOI提取单层图像1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据 VTK实现单层图片的提取方法有…

力扣mysql刷题记录

mysql刷题记录 刷题链接https://leetcode.cn/study-plan/sql/?progressjkih0qc mysql冲&#xff01;mysql刷题记录一. 1699. 两人之间的通话次数题解二、1251. 平均售价题解三. 1571. 仓库经理题解四.1445. 苹果和桔子解五.1193. 每月交易 I题解六.1633. 各赛事的用户注册率题…