Meet 插件快速入门

本指南介绍了如何通过创建主舞台和侧边栏来设置和运行示例 Google Meet 插件。本页中的“Hello World”示例也可在 GitHub 上找到,它们是使用基本 JavaScriptNext.js TypeScript 构建的完整 Meet 插件。

Meet 插件 SDK 的主界面和侧边栏。
Meet Web 插件的主舞台和侧边面板。

安装并导入 SDK

您可以使用 npm 或使用 gstatic 访问 SDK。

如果您的项目使用 npm,您可以按照 Meet 插件 SDK npm 软件包的说明操作。

首先,安装 npm 软件包:

npm install @googleworkspace/meet-addons

然后,通过导入 MeetAddonExport 接口,即可使用 Meet 插件 SDK:

import {meet} from '@googleworkspace/meet-addons/meet.addons';

对于 TypeScript 用户,TypeScript 定义会与模块打包在一起。

gstatic

Google Meet 插件 SDK 以 JavaScript 软件包的形式从 gstatic(一个用于提供静态内容的网域)中提供。

如需使用 Meet 插件 SDK,请将以下脚本标记添加到您的应用中:

<script src="https://www.gstatic.com/meetjs/addons/1.1.0/meet.addons.js"></script>

Meet 插件 SDK 可通过 window.meet.addon 下的 MeetAddon 接口获取。

创建侧边栏页面

侧边栏会显示您可以选择和使用的已安装插件。选择插件后,一个 iframe 会加载您在插件清单中指定的侧边栏网址。它应是应用的入口点,并且至少应执行以下操作:

  1. 指示插件加载已完成。 在加载插件时,Meet 会显示一个加载屏幕。通过调用 createAddonSession() 方法建立插件会话后,Meet 会将此视为来自插件的以下信号:加载已完成,且用户可以与第三方内容互动。在内容加载完毕之前,您的插件不应调用 createAddonSession() 方法。

  2. 创建侧边栏客户端。如需在侧边栏中访问 Meet 插件 SDK,您必须实例化 MeetSidePanelClient 接口。这样可以控制您的主要 Meet 插件 SDK 体验。

  3. 启动 activity。这样,其他人就可以加入您的插件,并可选择在主舞台中打开您的插件。

以下代码示例展示了会话如何创建侧边栏客户端,以及侧边栏客户端如何在主舞台中启动 activity:

基本 JS + Webpack

在名为 main.js 的新文件中,定义一个函数,用于创建插件会话(即侧边栏客户端),并在用户点击 ID 为 'start-activity' 的按钮时启动相应 activity:

import { meet } from '@googleworkspace/meet-addons/meet.addons';

const CLOUD_PROJECT_NUMBER = 'CLOUD_PROJECT_NUMBER';
const MAIN_STAGE_URL = 'MAIN_STAGE_URL';

/**
 * Prepares the Add-on Side Panel Client, and adds an event to launch the
 * activity in the main stage when the main button is clicked.
 */
export async function setUpAddon() {
    const session = await meet.addon.createAddonSession({
        cloudProjectNumber: CLOUD_PROJECT_NUMBER,
    });
    const sidePanelClient = await session.createSidePanelClient();
    document
        .getElementById('start-activity')
        .addEventListener('click', async () => {
            await sidePanelClient.startActivity({
                mainStageUrl: MAIN_STAGE_URL
            });
        });
}

在名为 SidePanel.html 的新文件中,定义启动 activity 的按钮,并在文档加载时从 main.js 调用该函数:

<html>
<head>
    <title>Meet Add-on Side Panel</title>
    <script src="./main.js"></script>
</head>

<body style="width: 100%; height: 100%; margin: 0">
    <div>This is the Add-on Side Panel. Only you can see this.</div>
    <button id="start-activity">Launch Activity in Main Stage.</button>

    <script>
        document.body.onload = () => {
            // Library name (`helloWorld`) is defined in the webpack config.
            // The function (`setUpAddon`) is defined in main.js.
            helloWorld.setUpAddon();
        };
    </script>
</body>
</html>

您还需要将 Meet 插件 SDK 与 main.js 捆绑在一起,并在库中公开它们。我们建议您通过 安装 webpack 并在 webpack.config.js 文件中使用 library 选项来实现此目的:

module.exports = {
    entry: './main.js',
    output: {
        library: 'helloWorld',
        ...
    },
    ...
};

Next.js

添加新的 Page 以显示侧边栏。此页面会在加载时创建插件会话和侧边栏客户端,并在用户点击按钮时启动 activity:

'use client';

import { useEffect, useState } from 'react';
import {
    meet,
    MeetSidePanelClient,
} from '@googleworkspace/meet-addons/meet.addons';

export default function Page() {
    const [sidePanelClient, setSidePanelClient] = useState<MeetSidePanelClient>();

    // Launches the main stage when the main button is clicked.
    async function startActivity(e: unknown) {
        if (!sidePanelClient) {
            throw new Error('Side Panel is not yet initialized!');
        }
        await sidePanelClient.startActivity({
            mainStageUrl: 'MAIN_STAGE_URL'
        });
    }

    /**
     * Prepares the Add-on Side Panel Client.
     */
    useEffect(() => {
        (async () => {
            const session = await meet.addon.createAddonSession({
                cloudProjectNumber: 'CLOUD_PROJECT_NUMBER',
            });
            setSidePanelClient(await session.createSidePanelClient());
        })();
    }, []);

    return (
        <>
            <div>
                This is the Add-on Side Panel. Only you can see this.
            </div>
            <button onClick={startActivity}>
                Launch Activity in Main Stage.
            </button>
        </>
    );
}

替换以下内容:

  • CLOUD_PROJECT_NUMBER:您的 Google Cloud 项目的项目编号。

  • MAIN_STAGE_URL:您在下一步中创建的主要阶段网址。

创建主舞台页面

主舞台是主要焦点区域,如果需要更大的操作空间,您可以在其中显示插件。主舞台会在 activity 启动后打开。如需在主阶段中使用 Meet 插件 SDK 功能,您必须使用 MeetMainStageClient 接口。

以下代码示例展示了一个主界面页面示例,该页面呈现一个自定义 div,显示“Hello, world!”:

基本 JS + Webpack

将以下函数添加到您已创建的 main.js 文件中,以便主舞台可以发出已完成加载的信号:

/**
 * Prepares the Add-on Main Stage Client, which signals that the add-on has
 * successfully launched in the main stage.
 */
export async function initializeMainStage() {
    const session = await meet.addon.createAddonSession({
        cloudProjectNumber: CLOUD_PROJECT_NUMBER,
    });
    await session.createMainStageClient();
}

然后,添加一个新的 MainStage.html 文件,该文件会调用新的 initializeMainStage 函数并显示自定义的“Hello, world”内容:

<html>
<body style="width: 100%; height: 100%; margin: 0">
    <div>
        This is the Add-on Main Stage. Everyone in the call can see this.
    </div>
    <div>Hello, world!</div>

    <script>
        document.body.onload = () => {
            helloWorld.initializeMainStage();
        };
    </script>
</body>
</html>

Next.js

添加 Page 以显示主 Stage。此页面会在加载时创建插件会话和侧边栏客户端,并显示自定义的“Hello World”内容:

'use client';

import { useEffect } from 'react';
import { meet } from '@googleworkspace/meet-addons/meet.addons';

export default function Page() {
    /**
     * Prepares the Add-on Main Stage Client, which signals that the add-on
     * has successfully launched in the main stage.
     */
    useEffect(() => {
        (async () => {
            const session = await meet.addon.createAddonSession({
                cloudProjectNumber: 'CLOUD_PROJECT_NUMBER',
            });
            await session.createMainStageClient();
        })();
    }, []);

    return (
        <>
            <div>
                This is the Add-on Main Stage.
                Everyone in the call can see this.
            </div>
            <div>Hello, world!</div>
        </>
    );
}

CLOUD_PROJECT_NUMBER 替换为您的 Google Cloud 项目的项目编号。

运行示例

如需在本地运行,请执行以下操作:

基本 JS + Webpack

运行 webpack,以将 main.js 文件与 Meet 插件 SDK 捆绑在一起:

npx webpack

在任意浏览器中打开 SidePanel.html 文件和 MainStage.html 文件。 这应该与将 GitHub 上的基本 JS 示例部署到 GitHub Pages 上的 SidePanel.htmlMainStage.html 相同。

Next.js

运行下一个:

next dev

前往 http://localhost:3000/sidepanelhttp://localhost:3000/mainstage。这些代码应与将 GitHub 上的 Next.js 示例部署到 GitHub 页面上的 SidePanel.htmlMainStage.html 一样。

部署 Meet 插件

按照部署 Meet 插件中的说明设置插件部署。

运行示例

  1. 前往 Meet

  2. 点击活动 activity 的图标。

  3. 您的插件部分,您应该会看到您的插件。选择该容器以运行该插件。

添加更多功能

现在,您已经有了基本的侧边栏和主屏幕,接下来可以开始向您的插件添加其他功能了:

建议您参考 GitHub 上的示例 Meet 插件来构建这些功能。