使用 App Store Connect API 批量创建内购商品

一、前言

我们去年开源 AppleParty(苹果派) 用于批量应用内购商品的创建和更新的方案,具体的技术方案是使用 XML Feed 格式来处理。而今年苹果在 WWDC22 宣布,2022 年 11 月开始,不再允许使用 XML 方式上传元数据和内购商品。

苹果在 7 月公告 即将从 XML Feed 过渡到 App Store Connect API,并且一直邮件通知开发者,截止 11月 9 日之前:

We noticed you recently used the XML feed to manage and deliver content to App Store Connect. As we wrote to you previously, as of November 9, 2022, you’ll need to use the App Store Connect REST API to manage in-app purchases, subscriptions, metadata, and app pricing. The XML feed no longer supports this content, but continues to support existing Game Center management functionality. 

If you have any questions, contact us. 

Apple Developer Relations

如果现在还使用 XML feed 上传,会收到以下告警:

ERROR ITMS-6036: "XML schemas software5.12 and earlier have been deprecated and uploads of app metadata, in-app purchases, and subscriptions are no longer supported through the XML feed. You can use the App Store Connect API instead.

Game Center will continue to be supported with XML schema software6.0." at Software/SoftwareMetadata

所以,XML feed 禁止上传的内容:

  • app metadata(app元数据,如截图、预览、描述等)
  • in-app purchases, and subscriptions(内购商品,包括订阅类型)
  • app pricing(app定价)

Game Center 和上传 ipa 文件等方式,目前还能上传,目前来看,是因为 App Store Connect API 还不支持!所以,希望明天 WWDC23 苹果能支持上传 ipa 文件,这样就更加方便~

二、App Store Connect API

App Store Connect API 需要生成密钥才能调用使用,所以,我们先来介绍一下密钥的生成,然后在以应用内购商品的创建和更新为例,展示 API 使用示例。

2.1 App Store Connect API 密钥生成

生成密钥 ID(kid)和 Issuer ID(iss)

要生成密钥,您必须在 App Store Connect 中具有管理员角色或帐户持有人角色。登录 App Store Connect 并完成以下步骤:

  1. 选择 “用户和访问”,然后选择 “密钥” 子标签页。
  2. 在 “密钥类型” 下选择 “App Store Connect API”。
  3. 单击 “生成 API 密钥”(如果之前创建过,则点击 “添加(+)” 按钮新增。)。
  4. 输入密钥的名称。该名称仅供您参考,名字不作为密钥的一部分。
  5. 单击 “生成”。

AppStoreConnectAPI-01.png

“用户和访问” -> “密钥” -> “App Store Connect API” -> “生成 API 密钥”

AppStoreConnectAPI-02.png

AppStoreConnectAPI-03.png

注:访问权限:
根据密钥使用场景,访问的权限也不一样。要创建和管理 App 内购买项目,请确保您拥有以下用户角色之一:

  • 帐户持有人
  • 管理
  • App 管理(这个要求角色权限最低)

详细权限,可参考文档 职能权限

AppStoreConnectAPI-04.png

1、Issuer ID:拷贝复制内容
2、密钥 ID: 生成的密钥,有一列名为 “密钥 ID” 就是 kid 的值,鼠标移动到文字就会显示 拷贝密钥 ID,点击按钮就可以复制 kid 值。
3、API 密钥文件,下载 API 密钥 按钮(仅当您尚未下载私钥时,才会显示下载链接。),此私钥只能一次性下载!。

注意:将您的私钥存放在安全的地方。不要共享密钥,不要将密钥存储在代码仓库中,不要将密钥放在客户端代码中。如果您怀疑私钥被盗,请立即在 App Store Connect 中撤销密钥。有关详细信息,请参阅 撤销API密钥

最终,生成以下参数和文件:

名字 值示例 说明 字段值说明
密钥ID GC8HS3SX37 kid,Key ID,密钥ID 您的私钥ID,值来自 API 密钥页面。
密钥内容文件 SubscriptionKey_GC8HS3SX37.p8 密钥文件(p8) 用来访问和使用 App Store Connect API 接口的服务。
Issuer ID 69a6de92-xxx-xxxx-xxxx-5bc37c11a4d1 iss,Issuer ID,发行人 您的发卡机构ID,值来自 App Store Connect 的 API 密钥页面。
2.2 App Store Connect API 使用示例

这里我们使用 python3 创建 API 请求示例,需要依赖 jwtrequests 库,所以需要在终端安装:

pip3 install jwt

pip3 install requests

怎么请求 App Store Connect API ?苹果给出了一个示例:

curl -v -H 'Authorization: Bearer [signed token]' 
"https://api.appstoreconnect.apple.com/v1/apps"

也就是用 JWT 生成的 token,放到 App Store Connect API 请求链接的 header 部分,key 为 Authorization,value为 Bearer [signed token]

接下来,我们通过 Python 的 requests 来请求 App Store Connect API。大家也可以用其它的工具来模拟,比如在线工具或者 Postman 等。

import jwt
import time
import requests

def createASCToken(p8KeyPath, kid, iss):
	try:
		header = {
   
			"alg": "ES256",
			"typ": "JWT",
			"kid": kid
		}
		payload = {
   
			"iss": iss,
			"aud": "appstoreconnect-v1",
			"iat": int(time.time()),
			"exp": int(round(time.time() + (20.0 * 60.0))) # 20 minutes timestamp
		}
		file = open(p8KeyPath)
		key_data = file.read()
		file.close()
		token = jwt.encode(headers=header, payload
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值