对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相关推荐

  1. APP被苹果App Store拒绝的79个原因

    作为iOS开发者,估计有很多都遇到过APP提交到 App Store被拒,然后这些被拒的原因多种多样,今天 dApps收集了常见的被拒的原因,以便更多开发者了解. APP被苹果APPStore拒绝的各 ...

  2. APP被苹果 App Store拒之门外的79个原因!

    转自:http://www.youxituoluo.com/43147.html [游戏陀螺30日消息]作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多 ...

  3. APP被苹果App Store拒绝的N个原因

    1.程序有重大bug,程序不能启动,或者中途退出. 2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币. 3.游戏里有实物奖励的话,一定要说清楚,奖励由本公司负责,和苹果没有关系. 4.用到苹果 ...

  4. 【转】APP被苹果App Store拒绝的N个原因(持续补充)

    作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. 1.程序有重大bug,程序不能启动,或者 ...

  5. APP被苹果App Store拒绝的79个原因(未完待续)

    作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. APP被苹果APPStore拒绝的各种原 ...

  6. 为苹果APP制作在APPLE STORE中的下载用“二维码”

    看了网上的许多文章,步骤繁琐而且不一定有效.终于,试出来了,  原来很简单. 下载链接: https://itunes.apple.com/cn/app/id1234567890?mt=8 将上述链接 ...

  7. 基于H5的App在IOS App Store的打包发布流程

    基于H5的App在IOS App Store的打包发布流程 0.说明 1.ios证书配置 (1)创建CSR文件 (2)申请开发者证书 (3)申请推送证书 (4)申请provisioning profi ...

  8. 金融 APP容易被App Store拒的原因

    App Store Review的标准 苹果审核团队(App Store Review)依据的审核标准有2个 1. <App Store 审核指南> 详见地址: https://devel ...

  9. 获取App Store中App的ipa包

    俗话说好记性不如烂笔头,每次需要看别的App中某些功能的实现方案时总去查资料太麻烦,所以这里记录下如何获取App Store中App的ipa包 主要使用的工具为Apple Configurator 2 ...

最新文章

  1. 23 张图详解路由协议:计算机网络的核心技术
  2. Linux中防火墙(二)
  3. jQuery UI在Server 2008 IE8下DatePicker问题修复
  4. linux 常用命令20190917
  5. 如何设置eclipse下查看java源码
  6. [Redis6]常用数据结构_Hash哈希
  7. OpenJudge NOI 1.2 05:填空:类型转换2
  8. python动态柱状图_Python+matplotlib绘制动态更新的柱状图
  9. 面向对象程序设计概述(金老师第一讲)
  10. 关于给构造函数传达参数方法
  11. mysql与mimic安装_MIMICIII 数据库教程(4)——MIMIC数据库的安装 #丁香打卡#
  12. 查看电脑CPU是否支持虚拟化
  13. 并行计算:循环程序并行化的一般方法
  14. 导数求函数最大值和最小值习题
  15. 【笨方法学PAT】1116 Come on! Let's C (20 分)
  16. 比特交织 matlab,比特交织空时编码不对称调制方案及软件分析
  17. APISpace 笑话大全API
  18. 破解EXCEL工作表保护密码
  19. uboot启动之BL1阶段的分析1
  20. Java项目论文+PPT+源码等]基于javaweb的网上订餐管理系统|点餐餐饮餐厅

热门文章

  1. 加入缓存存在的问题及优化
  2. 毕业设计 基于单片机的睡眠质量监控系统(源码+硬件+论文)
  3. 智慧海洋学习 task 1
  4. matlab 实验6 高层绘图操作,实验六 高层绘图操作答案
  5. 无mac电脑无苹果开发者账号生成苹果ios证书的方法
  6. 计算机软件升级记录表,《企业计算机软件系统安装升级记录表》.doc
  7. 【报告分享】 2020年中国在线教育行业研究报告-艾瑞咨询(附下载)
  8. 如何成为一名成功的软件工程师
  9. SoC设计内容和SoC设计流程总结
  10. 北海焊接机器人_水下焊接机器人技术发展现状及趋势