原生控件
调用返回按钮、底部主按钮、设置按钮、弹窗与触觉反馈。
Mini App 是运行在 SafeW 客户端内的轻量 Web 应用。它保留 Web 开发效率,同时通过 JavaScript SDK 使用原生按钮、主题、存储、传感器与生物识别。
用户无需跳出聊天应用。Mini App 在 SafeW 内打开,并自动获得当前主题、视口与用户上下文。
在聊天中完成选择、填写与提交。
调用返回按钮、底部主按钮、设置按钮、弹窗与触觉反馈。
读取明暗模式、15 个主题色参数、视口和安全区域。
使用签名后的 initData 获取用户、聊天与启动信息。
按客户端支持情况使用传感器、定位与生物识别。
引入 SDK、读取全局对象,再尽早调用 ready() 通知客户端页面已经准备完成。
在 HTML 中加载 SafeW Web App JavaScript 文件。
所有属性、方法、UI 组件和事件都从这个对象进入。
通知客户端显示应用,并根据需要展开到最大可用高度。
<script src="https://oauth.safew.bot/js/safew-web-app.js"></script>
<script>
const sw = window.SafeW.WebApp;
sw.ready();
sw.expand();
sw.setHeaderColor("#171021");
sw.enableClosingConfirmation();
console.log(sw.initData);
console.log(sw.colorScheme);
</script>
全屏、方向锁定、分享与下载等能力存在最低客户端版本要求。调用前可使用 isVersionAtLeast(version) 判断。
不需要一次使用全部能力。优先选择能缩短用户路径、减少跳转或增强安全性的模块。
BackButton、BottomButton、SettingsButton、HapticFeedback 与原生弹窗。
主题参数、CSS 变量、安全区域、全屏、展开与屏幕方向控制。
监听主题、视图、按钮和生命周期变化,用 onEvent 与 offEvent 管理订阅。
打开外部链接、SafeW 内链接,分享消息、故事或下载文件。
在支持的设备上使用加速度计、陀螺仪和设备方向。
在用户授权后使用位置、指纹或面部识别相关能力。
不要用同一种存储承载所有数据。跨设备状态、本地缓存和敏感信息应分别处理。
适合需要跨设备同步的轻量偏好与业务状态。
适合设备缓存、草稿和无需跨设备同步的数据。
适合少量敏感值;仍应避免把 Bot Token 放入前端。
Mini App 负责交互,Bot 负责聊天消息,你的服务端负责业务逻辑和安全验证。
表单、按钮、主题与设备能力
校验 initData 并执行业务逻辑
发送结果、通知或下一步操作
const sw = window.SafeW.WebApp;
sw.onEvent("themeChanged", () => {
document.documentElement.dataset.theme = sw.colorScheme;
});
sw.MainButton.setText("提交");
sw.MainButton.onClick(() => {
sw.sendData(JSON.stringify({ action: "submit" }));
});
sw.MainButton.show();
该方法发送 1–4096 字节字符串,调用后 Mini App 会关闭,并通过 web_app_data 服务消息传递给 Bot。它仅适用于支持该方式的启动入口。
initDataUnsafe 适合界面展示,不应直接作为可信身份依据。真正的授权判断应使用原始 initData 在服务端验签。
先以 “WebAppData” 对 Bot Token 做 HMAC-SHA256 得到 secret_key,再验证数据 hash。
较新客户端可使用 Ed25519 平台公钥验证签名,适合无法持有 Bot Token 的第三方服务。
在服务端验证;检查 auth_date,建议有效期不超过 1 小时;使用常量时间比较;保护 Bot Token;注意 Base64 中 “+” 被错误解码为空格的问题。