大多数浏览器和
Developer App 均支持流媒体播放。
-
将最新动态播送到实时活动
借助广播推送通知,只需一个请求,你的 App 就能向数千个实时活动批量发送更新。我们将一起探索广播推送通知如何在 App、服务器和 Apple 推送通知服务之间发挥作用,然后为你讲解有关该功能及其实现方式的推荐做法。
章节
- 0:00 - Introduction
- 1:17 - Overview
- 4:57 - Get started
- 7:30 - Subscribe to updates
- 8:39 - Send broadcast push notifications
资源
- Forum: App & System Services
- Sending broadcast push notification requests to APNs
- Sending channel management requests to APNs
- Setting up broadcast push notifications
- Starting and updating Live Activities with ActivityKit push notifications
相关视频
WWDC23
-
下载
大家好 我是Parth 来自 Apple Push Notifications 团队 今天 我将向大家介绍一种新方法 通过一个推送通知 向大量受众播送实时活动的更新 利用实时活动 可一目了然地查看 正在进行的 活动的最新信息 实时活动的用途多种多样 包括跟踪物流状态、 了解当前比赛的比分 或关注即将起飞航班的信息 使用推送通知发送远程更新 可始终确保提供 实时活动的最新信息 在本视频中 我们将介绍实时活动如何 使用远程推送通知来提供最新动态 然后 我们将探讨如何开始 使用向实时活动 播送最新动态的新功能 以及你的 App 如何订阅广播更新 最后 我们将介绍 如何发送广播推送通知 从而同时为多台设备更新实时活动 首先 让我们看看 通过推送通知更新实时活动 具体是如何运作的 启动实时活动时 App 会向 ActivityKit 请求 一个推送令牌 ActivityKit 从 Apple 推送通知服务 (APNs) 接收这个推送令牌 并将推送令牌提供给 App 对于每项实时活动 App 在设备上请求的 推送令牌都是唯一的 然后 App 会与相应的 App 服务器 共享这个唯一的推送令牌
出现更新时 服务器就会向 APNs 发送 包含令牌和有效负载的推送通知 然后 APNs 将有效负载 发送到相应的设备 在物流跟踪等用例中 这种机制效果非常好 因为每次更新都是 针对每个人的专属更新 但是 在有些情况下 大量用户会主动查看同一事件的 最新动态 例如 数以万计的球迷都在关注 最喜欢的同一场比赛的比分 目前 在这种情况下 App 服务器需要为每个人管理 实时活动的推送令牌 当有更新时 服务器会为每个推送令牌 单独发送有效负载相同的推送通知 现在 我们有一种更好的方法 来构建这些体验 在 iOS 和 iPadOS 18 中 你可以利用 APNs 的 “广播推送通知”功能 让大量用户都能收到 实时活动的最新动态 利用“广播推送通知” 无需存储当前实时活动的 推送令牌 希望发送更新时 只需发送一条推送通知即可 APNs 会将通知 准确发送到每台设备 确保每个人都能获得最新信息
要想通过一次推送请求 向大量受众推送最新动态 我们需要一个名为频道的新概念
大家都知道电视或广播频道 广播公司通过频道发送内容 频道的任何听众 都会同时收到相同的内容 要对有大量受众关注的事件 使用广播推送通知 每个事件都需要与一个频道相关联 而频道通过一个唯一的 频道 ID 来标识 例如 使用广播推送通知 发送比分更新时 不同的体育比赛 需要使用不同的频道 用于航班更新时 每个航班也需要使用 自己的唯一频道
需要发布事件动态的 每个实时活动都需要 订阅相应频道上的推送通知 要发送事件动态时 只需在频道上发送一个 包含有效负载的推送通知即可 APNs 会将通知发送给 频道的所有订阅用户 这样一来就可以高效地 向所有用户发送最新动态信息 现在 让我们来讨论一下 如何使用广播推送通知 来发送实时活动的更新 团队即将举行一场足球友谊赛 我想开发一款 App 方便大家关注这场比赛
我的团队成员可为这款 App 开启实时活动 以便关注正在进行的比赛 由于很多人都会关注比分 因此非常适合 使用广播推送通知 同时向每个人的实时活动 发送最新动态 要使用广播推送通知 我需要为这场比赛创建一个频道 并获取一个唯一的频道 ID App 将使用这个频道 ID 来订阅更新 而服务器也将用它来发送更新 第一步是为 App 启用 新的广播功能 我们可以使用开发者门户来启用 在“Push Notifications”下的 功能列表中 有一个新开关可以打开广播功能 完成后 我就可以 创建 App 的第一个频道 为此 我将使用推送通知控制台 这样就可以轻松测试 与 APNs 的整合情况 控制台经过扩展后 可支持广播推送通知 要创建新频道 我将导航到“Channels”标签页
然后选择“New Channel” 然后我就可以为新频道配置 环境和信息存储策略 由于这项功能仍在测试中 因此我将在开发环境中创建新频道 对于信息存储策略 我们有两个选项: “No Storage”和 “Most Recent Message” 使用“Most Recent Message”时 会在频道上为设备 存储最新的延迟信息 使用“No Storage”时 只有在发送推送通知时 连接到 APNs 的设备 才会收到更新 但发布预算会更高 我们团队的足球比赛战况激烈 我需要频繁发送更新 因此我将选择“No Storage” 作为存储策略
点按“Create Channel”后 就有了这场比赛专用的新频道
这个频道 ID 用于 App 和服务器发布更新 频道 ID 采用 base64 编码 为每个频道随机生成 创建请求期间 可以再次访问这个页面 查看选择的配置
你可以通过两种不同方式 为你的 App 创建频道: 你可以使用推送通知控制台 轻松测试和集成广播推送通知 在生产环境中部署时 App 服务器应直接向 APNs 发送 频道创建请求 请参阅 APNs 的频道管理文档 了解更多信息 现在即将开赛的 足球比赛有了一个频道 我们需要为比赛存储 这个频道 ID 并与 App 共享 这样在实时活动开始时 App 就可以订阅广播更新 在我的 App 中 我会在实时活动开始之前 从远程服务器请求比赛的频道 ID 在我的 App 中 我将创建一个 启动实时活动的函数 首先 我会传入比赛频道 ID 这个 ID 是从远程服务器收到的 我将为活动创建属性 以及初始值 最后 在请求活动时 我会将参数“channel” 作为推送类型进行传递 包括频道 ID 这会指示 ActivityKit 在这个 ID 标识的频道上 订阅相应活动的推送更新 很好! 我马上就可以使用广播推送通知了 我已经为比赛创建了一个频道 当团队成员开始实时活动时 App 就会检索 我们创建的频道 ID 并订阅频道更新 现在 让我们来探讨一下 如何发送广播推送通知 一次性向所有设备发布最新动态 我们的比赛已经开始 主队早早领先 我想立即分享这一消息 要在频道上发送第一次广播推送 首先 我将再次使用 推送通知控制台 在推送通知控制台中 我会选择频道标签页 然后点按我刚才为比赛创建的频道 这里 我会点按 “New Notification” 控制台会帮你填写发送通知所需的 一些信息 包括频道 ID 首先 我为要发送的通知取个名字
由于我希望立即发送更新 因此我会选择高优先级 然后 我将使用有效负载生成器 为更新添加内容
首先 我需要加上主队的比分
然后 提供客队的比分
为实时活动添加简短的更新文本
最后 为更新添加当前时间戳 然后 点按“Send”
只需一个推送通知 每个人都会收到 关于新比分的更新!
使用广播推送通知时 需考虑的一点是 频道管理 频道的生命周期 和实时活动是相互独立的 创建频道后 即使没有活跃的订阅用户 即使所有人都关闭了实时活动 频道 ID 仍然有效 仍然可以用来发送广播推送通知 后续实时活动仍然可以 订阅这个频道 但是 活跃频道的总数是有限的 旧频道或闲置频道不再使用后 服务器应使用频道管理 API 将这些频道删除 对于我的足球比赛 一旦比赛结束 我就会删除这个频道 因为我不再需要它了 推送通知控制台是测试 与广播通知集成情况的趁手工具 在生产环境中部署时 服务器应直接向 APNs 发送请求 无论是频道管理请求 还是广播推送通知请求 都是如此 你应使用频道管理 API 为 App 创建或删除频道 你的 App 服务器应直接 向新的 APNs API 发送广播推送通知请求 你将使用与连接 APNs 相同的 认证方法 基于证书或令牌 来发送广播推送通知请求 请参阅相关文档 进一步了解这些 API
现在你已经知道 如何将 APNs 的广播更新 与实时活动搭配使用 请为你的 App 启用这项功能 使用推送通知控制台 创建第一个频道 在 App 中 借助 ActivityKit 使用新的频道推送类型 订阅实时活动更新 在频道上发送广播推送通知 提供实时活动的最新信息 最后 将 APNs 提供的新 API 集成到你的服务器中 这样就可以直接管理频道 并发送广播推送通知 我们无比期待你通过各种新方式 利用广播推送通知 让你的 App 更出彩 感谢观看!
-
-
7:50 - Subscribe a Live Activity to broadcast push notification updates
// Request a Live Activity and subscribe to broadcast push notifications import ActivityKit func startLiveActivity(channelId: String) { let gameAttributes = GameAttributes() let initialState = GameAttributes.ContentState( home: 0, away: 0, update: "First Half" ) try Activity.request( attributes: gameAttributes, content: .init(state: initialState, staleDate: nil), pushType: .channel(channelId) ) }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。