
Cloudflare RealtimeKit Core SDKRTKPolls 会议投票模块 API 详解【免费下载链接】cloudflare-docsCloudflare’s documentation项目地址: https://gitcode.com/GitHub_Trending/cl/cloudflare-docsRealtimeKitRTK的投票功能由meeting.polls命名空间承载对应的 API 参考模块即RTKPolls它包含会议中已创建的所有投票polls并提供创建投票、发起投票两个核心操作。本文基于 RTKPolls API 参考结合 Polls 实战指南 与 Meeting 对象结构说明完整覆盖items属性、create()与vote()方法的参数、默认值以及Poll数据模型、结果读取与事件监听帮助你在 WebReact、Angular、Web Components与移动端Android、iOS、React Native应用中落地会议投票功能。RTKPolls 模块总览RTKPolls模块代表当前会议中已创建的全部投票挂载在meeting对象的polls属性上。根据 API 参考该模块的公开成员包括meeting.polls.items—— 数组属性返回会议中所有投票的列表每个元素是一个Poll类型对象meeting.polls.create(question, options, anonymous, hideVotes)—— 在会议中创建一个新的投票meeting.polls.vote(pollId, index)—— 对已存在的投票投出一票。拿到 polls 对象本身、查看全部投票的方式如下Web 端console.log(Polls object:, meeting.polls); // 所有投票元素类型为 Poll console.log(All polls:, meeting.polls.items);meeting对象是 RealtimeKit 会话的核心接口polls与self、participants、chat、plugins等命名空间并列在初始化 SDK 后即可访问这一点可以从 Meeting Object Explained 得到印证。数据模型Poll / PollOption / PollVote理解 API 之前先明确数据结构。Web 端React / Angular / Web Components与 React Native 中的Poll类型定义一致interface Poll { id: string; question: string; options: PollOption[]; anonymous: boolean; hideVotes: boolean; createdBy: string; createdByUserId: string; voted: string[]; // stores participant ID } interface PollOption { text: string; votes: { id: string; // stores participant ID name: string; }[]; count: number; }各字段含义id投票的唯一标识是vote()方法的第一个入参question/options问题文本与可选项列表anonymous是否匿名投票hideVotes是否隐藏票型不展示票数明细createdBy/createdByUserId创建者的显示名与用户 IDvoted已投票的参与者 ID 数组存的是 participant ID。Android 端的模型对应为 Kotlin 类createdByUserId在 Android 模型中未列出class Poll( val id: String, val question: String, val anonymous: Boolean, val hideVotes: Boolean, val createdBy: String, val options: ListPollOption, val voted: ListString, ) class PollOption( val text: String, val votes: ListPollVote, val count: Int ) class PollVote( val id: String, val name: String )iOS 端为 Swift 类字段与 Android 对齐class Poll { let id: String let question: String let anonymous: Bool let hideVotes: Bool let createdBy: String let options: [PollOption] let voted: [String] } class PollOption { let text: String let votes: [PollVote] let count: Int } class PollVote { let id: String let name: String }从结构看每一票PollVote都记录了投票者的id和nameanonymous与hideVotes两个布尔值决定了这些明细在 UI 上是否对外可见——匿名或隐藏票型的投票选项票数仍然汇总在count中但不应在界面上展示votes明细。创建投票meeting.polls.create()参数与默认值Web 端create()的参数如下anonymous与hideVotes默认均为false见 API 参考参数类型默认值说明questionstring必填投票的问题文本optionsstring[]必填投票的选项列表anonymousbooleanfalse为true时投票匿名hideVotesbooleanfalse为true时隐藏该投票的票数Web 端React / Angular / Web Components / React Native 均为await meeting.polls.create(...)风格示例// 创建一个匿名投票 await meeting.polls.create( Are you an early bird or a night owl?, [Early bird, Night owl], true, );Android 端create()为同步方法返回一个PollsError?成功时为nullval pollsCreateError: PollsError? meeting.polls.create( question Are you an early bird or a night owl?, options listOf(Early bird, Night owl), anonymous true, hideVotes false )iOS 端方法名为createPoll()同样返回可选的PollsError?let pollsCreateError: PollsError? meeting.polls.createPoll( question: Are you an early bird or a night owl?, options: [Early bird, Night owl], anonymous: true, hideVotes: false )两个平台都通过「错误对象或空值」的返回值表达结果调用方应检查返回值非空时处理对应的PollsError。投票meeting.polls.vote()Web 端vote(pollId, index)接受两个参数参数类型说明pollIdstring要投票的目标投票 IDindexnumber所选选项的下标从 0 开始对会议中第一个投票投出第一个选项的一票const poll meeting.polls.items[0]; await meeting.polls.vote(poll.id, 0);移动端按平台签名略有差异。Android 的vote()接收投票 ID 与PollOption对象本身val poll: Poll meeting.polls.items.first() val selectedPollOption: PollOption poll.options.first() val pollsError: PollsError? meeting.polls.vote(poll.id, selectedPollOption)iOS 端则直接传入Poll与PollOptionlet poll: Poll meeting.polls.items[0] let selectedPollOption: PollOption poll.options[0] meeting.poll.vote(poll, selectedPollOption)React Native 与 Web 签名一致await meeting.poll.vote(poll.id, 0)即可注意此处文档示例中对象名写作meeting.poll实际访问入口统一为meeting.polls。查看投票结果无需额外请求结果直接从items中已同步的Poll对象读取// 该投票已投票者的参与者 ID 列表 const poll meeting.polls.items[0]; const votes poll.voted; // string[]元素为 participant ID // 各选项的票型明细votes 明细 汇总 count const options poll.options;votes是参与者 ID 数组对应meeting.participant.idoptions是PollOption数组每个元素携带text、投票明细votes含投票者id与name以及汇总票数count。Android / iOS 侧字段访问方式相同poll.voted、poll.options。当anonymous或hideVotes为true时建议在渲染层过滤掉votes明细、仅展示count。监听投票创建与更新meeting.polls.items每次被创建或更新时都会触发pollsUpdate事件回调参数包含polls全部投票的最新列表与newPoll布尔值为true时表示本次更新是由新投票创建引起的meeting.polls.on(pollsUpdate, ({ polls, newPoll }) { console.log(Polls updated:, polls); console.log(Is new poll:, newPoll); });在 React 应用中如果使用了RealtimeKitProvider可以直接用 selector hook 订阅视图会在投票变化时自动更新import { useRealtimeKitSelector } from cloudflare/realtimekit-react; // useRealtimeKitSelector hook only works when RealtimeKitProvider is used. const polls useRealtimeKitSelector((m) m.polls.items);Android 与 iOS 使用监听器接口RtkPollsEventListener通过meeting.addPollsEventListener(...)注册meeting.addPollsEventListener(object : RtkPollsEventListener { override fun onNewPoll(poll: Poll) { // 新投票被创建 } override fun onPollUpdate(poll: Poll) { // 单个投票更新如有人投票、详情变化 } override fun onPollUpdates(pollItems: ListPoll) { // 投票列表整体更新含新投票创建或多个投票同时更新 } })extension MeetingViewModel: RtkPollsEventListener { func onNewPoll(poll: Poll) { // 处理新投票 } func onPollUpdates(pollItems: [Poll]) { // 处理投票及其投票数据的更新 } func onPollUpdate(poll: Poll) {} }三个回调的分工可以推断为onNewPoll只负责新增onPollUpdate针对单个投票的变更典型场景是有人投票onPollUpdates则是列表级快照更新适合用来整体刷新 UI。配套 UI 组件Polls Bottom Sheet如果不想自己渲染投票界面UI KitAndroid提供了现成组件可直接查看其 API 参考RtkPollsBottomSheet列出用户可访问的全部投票的底部弹窗RtkCreatePollBottomSheet创建投票的底部弹窗。两者都通过show(fragmentManager, tag)展示val rtkPollsBottomSheet RtkPollsBottomSheet() rtkPollsBottomSheet.show(fragmentManager, POLLS_TAG)val rtkCreatePollBottomSheet RtkCreatePollBottomSheet() rtkCreatePollBottomSheet.show(fragmentManager, CREATE_POLL_TAG)小结与实践要点入口统一meeting.polls是投票功能的唯一命名空间items提供实时状态create()/vote()提供操作默认行为Web 端anonymous与hideVotes默认false非匿名、票数可见需要匿名或隐藏票数时显式传true返回值差异Web 端方法是异步的awaitAndroid/iOS 端是同步返回PollsError?/PollsError?错误处理路径不同状态同步优先订阅pollsUpdate或RtkPollsEventListener而非轮询itemsnewPoll字段可帮你区分新建投票与投票数据变更两类场景隐私语义anonymous/hideVotes为true时只展示count不展示votes明细投票者 ID 与姓名。完整的多平台代码与参数表可继续参考 Polls 指南、Core SDK API 参考目录 以及 Meeting 对象结构说明。【免费下载链接】cloudflare-docsCloudflare’s documentation项目地址: https://gitcode.com/GitHub_Trending/cl/cloudflare-docs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考