html调用app store,调用App Store Connect Api
对iOS的证书、描述文件、账号、设备等管理,之前都去苹果开发者中心操作,官网上操作也比较繁杂,想搞一些自动化之类的,更是麻烦,有时候官网都打不开……
其实苹果还提供里一套API接口,创建证书、创建账号、增加devices等等,这些都可以调用命令操作,可以按需来完成自动化操作或批量操作。
API接口地址:https://api.appstoreconnect.apple.com
文档地址:https://developer.apple.com/documentation/appstoreconnectapi
有人可能看完文档还是不知道怎么下手,简述一下步骤:
1. 生成token
(1)key 和iss以及.p8文件生成就不累述
(2) 构造header
algorithm = ‘ES256‘base_api_url= "https://api.appstoreconnect.apple.com"
header ={"alg": algorithm,"kid": key,"typ": "JWT"}
(3)构造payload
#
payload ={"iss": iss,"exp": int(time.mktime((datetime.now() + timedelta(minutes=20)).timetuple())),"aud": "appstoreconnect-v1"}
(4)生成token
token = jwt.encode(payload=payload, key=private_key, algorithm=algorithm, headers=header).decode(‘ascii‘)return token
(5)封装请求处理
def base_call(url, token, method="get", data=None):""":param url:
:param token:
:param method:
:param data:
:return:"""re_header= {"Authorization": "Bearer %s" %token}
r={}
url= base_api_url +url
requests.adapters.DEFAULT_RETRIES= 1req=requests.session()
req.keep_alive=Falseif method.lower() == "get":
r= req.get(url, params=data, headers=re_header)elif method.lower() == "post":
re_header["Content-Type"] = "application/json"r= req.post(url=url, headers=re_header, data=json.dumps(data))elif method.lower() == "patch":
re_header["Content-Type"] = "application/json"r= req.patch(url=url, headers=re_header, data=json.dumps(data))return r
比如我们以增加设备id为例:
defset_devices(api_token, data):"""增加devices信息
:param api_token:
:param data:
:return:"""set_device_url= ‘/v1/devices‘res= base_call(set_device_url, api_token, ‘post‘, data)return res
post_data ={"data": {"attributes": {"name": i.split(‘,‘)[0],"platform": "IOS","udid": i.split(‘,‘)[1]
},"type": "devices"}
}
res=api.set_devices(api_token, post_data)if res.status_code != 201:print(res.json()[‘errors‘][0][‘detail‘])else:print("add time:", res.json()[‘data‘][‘attributes‘][‘addedDate‘])
这里的参数组装需要注意,需要参考文档一层层组装参数,data包含自子参数,子参数再包含子参数
完整的代码示例:
#-*- coding:utf-8 -*-#Author: drew#create time: 2020-07030#update time:#app store connect api
importjwtimporttimeimportjsonimportrequestsfrom datetime importdatetime, timedelta
algorithm= ‘ES256‘base_api_url= "https://api.appstoreconnect.apple.com"
defget_token(key, iss, key_file):""":param key:
:param iss:
:param key_file:
:return:"""
#读取私钥
private_key = open(key_file, ‘r‘).read()#构造header
header ={"alg": algorithm,"kid": key,"typ": "JWT"}#构造payload
payload ={"iss": iss,"exp": int(time.mktime((datetime.now() + timedelta(minutes=20)).timetuple())),"aud": "appstoreconnect-v1"}
token= jwt.encode(payload=payload, key=private_key, algorithm=algorithm, headers=header).decode(‘ascii‘)returntokendef base_call(url, token, method="get", data=None):""":param url:
:param token:
:param method:
:param data:
:return:"""re_header= {"Authorization": "Bearer %s" %token}
r={}
url= base_api_url +url
requests.adapters.DEFAULT_RETRIES= 1req=requests.session()
req.keep_alive=Falseif method.lower() == "get":
r= req.get(url, params=data, headers=re_header)elif method.lower() == "post":
re_header["Content-Type"] = "application/json"r= req.post(url=url, headers=re_header, data=json.dumps(data))elif method.lower() == "patch":
re_header["Content-Type"] = "application/json"r= req.patch(url=url, headers=re_header, data=json.dumps(data))returnr#------------------ 获取具体接口的方法 ------------------
def get_devices(api_token, data=None):"""获取devices信息
:param api_token:
:param data:
:return:"""get_devices_url= ‘/v1/devices‘
if data isNone:
data={"filter[platform]": "IOS",#"filter[status]": "ENABLED",
"limit": 100}
res= base_call(get_devices_url, api_token, ‘get‘, data)returnresdefset_devices(api_token, data):"""增加devices信息
:param api_token:
:param data:
:return:"""set_device_url= ‘/v1/devices‘res= base_call(set_device_url, api_token, ‘post‘, data)returnresdefupdate_devices(api_token, id, data,):"""增加devices信息
:param id:
:param api_token:
:param data:
:return:"""set_device_url= ‘/v1/devices/{%s}‘ %id
res= base_call(set_device_url, api_token, ‘patch‘, data)returnres"""if __name__ == "__main__":
ios_api_key = ‘T8****8AD8‘
ios_api_issuer = ‘69a**9-b79b-4**3-e053-5b**1a4d1‘
file_key = "/Users/drew/.private_keys/AuthKey_T85LR***8.p8"
token_api = get_token(ios_api_key, ios_api_issuer, file_key)
# get_udid()
post_data = {
"data": {
"attributes": {
"name": "zb",
"platform": "IOS",
"udid": "80b677c2c****e476caf61ba0d34274000"
},
"type": "devices"
}
}
res = set_udid(token_api, post_data)
print(res)"""
原文链接:https://www.cnblogs.com/drewgg/p/13452033.html
本文来自网络,不代表手讯网立场。
html调用app store,调用App Store Connect Api相关推荐
- APP被苹果App Store拒绝的79个原因
作为iOS开发者,估计有很多都遇到过APP提交到 App Store被拒,然后这些被拒的原因多种多样,今天 dApps收集了常见的被拒的原因,以便更多开发者了解. APP被苹果APPStore拒绝的各 ...
- APP被苹果 App Store拒之门外的79个原因!
转自:http://www.youxituoluo.com/43147.html [游戏陀螺30日消息]作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多 ...
- APP被苹果App Store拒绝的N个原因
1.程序有重大bug,程序不能启动,或者中途退出. 2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币. 3.游戏里有实物奖励的话,一定要说清楚,奖励由本公司负责,和苹果没有关系. 4.用到苹果 ...
- 【转】APP被苹果App Store拒绝的N个原因(持续补充)
作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. 1.程序有重大bug,程序不能启动,或者 ...
- APP被苹果App Store拒绝的79个原因(未完待续)
作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. APP被苹果APPStore拒绝的各种原 ...
- 为苹果APP制作在APPLE STORE中的下载用“二维码”
看了网上的许多文章,步骤繁琐而且不一定有效.终于,试出来了, 原来很简单. 下载链接: https://itunes.apple.com/cn/app/id1234567890?mt=8 将上述链接 ...
- 基于H5的App在IOS App Store的打包发布流程
基于H5的App在IOS App Store的打包发布流程 0.说明 1.ios证书配置 (1)创建CSR文件 (2)申请开发者证书 (3)申请推送证书 (4)申请provisioning profi ...
- 金融 APP容易被App Store拒的原因
App Store Review的标准 苹果审核团队(App Store Review)依据的审核标准有2个 1. <App Store 审核指南> 详见地址: https://devel ...
- 获取App Store中App的ipa包
俗话说好记性不如烂笔头,每次需要看别的App中某些功能的实现方案时总去查资料太麻烦,所以这里记录下如何获取App Store中App的ipa包 主要使用的工具为Apple Configurator 2 ...
最新文章
- 23 张图详解路由协议:计算机网络的核心技术
- Linux中防火墙(二)
- jQuery UI在Server 2008 IE8下DatePicker问题修复
- linux 常用命令20190917
- 如何设置eclipse下查看java源码
- [Redis6]常用数据结构_Hash哈希
- OpenJudge NOI 1.2 05:填空:类型转换2
- python动态柱状图_Python+matplotlib绘制动态更新的柱状图
- 面向对象程序设计概述(金老师第一讲)
- 关于给构造函数传达参数方法
- mysql与mimic安装_MIMICIII 数据库教程(4)——MIMIC数据库的安装 #丁香打卡#
- 查看电脑CPU是否支持虚拟化
- 并行计算:循环程序并行化的一般方法
- 导数求函数最大值和最小值习题
- 【笨方法学PAT】1116 Come on! Let's C (20 分)
- 比特交织 matlab,比特交织空时编码不对称调制方案及软件分析
- APISpace 笑话大全API
- 破解EXCEL工作表保护密码
- uboot启动之BL1阶段的分析1
- Java项目论文+PPT+源码等]基于javaweb的网上订餐管理系统|点餐餐饮餐厅