如何在Unity(Android&iOS)中用Firebase实现邮箱6位OTP
Firebase无密码OTP登录及相关问题解决方案
一、原生实现邮箱OTP登录(用noreply@PROJECT_ID.firebase.com,无需第三方)
Firebase Auth内置了邮箱OTP无密码登录能力,完全满足你的需求,不用自己基于Realtime Database造轮子:
控制台配置
- 打开Firebase控制台 → 「认证」→「登录方式」,启用「邮箱/密码」和「邮箱链接(无密码登录)」(若用纯OTP,可直接启用「登录代码」功能,需确认SDK版本支持)
- 进入「认证」→「模板」,找到「登录代码」或「无密码登录」模板:
- 编辑邮件主题,比如「【你的项目名】登录验证码」
- 正文里插入
{{otp}}占位符,Firebase会自动替换为6位随机验证码 - 可上传项目Logo、自定义正文内容,强化正式感
Unity端代码实现
发送OTP
using Firebase.Auth; // 用户输入的邮箱 string userEmail = "user@example.com"; // 发送登录验证码 FirebaseAuth.DefaultInstance.SendSignInCodeToEmailAsync(userEmail) .ContinueWith(task => { if (task.IsCompletedSuccessfully) { // 验证码已通过noreply@PROJECT_ID.firebase.com发送 var codeInfo = task.Result; // 保存session信息(可选,用于后续验证时的校验) } else { // 处理错误,比如邮箱格式不正确、发送频率超限等 Debug.LogError($"发送失败: {task.Exception}"); } });
验证OTP并登录
// 用户输入的6位验证码 string inputOtp = "123456"; FirebaseAuth.DefaultInstance.SignInWithEmailAndCodeAsync(userEmail, inputOtp) .ContinueWith(task => { if (task.IsCompletedSuccessfully) { FirebaseUser user = task.Result; // 登录成功,获取用户凭证 Debug.Log($"登录成功: {user.DisplayName}"); } else { Debug.LogError($"验证失败: {task.Exception}"); } });
二、自定义OTP模板及触发
自定义模板完全在Firebase控制台完成:
- 进入「认证」→「模板」,选择对应模板(「登录代码」对应纯OTP登录,「无密码登录」对应链接+OTP的场景)
- 编辑模板的主题、正文、Logo:
- 必须保留
{{otp}}占位符,否则无法生成验证码 - 可添加项目介绍、安全提示等内容,提升用户信任度
- 必须保留
- 触发无需额外配置,调用上述
SendSignInCodeToEmailAsync方法时,Firebase会自动使用你配置的模板发送邮件
三、Firebase Hosting是否提供项目专属邮箱?
不,Firebase Hosting仅提供静态网站托管服务,不包含邮箱托管能力。如果需要使用自定义域名的邮箱(比如noreply@yourdomain.com),必须绑定Google Workspace(原G Suite):
- 在Google Workspace中为你的域名创建
noreply@yourdomain.com邮箱 - 回到Firebase控制台→「认证」→「模板」→「发件人邮箱」,选择「自定义邮箱」并绑定你的Workspace邮箱
- 完成DNS验证后,Firebase即可用自定义邮箱发送OTP邮件
四、提升邮箱正式感的低成本方案(无需第三方)
如果不想用Google Workspace,用Firebase自带的noreply@PROJECT_ID.firebase.com也能优化正式感:
- 在模板中上传项目官方Logo,Firebase支持直接插入图片
- 邮件主题明确标注项目名称,比如「【XX游戏】登录验证码,5分钟内有效」
- 正文开头说明邮件用途,比如「这是你的XX项目登录验证码,请勿转发给他人」
内容的提问来源于stack exchange,提问作者eagle
相关产品推荐
相关产品推荐

