本指南介绍如何使用 Cloudflare RealtimeKit 在会议中创建、投决并与投票进行交互。
可以使用 meeting.polls 访问会议投票对象。它提供了创建投票、投决等方法。
console.log("Polls object:", meeting.polls);meeting.polls.items 属性返回在会议中创建的所有投票的数组,其中每个元素都是 Poll 类型的对象。
console.log("All polls:", meeting.polls.items);可以使用 meeting.polls 访问会议投票对象。它提供了创建投票、投决等方法。
console.log("Polls object:", meeting.polls);meeting.polls.items 属性返回在会议中创建的所有投票的数组,其中每个元素都是 Poll 类型的对象。
console.log("All polls:", meeting.polls.items);您可以使用 meeting.polls 对象访问会议中的投票功能。该对象提供了创建投票、投决和执行其他投票相关操作的方法。
要检索在会议期间创建的所有投票,请使用 meeting.polls.items。这将返回一个数组,其中每个元素都是 com.cloudflare.realtimekit.polls.Poll 类型的对象。
可以使用 meeting.polls 访问会议投票对象。它提供了创建投票、投决等方法。
meeting.polls.items 返回在会议中创建的所有投票的数组,其中每个元素都是 Poll 类型的对象。
可以使用 meeting.polls 访问会议投票对象。它提供了创建投票、投决等方法。
meeting.polls.items 返回在会议中创建的所有投票的数组,其中每个元素都是 Poll 类型的对象。
可以使用 meeting.polls 访问会议投票对象。它提供了创建投票、投决等方法。
meeting.polls.items 返回在会议中创建的所有投票的数组,其中每个元素都是 Poll 类型的对象。
Poll 类型定义如下:
interface Poll {
id: string;
question: string;
options: PollOption[];
anonymous: boolean;
hideVotes: boolean;
createdBy: string;
createdByUserId: string;
voted: string[]; // 存储参与者 ID
}
interface PollOption {
text: string;
votes: {
id: string; // 存储参与者 ID
name: string;
}[];
count: number;
}Poll 类型定义如下:
interface Poll {
id: string;
question: string;
options: PollOption[];
anonymous: boolean;
hideVotes: boolean;
createdBy: string;
createdByUserId: string;
voted: string[]; // 存储参与者 ID
}
interface PollOption {
text: string;
votes: {
id: string; // 存储参与者 ID
name: string;
}[];
count: number;
}Poll 类型表示会议内的投票:
class Poll(
val id: String,
val question: String,
val anonymous: Boolean,
val hideVotes: Boolean,
val createdBy: String,
val options: List<PollOption>,
val voted: List<String>,
)每个投票包含一个 PollOption 对象列表,表示该投票的可用选项。
每个 PollOption 包含一个 PollVote 对象列表,其中每个投票包含投票者的 id 和 name。
class PollOption(
val text: String,
val votes: List<PollVote>,
val count: Int
)class PollVote(
val id: String,
val name: String
)Poll 类型定义如下:
class Poll {
let id: String
let question: String
let anonymous: Bool
let hideVotes: Bool
let createdBy: String
let options: [PollOption]
let voted: [String]
}Poll 类型是 RealtimeKit 中任何投票的主类。它还包含 PollOption 列表,这些是给定投票的选项。并且每个 PollOption 内部都有一组投票。投票是 PollVote 类的对象,其内部包含投票的 id 和 name。
class PollOption {
let text: String
let votes: [PollVote]
let count: Int
}
class PollVote {
let id: String
let name: String
}Poll 类型定义如下:
class Poll {
final String id;
final String question;
final bool anonymous;
final bool hideVotes;
final String createdBy;
final List<PollOption> options;
final List<String> voted;
}Poll 类具有以下属性:
id:分配给每个投票的唯一 ID。question:投票的问题。anonymous:即使在完成后也隐藏每个用户的投票。(默认为 false)hideVotes:在投票完成之前隐藏票数。(如果启用了匿名,则会启用)createdBy:投票创建者的姓名。options:PollOption对象数组,包含投票问题的所有选项。voted:包含已投决的用户 ID 的字符串数组。
Poll 类型表示 RealtimeKit 会议中的投票。它还包含 PollOption 列表,这些是给定投票的选项。并且每个 PollOption 内部都有一组投票。投票是 PollVote 类的对象,其内部包含投票的 id 和 name。
class PollOption(
final String text; // 选项文本。
final List<PollVote> votes; // 投票列表。
final int count; // 投票数。
);
class PollVote {
final String id; // 投票者的 ID。
final String name; // 投票者的姓名。
}Poll 类型定义如下:
interface Poll {
id: string;
question: string;
options: PollOption[];
anonymous: boolean;
hideVotes: boolean;
createdBy: string;
createdByUserId: string;
voted: string[]; // 存储参与者 ID
}
interface PollOption {
text: string;
votes: {
id: string; // 存储参与者 ID
name: string;
}[];
count: number;
}可以使用 meeting.polls 对象的 create 方法来创建新投票。meeting.polls.create() 方法接受以下参数:
question(string) - 投票问题options(string[]) - 投票选项数组anonymous(boolean) - 投票是否匿名hideVotes(boolean, 可选) - 是否隐藏投票计数
以下片段创建了一个投票,其中投票是匿名的:
await meeting.polls.create(
"Are you an early bird or a night owl?",
["Early bird", "Night owl"],
true,
);可以使用 meeting.polls 对象的 create 方法来创建新投票。meeting.polls.create() 方法接受以下参数:
question(string) - 投票问题options(string[]) - 投票选项数组anonymous(boolean) - 投票是否匿名hideVotes(boolean, 可选) - 是否隐藏投票计数
以下片段创建了一个投票,其中投票是匿名的:
await meeting.polls.create(
"Are you an early bird or a night owl?",
["Early bird", "Night owl"],
true,
);要创建新投票,请使用 meeting.polls 对象上可用的 create 方法。meeting.polls.create() 函数需要以下参数:
| 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
| question | String |
是 | 要投决的问题。 |
| options | List<String> |
是 | 投票的选项。 |
| anonymous | Boolean |
是 | 如果为 true,则投票是匿名的。 |
| hideVotes | Boolean |
是 | 如果为 true,则隐藏该投票的票数。 |
以下片段创建了一个投票,其中投票是匿名的。
val 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
)可以使用 meeting.polls 对象的 create 方法创建新投票。meeting.polls.createPoll() 方法接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| question | string |
- | 是 | 要投决的问题。 |
| options | string[] |
- | 是 | 投票的选项。 |
| anonymous | boolean |
- | 否 | 如果为 true,则投票是匿名的。 |
| hideVotes | boolean |
- | 否 | 如果为 true,则隐藏该投票的票数。 |
以下片段创建了一个投票,其中投票是匿名的。
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
)可以使用 meeting.polls 对象的 create 方法创建新投票。meeting.polls.create(...) 方法接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| question | String |
- | 是 | 要投决的问题。 |
| options | List<String> |
- | 是 | 投票的选项。 |
| anonymous | bool |
- | 是 | 如果为 true,则投票是匿名的。 |
| hideVotes | bool |
- | 是 | 如果为 true,则隐藏该投票的票数。 |
以下片段创建了一个投票,其中投票是匿名的。
meeting.polls.create(
question: "Are you an early bird or a night owl?",
options: ["Early bird", "Night owl"],
anonymous: true,
hideVotes: false,
);可以使用 meeting.polls 对象的 create 方法创建新投票。meeting.polls.create() 方法接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| question | string |
- | 是 | 要投决的问题。 |
| options | string[] |
- | 是 | 投票的选项。 |
| anonymous | boolean |
false | 否 | 如果为 true,则投票是匿名的。 |
| hideVotes | boolean |
false | 否 | 如果为 true,则隐藏该投票的票数。 |
以下片段创建了一个投票,其中投票是匿名的。
await meeting.poll.create(
"Are you an early bird or a night owl?",
["Early bird", "Night owl"],
true,
);meeting.polls.vote() 方法可用于对投票进行投决。它接受以下参数:
pollId(string) - 投票的 IDoptionIndex(number) - 所选选项的索引
以下片段对在会议中创建的第一个投票的第一个选项进行投决:
const poll = meeting.polls.items[0];
await meeting.polls.vote(poll.id, 0);meeting.polls.vote() 方法可用于对投票进行投决。它接受以下参数:
pollId(string) - 投票的 IDoptionIndex(number) - 所选选项的索引
以下片段对在会议中创建的第一个投票的第一个选项进行投决:
const poll = meeting.polls.items[0];
await meeting.polls.vote(poll.id, 0);要对投票进行投决,请使用 meeting.polls.vote() 方法。该方法需要以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| pollMessage | Poll |
- | 是 | 要投决的投票消息。 |
| pollOption | PollOption |
- | 是 | 要投决的选项。 |
以下片段对在会议中创建的第一个投票的第一个选项进行投决。
val poll: Poll = meeting.polls.items.first()
val selectedPollOption: PollOption = poll.options.first()
val pollsError: PollsError? = meeting.polls.vote(poll.id, selectedPollOption)meeting.polls.vote() 方法可用于对投票进行投决。它接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| pollMessage | Poll |
- | 是 | 要投决的投票消息。 |
| pollOption | PollOption |
- | 是 | 要投决的选项。 |
以下片段对在会议中创建的第一个投票的第一个选项进行投决。
let poll: Poll = meeting.polls.items[0]
let selectedPollOption: PollOption = poll.options[0]
meeting.poll.vote(poll, selectedPollOption)meeting.polls.vote() 方法可用于对投票进行投决。它接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| pollMessage | Poll |
- | 是 | 包含所有投票属性(问题、选项等)。 |
| pollOption | PollOption |
是 | 是 | 用户投决的选项 |
以下片段对在会议中创建的第一个投票의 第一个选项进行投决。
final poll = meeting.polls.items[0];
final selectedPollOption = poll.options[0];
meeting.polls.vote(poll: poll, pollOption: selectedPollOption);meeting.polls.vote() 方法可用于对投票进行投决。它接受以下参数:
| 参数 | 类型 | 默认值 | 是否必填 | 描述 |
|---|---|---|---|---|
| id | string |
- | 是 | 要进行投决的投票的 ID。 |
| index | number |
- | 是 | 选项的索引。 |
以下片段对在会议中创建的第一个投票的第一个选项进行投决。
const poll = meeting.polls.items[0];
await meeting.poll.vote(poll.id, 0);可以通过以下方式访问投票的总票数:
const poll = meeting.polls.items[0];
const votes = poll.voted;votes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
const poll = meeting.polls.items[0];
const options = poll.options;options 返回一个对象数组,其中每个对象都是 PollOption 类型的。
可以通过以下方式访问投票的总票数:
const poll = meeting.polls.items[0];
const votes = poll.voted;votes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
const poll = meeting.polls.items[0];
const options = poll.options;options 返回一个对象数组,其中每个对象都是 PollOption 类型的。
可以通过以下方式访问投票的总票数:
val poll = meeting.polls.items[0]
val votes = poll.votedvotes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
val poll = meeting.polls.items[0]
val options = poll.optionsoptions 返回一个对象数组,其中每个对象都是 PollOption 类型的。
可以通过以下方式访问投票的总票数:
let poll = meeting.polls.items[0]
let votes = poll.votedvotes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
let poll = meeting.polls.items[0]
let options = poll.optionsoptions 返回一个对象数组,其中每个对象都是 PollOption 类型的。
可以通过以下方式访问投票的总票数:
final poll = meeting.polls.items.first;
final votes = poll.voted;votes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
final poll = meeting.polls.items.first;
final options = poll.options;options 返回一个对象数组,其中每个对象都是 PollOption 类型的。
可以通过以下方式访问投票的总票数:
const poll = meeting.polls.items[0];
const votes = poll.voted;votes 是参与者 ID(meeting.participant.id)的数组。
可以通过以下方式访问投票选项的总票数:
const poll = meeting.polls.items[0];
const options = poll.options;options 返回一个对象数组,其中每个对象都是 PollOption 类型的。
每次更新或创建 meeting.polls.items 时,都会触发一个事件。您可以对此进行监听以获取更新的投票列表。响应对象包含以下属性:
polls- 所有投票的列表newPoll- 布尔变量,创建新投票时为true
meeting.polls.on("pollsUpdate", ({ polls, newPoll }) => {
console.log("Polls updated:", polls);
console.log("Is new poll:", newPoll);
});每次更新或创建 meeting.polls.items 时,都会触发一个事件。您可以对此进行监听以获取更新的投票列表。响应对象包含以下属性:
polls- 所有投票的列表newPoll- 布尔变量,创建新投票时为true
meeting.polls.on("pollsUpdate", ({ polls, newPoll }) => {
console.log("Polls updated:", polls);
console.log("Is new poll:", newPoll);
});或者,您可以使用 React hooks 来监听投票更新:
import { useRealtimeKitSelector } from "@cloudflare/realtimekit-react";
// useRealtimeKitSelector hook 仅在使用了 `RealtimeKitProvider` 时有效。
const polls = useRealtimeKitSelector((m) => m.polls.items);每次更新或创建 meeting.polls.items 时,都会触发一个事件。您可以对此进行监听以获取更新的投票列表。响应对象包含以下属性:
polls- 所有投票的列表newPoll- 布尔变量,创建新投票时为true
meeting.polls.on("pollsUpdate", ({ polls, newPoll }) => {
console.log(polls, newPoll);
});要在会议期间接收有关新投票或投票更改的更新,请实现 RtkPollsEventListener 接口。使用 meeting.addPollsEventListener(rtkPollsEventListener) 注册您的监听器。
每当在会议中创建新投票时,都会调用 onNewPoll() 方法。
当特定投票更新时,会调用 onPollUpdate() 方法,例如参与者投票或投票详情更改。当投票列表有更新时,会调用 onPollUpdates() 方法,包括创建新投票或同时更新多个投票。使用这些回调可以使您的投票 UI 与最新的投票数据保持同步。
meeting.addPollsEventListener(object : RtkPollsEventListener {
override fun onNewPoll(poll: Poll) {
}
override fun onPollUpdate(poll: Poll) {
}
override fun onPollUpdates(pollItems: List<Poll>) {
}
}
)为了能够接收新的投票消息,您需要实现 RtkPollsEventListener 回调中的 onPollUpdates() 方法。您可以通过调用 meeting.addPollsEventListener(meetingViewModel) 来订阅这些事件。
extension MeetingViewModel: RtkPollsEventListener {
func onNewPoll(poll: Poll) {
// 处理新投票的代码
}
func onPollUpdates(pollItems: [Poll]) {
// 处理投票及其选票更新的代码
}
func onPollUpdate(poll: Poll) {}
}为了能够接收新的投票消息,您需要实现 RtkPollsEventListener 回调中的 onPollUpdates() 方法:
要获取投票更新,请监听 onPollUpdates() 回调:
class PollEventsListener extends RtkPollsEventListener {
@override
void onPollUpdates(List<Poll> pollItems) {
/// 处理投票的代码
}
@override
void onNewPoll(Poll poll) {
/// 处理新投票的代码
}
}您可以按如下方式订阅这些事件:
meeting.addPollsEventListener(PollEventsListener());