大多数浏览器和
Developer App 均支持流媒体播放。
-
改善 app 和图书 MDM 分配
"了解 app 和图书管理 API,并探索如何分配组织的自有 app 和图书到托管用户和设备。学习最近的 API 改进,并了解如何订阅和接收关于您的组织中资源计数、分配和注册用户的通知。了解如何利用异步处理显著降低大型作业所需的请求 次数。"
资源
相关视频
WWDC21
-
下载
♪ ♪ 你好 欢迎来到 WWDC全球开发者大会 我是奥斯汀 我的工作 是负责apps 和 Books的管理API 我会和各位分享我们所带来的改进 在新版本API中的情形 让你的移动设备管理解决方案 在管理Apps及Books的时候 比从前更快速且更容易管理数据 你可能已经在使用 Apps以及Books的API接口 来让组织单位使用你的产品 管理他们拥有的Apps及Books
组织单位获取这些资产的来源可能是 Apple 校园教务管理 或是Apple 商务管理 这个API让你可以指派 这些已拥有的Apps以及Books 给组织单位管理的用户及装置 我们今年引进了许多改变 到全新的Apps和Books的API上 我们会在这里探讨很多个改变项目 但聚焦于两大加强项目上 它们最能够改善你的工作流 也就是实时推送通知 以及异步处理 若有需要深度了解其他改变 请参考全新的开发者文档 位在developer.apple.com的 装置管理子区块 还有本节内容的参考数据中 我们从实时推送通知开始
我们现在支持实时推送通知 来反应状态的改变 包含了指派、资产、以及注册用户 你必须要选择开启这些通知 而你收到的通知只会是 你在客户端设置中所选择订阅的类别
实时推送通知终于解决了 你必须持续同步状态的需要 我们再更深入地讨论通知的类别 第一个通知类别与指派有关
指派的定义是 一个资产被指派到 一个用户或是 一个组织单位管理的装置上
如果你必须等待确认 直到全部组别的指派 都成功完成 那就会造成延误 耽搁安装用户所需内容的时间 现在 有了指派的通知 你可以实时知道到底什么指派 已经成功完成 并交付到哪个装置上
你订阅“资产管理” 这种通知类别 在客户端设置上 来收到这些信息
Apple会接着通知你 只要指派状态被改 不论是成员 非成员、或是撤销资产事件发生
你现在可以依赖这些通知 以提供用户及装置 更快速的存取方式 来取得他们指派到的内容 我们来看看这种通知的一个范例 当指派发生时 你就会收到这个通知 这边的范例 是由成员的资产请求触发的
Apple传送这些通知 利用的是授权的头里的共享秘密 由您在客户端设置中提供 通知中包含了有效负载 仅限于指定的通知类别
这里标明了类别 而这个通知的类别 是“资产管理” 在我们通知的有效负载中 我们可以看到指派 而它们的状态试图要被改变
凭借的就是 eventId这个独一无二的标识符 为的是这个移动设备管理触发的 异步事件 我们马上会谈到更多的细节 跟我们新应用程序接口的 异步性质有关
这里是状态改变的结果 是成功还是失败
而指派状态改变的类别 在这里是一位成员 下一个通知类别是资产
资产是一个组织单位所购买的 Apps以及Books 不管是Apple 校园教务管理上 或是Apple 商务管理上 组织是无法管理或指派资产的 直到你的移动设备管理 知道你拥有这些内容 使用资产通知 你会实时收到通知 当资产的状况发生改变 例如购买 转移、或退款 你的移动设备管理会全盘掌握 各个资产目前剩余的使用次数 订阅资产剩余次数的通知类别 在客户端设置中以获得这些信息
Apple会开始通知你 当资产状态改变 不论原因是购买 转移、或是退款事件
这些通知能让你 快速提供给用户 他们刚刚购入的资产 我们也来看一个范例 跟这种通知有关 还加入了脉络 展示资产状态 先前看起来是什么样子 为了获取资产目前的状态 我们把它称为“取得资产”的端点 这是新的资产同步端点 你注解时可以通过HTTP的 GET请求方式 以及版本化的统一资源标识符操作 我们在这里查询 使用的是查询参数 adamId以及pricingParam 来接收单一资产的状态
我们正在请求服务器令牌 也叫sToken 在授权首部皆有提供 给全部新的应用程序接口请求 格式则是持有人令牌 我们在这个响应的资产数组里看到 我们感兴趣的资产底下 还有一万的指派次数可用 总数有一万五千次 当发生购买时 你就会收到这个通知 我们在有效负载里看到
资产的adamId是已购买
而差量在这个例子是正整数 这可以表示购买或是转移 你会使用这个差量来更新你的次数 而不需要再呼叫资产同步的端点 最后几种通知类别则是给注册用户的 大部分的部署 都依赖以装置为基础的指派 但当你需要指派内容给用户时 建立注册用户便是第一个步骤
把这些用户串连到不论是个人 或是受管理的Apple ID 便对于部署很重要 要让一个用户的个人Apple ID串连到 一个给定sToken的注册用户上 这个用户必须接受邀请 来串连他们的Apple ID 现在 有了注册用户的通知 你就能实时得知 用户的最新状态 这都是靠着一开始的建立 以及接下来的接受邀请 你订阅了“用户管理” 以及“用户相关”的通知类别 在客户端设置上以收到这些通知 Apple之后则会 在用户状态改变时通知你 不论是建立、串连 更新、或退出的用户事件
“用户相关”的通知 专门让你更有效追踪 一个用户接受邀请的事件 来串连他的Apple ID 我们来看看这种通知的范例 包含的脉络是用户状态 之前的样貌 为了取得用户目前的状态 我们呼叫了取得用户的端点 这是新的用户同步端点 在这里过滤出我们感兴趣的用户 用的是clientUserId这个查询参数 这会限制回应的数量 使其局限于一个使用者 这里我们找到了一些共同的编页栏 通过我们的同步应用程序接口 指出了目前的页面索引以及大小 或者是此脉络中用户目标的数量 在目前的页面上 以及总页面在推定的查询之中
在我们的用户数组中 我们可以看到唯一一个用户 让我们感兴趣的 而这个例子里 拥有已注册的状态与串连的状态 相互对应 以及一个邀请码 这个用户很显然还没有 串连到一个Apple ID上 我们整个同步应用程序接口 也包含了一个版本标识符 会随着改变 当每次写入 下层数据的时候 这可以发挥非常大的功用 当遍历大型的回复 以指出前面页面的数据 可能已经被改变 你可以串连一个受管理的Apple ID 到一个已注册的用户上 使用的是 全新更新过的用户端点 这会造成一个已注册用户的通知 如同这边看到的一样 在我们通知的有效负载中 我们看到了用户的状态 企图要被更动 移动设备管理独一无二的标识符 触发了异步事件 状态的结果改变 不管是成功或失败 用户状态的这种改变 在这里是更新 瞧瞧用户数组 我们看到clientUserId 我们感兴趣的这个用户状态 包含了一个idHash还有成员的状态 可以由此推论受管理的Apple ID串连 是成功的 你用这个来更新这位用户的状态 而不需要再进行呼叫 到这个用户的同步端点 并非由你进行串连 不可能的事反而是 你给这个用户一个邀请链接 来让用户把他们自己的Apple ID 串连到已注册的用户上 我们在这里可以仔细看看 那个已串连用户的通知 我们在这个通知的有效负载 看到用户对象 包含了关于已串连用户的信息 包含但不限于他们的clientUserId 一个指出已串连Apple ID的idHash 他们接受的邀请码 以及显示已串连的状态 你用这个来更新你手上 这个用户的状态 而不需要再呼叫这个用户的同步端点
我们来谈谈你要怎么登记 才能获得这些通知 你必须由客户端设置来加入 每一个你管理的sToken都是这样
你提供一个共享秘密来进行验证 用的是notificationAuthToken 还有notificationUrl来进行传送 这些令牌是用来验证这些通知 都的确来自于Apple 这可以随时通过客户端设置进行更新
提供一个HTTP 200层次的响应 在你收到通知的时候 来让Apple知道 它们已经成功递送了 Apple会企图重试通知 如果一个非200的响应被传送回来 或者是逾时发生 Apple会提供尽可能地进行递送 连系到你的尝试会重复数次 才会放弃进行通知 这代表了如果你无法收到通知 不论何时都一样的话 你就得轮询最新的状态了 若要同步 只有在你知道 数据有可能过期的状态下 是因为错过通知造成的 第二个在这个新应用程序接口上 推出的重大改善 是同步处理
在这个应用程序接口一开始的版本上 所有管理都是同步执行的 你发出一个请求来管理一些资产 而Apple执行管理的动作 当你在等待同步回应时 这代表了你掌握了平行性 而异步处理 促成了Apple这端 由服务器执行的同步性 因此让处理得到优化 而使更大量的请求可以更快速地完成
有序处理减少了问题量 像是间歇性失败 以及随之而来的重新尝试 依你特定的请求型样而定
而这最后的结果是 轻松简单的大型部署 在教育方面 返校季更为轻松 Apple已经从异步处理中受惠 应用程序以及书籍的购买与转移 在Apple 校园教务管理 或Apple 商务管理上 让组织单位可以看到手边的库存 过程只需几分钟而不是数小时
我们来看看这是怎么达成的 来让新的应用程序 以及书籍的管理体验如此优异
比方说 你在管理一个组织单位 总共有一万名用户 每个人都拥有设备
而你被请求要指派25个应用程序 到他们的装置上 这些程序 对他们的日常任务非常重要
你在考虑要执行 25万个指派任务 我们看一下你之前会怎么进行这件事
你的服务器发出一个请求 给Apple来管理授权 Apple同步回传给你一个回应 这个回应里带有 指派给需要装置的授权
一个请求只能处理一个应用程序 一次只能最多十台装置 最后只能完成十次指派
这需要至少25000个请求 来达成25万个指派 通过新的应用程序接口 最少25000个请求的数量 减少成只有十个 都是因为采用异步处理而成为可能 我们来看看要如何达成
左边这里 我们现在加上了 你的通知服务器 处理依然由你进行请求开始 让Apple管理资产 请求中 你提供sToken 在授权首部中 你现在可以提供我们多重的资产 在一次的请求中 最近上调成25个 这个动态限制 可以在服务设置中见端倪
提供最多1000台装置 来执行指派的任务 另一个动态限制 也可以在服务设置中发现 Apple会同步传回一个回应给你
在这个回应里 我们有HTTP状态代码 对新的应用程序接口来说很重要 发生错误时 我们回传适当的非200状态代码 所以你应该首先讯问响应 来确定它属于200再继续下去 之后 最重要的是 我们有一个独一无二的标识符 给这个异步事件 它的状态取得可以 由呼叫我们新的事件状态端点进行 或是等待配对指派的通知 当指派任务完成时 假定你已经完成订阅 Apple便会向你推送通知 这些通知的里面 每一个我们都会有一个子集 列出所有请求过的指派任务 在我们通知的有效负载里 有关于指派任务的元数据 指出其为成功或失败 类别、还有对应到的事件ID 你应该等待这些 成功指派的通知 这样才能接着送出安装指令 到列表上的装置上 还有另外一个好处 是我们全新的管理端点所拥有的 那就是排序 比方说你收到一个请求 需要重新指派一些资产 从一组用户换给另一组用户 这可以通过你依序发出的指令达成 先是分离的请求 再接上串连的请求 首先 你先传送分离的请求 Apple接着会响应事件ID 给分离的指令 接着你再传送对应的串连请求 Apple再响应另一个事件ID 但这次是给串连使用的 假定你已经订阅了 Apple会传送通知给你 当分离完成的时候 之后Apple会再传送另外的通知 当串连完成的时候 我们应用程序接口的巨大改变 如同通知这一部分 让你可以将你的状态与Apple同步 消除不断传送请求的需求 来确保你能拥有最新的状态
异步处理 让每一个人拥有更好的体验 不管是员工或是学生 都能使用到他们所需的内容 信息管理员能够快速完成大量的部署 你也能有效地管理 整个组织单位的资产
旧版的API目前仍然会持续支持 请注意 使用新旧版的API版本 并同时进行运作在同一个令牌上 不会获得官方支持
这个全新应用程序接口 是往前迈进的脚步 让Apps及Books管理进一步提升 从今天开始可用 我们期待你能测试并整合 到这个新的应用程序接口里 越快越好 提供给你的用户最优异的 应用程序与书籍管理的体验 想要了解更多 请参考 我们更新过的开发者文件 感谢你的宝贵时间 希望你喜欢WWDC的其他内容 [空灵的打击音乐]
-
-
2:43 - Asset Management Notification
{ "notification": { "assignments": [ { "adamId": "408709785", "pricingParam": "STDQ", "serialNumber": "C02Y402HLCM6" }, ... ], "eventId": "87cbc650-16cc-4f9e-a833-e622f377a9f7", "result": "SUCCESS", "type": "ASSOCIATE" }, "notificationId": "ba8bbb23-44c2-44f6-a928-eff6ba5ffac3", "notificationType": "ASSET_MANAGEMENT", "uId": "2049025000431439" }
-
4:39 - Get Assets Response
{ "assets": [ { "adamId": "408709785", "pricingParam": "STDQ", "assignedCount": 5000, "availableCount": 10000, "totalCount": 15000, ... } ], "currentPageIndex": 0, "size": 1, "totalPages": 1, ... }
-
5:09 - Asset Count Notification
{ "notification": { "adamId": "408709785", "countDelta": 50, "pricingParam": "STDQ" }, "notificationId": "4a7801be-53f0-42e1-9505-81c0d1dc9da3", "notificationType": "ASSET_COUNT", "uId": "2049025000431439" }
-
6:51 - Get Users Response
{ "currentPageIndex": 0, "size": 1, "totalPages": 1, "users": [ { "clientUserId": "client-100", "email": "client-100@example.com", "inviteCode": "f551b37da07146628e8dcbe0111f0364", "status": "Registered" } ], "versionId": "58507d60-9cd1-11eb-b916-1926dea207f9", ... }
-
7:49 - User Management Notification
{ "notification": { "users": [ { "clientUserId": "client-100", "idHash": "leSKk3IaE2vk2KLmv2k3/200D3=", "status": "Associated", ... }, ... ], "eventId": "e0def1f8-9158-4343-9c52-8dd32da50b9b", "result": "SUCCESS", "type": "UPDATE" }, "notificationId": "4c0bbb9b-d5a6-4860-83ef-5cf362783c1e", "notificationType": "USER_MANAGEMENT", "uId": "2049025000431439" }
-
8:33 - User Associated Notification
{ "notification": { "associatedUsers": [ { "clientUserId": "client-100", "idHash": "leSKk3IaE2vk2KLmv2k3/200D3=", "inviteCode": "f551b37da07146628e8dcbe0111f0364", "status": "Associated", ... } ] }, "notificationId": "90b83144-fb93-4837-9c52-0ae147bdc421", "notificationType": "USER_ASSOCIATED", "uId": "2049025000431439" }
-
12:25 - Associate Assets Request
{ "assets": [ { "adamId": "361309726", "pricingParam": "STDQ" }, ... ], "serialNumbers": [ "serial-1", ... "serial-1000" ] }
-
12:51 - Associate Assets Response
{ "eventId": "92467a8e-8a50-4df9-9b30-f7ff4a99dea7", "tokenExpirationDate": "2021-07-06T14:12:10+0000", "uId": "2049025000431439" }
-
13:24 - Asset Management Notification
{ "notification": { "assignments": [ { "adamId": "361309726", "pricingParam": "STDQ", "serialNumber": "serial-1" }, ... ], "eventId": "92467a8e-8a50-4df9-9b30-f7ff4a99dea7", "result": "SUCCESS", "type": "ASSOCIATE" }, ... }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。