返回

Vanilla JS & PHP 生成 Agora Token: 实时音视频应用开发指南

php

在构建实时音视频应用的过程中,选择 Agora 作为平台是一个明智之举,它提供了丰富的功能和易于使用的 SDK。但当我们身处特定的开发环境,例如使用 Vanilla JavaScript 编写前端,PHP 作为后端,并且希望避免引入 Node.js 环境来生成 Agora Token 时,可能会面临一些挑战。本文将深入探讨如何在这样的环境下顺利生成 Agora Token,并提供一些切实可行的解决方案,帮助你克服这些障碍。

首先,我们需要了解 Agora Token 的作用。简单来说,它就像一把钥匙,只有持有这把钥匙的用户才能进入 Agora 的房间并使用其服务。这把钥匙包含了用户的权限信息,例如可以进入哪个房间(频道名称)、扮演什么角色(例如主播或观众)、钥匙的有效期等等。在客户端尝试加入频道之前,必须先获取到一把有效的 Token。

Agora 官方文档提供了多种生成 Token 的方法,例如使用 Node.js、Java、Python 等语言的 SDK。但如果我们坚持使用 Vanilla JavaScript 和 PHP,并且不想引入 Node.js 环境,就需要另辟蹊径。

一种可行的方案是利用 Agora 提供的 RESTful API。通过这种方式,我们可以使用 HTTP 请求来生成 Token,而无需依赖特定的 SDK。具体来说,我们可以用 PHP 编写一个简单的 API 接口,这个接口负责接收来自客户端的请求,然后调用 Agora 的 RESTful API 生成 Token,最后将 Token 返回给客户端。客户端则可以使用 JavaScript 发送 AJAX 请求到这个 PHP 接口,获取 Token 后就可以顺利加入频道了。

下面,我们来看一个使用 PHP 生成 Token 的示例代码:

<?php

// 替换成你的 App ID 和 App Certificate
$appId = "YOUR_APP_ID";
$appCertificate = "YOUR_APP_CERTIFICATE";

// 从客户端请求中获取频道名称
$channelName = $_POST["channelName"];

// 从客户端请求中获取用户 ID
$uid = $_POST["uid"];

// 设置 Token 的过期时间,单位为秒,例如 3600 秒代表 1 小时
$expireTimeInSeconds = 3600;

// 获取当前时间戳
$currentTimestamp = time();

// 计算 Token 的过期时间戳
$expireTimestamp = $currentTimestamp + $expireTimeInSeconds;

// 使用 Agora 的 RtcTokenBuilder 生成 Token
$token = RtcTokenBuilder::buildTokenWithUid($appId, $appCertificate, $channelName, $uid, RtcTokenBuilder::Role_Publisher, $expireTimestamp);

// 将生成的 Token 以 JSON 格式返回给客户端
echo json_encode(["token" => $token]);

?>

客户端可以使用 JavaScript 发送 AJAX 请求到这个 PHP 接口,获取 Token:

const channelName = "myChannel"; // 频道名称
const uid = "123"; // 用户 ID

fetch("/generateToken.php", { // 假设 PHP 接口的地址是 /generateToken.php
  method: "POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  body: `channelName=${channelName}&uid=${uid}` // 将频道名称和用户 ID 发送到 PHP 接口
})
.then(response => response.json()) // 将 PHP 接口返回的 JSON 数据解析成 JavaScript 对象
.then(data => {
  const token = data.token; // 获取 Token

  // 使用 Token 加入频道
  AgoraRTC.createClient({ mode: "rtc", codec: "vp8" }).join(token, channelName, uid, null, (uid) => {
    console.log("成功加入频道:", uid);
  });
});

需要注意的是,为了保障应用的安全性,App ID 和 App Certificate 应该妥善保管在服务器端,而不是暴露在客户端代码中。

除了使用 RESTful API,我们还可以选择使用 Agora 提供的 Server SDK 来生成 Token。Server SDK 提供了更强大的功能,例如批量生成 Token、管理用户权限等。我们可以根据实际需求选择合适的方案。

总而言之,在 Vanilla JavaScript 和 PHP 后端环境下生成 Agora Token 并非不可逾越的障碍。通过巧妙地利用 Agora 提供的 RESTful API 或 Server SDK,结合 PHP 后端编写简单的 API 接口,我们可以轻松实现 Token 的生成和分发。希望本文能够帮助开发者解决在特定环境下生成 Agora Token 的问题,为构建流畅的实时音视频应用扫清障碍。

常见问题及其解答

1. 如何获取 App ID 和 App Certificate?

你需要在 Agora 官网注册账号并创建一个项目,然后就可以在项目信息页面找到 App ID 和 App Certificate。

2. Token 的有效期应该设置多长?

Token 的有效期取决于你的应用场景。如果 Token 的有效期过短,用户可能需要频繁地重新获取 Token,影响用户体验;如果 Token 的有效期过长,则会增加安全风险。建议根据实际情况选择合适的有效期,例如 1 小时或 24 小时。

3. 如何设置用户的角色?

在生成 Token 时,可以通过 RtcTokenBuilder::Role_PublisherRtcTokenBuilder::Role_Subscriber 参数设置用户的角色。Role_Publisher 表示用户可以发布音视频流,Role_Subscriber 表示用户只能订阅音视频流。

4. 如何在客户端获取用户的 UID?

用户的 UID 可以由客户端自行生成,也可以由服务器端分配。在生成 Token 时,需要将用户的 UID 传递给 RtcTokenBuilder::buildTokenWithUid 方法。

5. 如何调试 Token 生成过程?

你可以使用浏览器开发者工具或网络抓包工具查看客户端发送的请求和服务器端返回的响应,检查 Token 是否正确生成。你也可以在服务器端打印日志信息,以便追踪 Token 生成过程。