更新记录
1.0.1(2025-11-05)
移除无用的参数
1.0.0(2025-11-05)
支持 Android、iOS授权登录
平台兼容性
uni-app(4.76)
| Vue2 | Vue2插件版本 | Vue3 | Vue2插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.76)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | × | × |
tt-google-signin
🚀 Google 授权登录插件,为 uni-app x & uni-app 提供完整的 Google Sign-In 集成解决方案
📖 目录
SDK版本信息
| 平台 | 版本 | 支持状态 |
|---|---|---|
| iOS | 9.0.0 | ✅ 完全支持 |
| Android | Credential Manager 1.3.0 Google Identity 1.1.1 |
✅ 完全支持 |
功能支持矩阵
| 功能 | iOS | Android |
|---|---|---|
| Google登录 | ✅ | ✅ |
| Google退出登录 | ✅ | ✅ |
📚 推荐阅读:
🚨 重要提示
⚠️ 必须使用自定义基座运行,否则无法找到插件方法
⚠️ Android: 确保设备已安装 Google Play 服务(GMS),否则登录可能失败
⚠️ Android: 确保应用签名与 Google Cloud Console 配置的签名一致
⚠️ iOS: 确保在 Google Cloud Console 正确配置了 iOS 客户端 ID 和 URL Scheme
⚠️ 编译报错排查:本插件会定期更新至最新版SDK,某些情况下编译报错可能不是插件不可用,而是本地环境问题或与官方插件冲突,遇到此类情况可通过IM联系我协助解决
环境配置
前置条件
- 在 Google Cloud Console 创建项目
- 启用 Google Sign-In API
- 创建 OAuth 2.0 客户端 ID:
- Android: 配置应用包名和 SHA-1 证书指纹
- iOS: 配置 Bundle ID 和 URL Scheme
iOS平台配置
1. 配置 Info.plist
编辑插件内的 uni_modules/tt-google-signin/utssdk/app-ios/Info.plist,将以下配置项补充为您的实际值:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>GIDClientID</key>
<string>YOUR_IOS_CLIENT_ID</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_DOT_REVERSED_IOS_CLIENT_ID</string>
</array>
</dict>
</array>
</dict>
</plist>
配置说明:
YOUR_IOS_CLIENT_ID: 替换为您的 iOS OAuth 客户端 ID(格式:***-abcdefg.apps.googleusercontent.com)YOUR_DOT_REVERSED_IOS_CLIENT_ID: 替换为反向的客户端 ID(格式:com.googleusercontent.apps.123456789-abcdefg)- 反向客户端 ID:将客户端 ID 中的点(.)分隔的字段按相反顺序排列
- 例如:
***-abcdefg.apps.googleusercontent.com→com.googleusercontent.apps.123456789-abcdefg - 在 Google Cloud Console 的 iOS OAuth 客户端详情页面可以找到 "iOS URL Scheme"
Android平台配置
Android平台会自动完成相关配置,确保在 Google Cloud Console 正确配置应用包名和 SHA-1 证书指纹即可。
重要提示:
- 确保在 Google Cloud Console 创建了 Android OAuth 客户端 ID
- 配置正确的应用包名
- 配置正确的 SHA-1 证书指纹(用于签名验证)
- 使用自定义基座时,确保使用正确的签名证书
快速开始
1. 导入插件
uni-app x 版本
import * as googleSignin from "@/uni_modules/tt-google-signin";
export default {
data() {
return {
googleSDK: null as googleSignin.TTGoogleSign | null,
}
},
onLoad() {
// 初始化Google Sign SDK实例
this.googleSDK = googleSignin.getTTGoogleSign()
},
onUnload() {
// 页面销毁释放实例
this.googleSDK = null
},
methods: {
// 使用SDK功能
}
}
uni-app 版本
import * as googleSignin from "@/uni_modules/tt-google-signin";
export default {
data() {
return {
googleSDK: null,
}
},
onLoad() {
// 初始化Google Sign SDK实例
this.googleSDK = googleSignin.getTTGoogleSign()
},
onUnload() {
// 页面销毁释放实例
this.googleSDK = null
},
methods: {
// 使用SDK功能
}
}
功能介绍
Google 授权登录
💡 Google 登录使用 OAuth 2.0 协议,登录成功后会返回 ID Token 和 Access Token,可用于验证用户身份和访问 Google API
参数说明
TTGoogleLoginOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| serverClientId | string | ✅ | Google Web 客户端 ID,格式:xxxxx.apps.googleusercontent.com |
| (无) | 当前登录无需传入 scopes,返回基本信息所需权限由 SDK 处理 |
返回值 TTGoogleLoginSuccess
| 参数 | 类型 | 说明 |
|---|---|---|
| idToken | string | 用于验证用户身份的 ID Token(JWT格式) |
| accessToken | string | null | 用于访问 Google API 的 Access Token |
| userID | string | null | 用户ID(Google用户唯一标识) |
| name | string | null | 用户名称 |
| pictureURL | string | null | 用户头像URL |
| string | null | 用户邮箱 |
行为说明
- 登录成功必然返回
idToken(用于验证用户身份) accessToken在 iOS 平台通常可用,Android 平台可能为null(取决于 Credential Manager 实现)- 用户信息字段(
userID/name/pictureURL/email)在权限允许且平台可获取时返回 - 建议使用
idToken在后端验证用户身份,而不是依赖accessToken
示例代码
uni-app x 版本
// Google 授权登录
handleGoogleLogin() {
this.googleSDK?.login({
serverClientId: "YOUR_SERVER_CLIENT_ID.apps.googleusercontent.com", // 必填:Google Web 客户端 ID
success: (result) => {
console.log("✅ Google登录成功");
console.log("ID Token:", result.idToken.substring(0, 50) + "...");
if (result.accessToken != null) {
console.log("Access Token:", result.accessToken.substring(0, 50) + "...");
}
if (result.userID != null) {
console.log("用户ID:", result.userID);
}
if (result.name != null) {
console.log("用户名:", result.name);
}
if (result.email != null) {
console.log("邮箱:", result.email);
}
// 将 ID Token 发送到后端服务器进行验证
this.sendIdTokenToServer(result.idToken)
},
fail: (error) => {
console.error("❌ Google登录失败:", error);
uni.showToast({
title: error.errMsg || '登录失败',
icon: 'error'
})
},
complete: (res) => {
console.log("登录完成", res);
}
} as googleSignin.TTGoogleLoginOptions)
}
// 发送 ID Token 到后端服务器
sendIdTokenToServer(idToken: string) {
uni.request({
url: 'https://your-server.com/api/google/login',
method: 'POST',
data: { idToken },
success: (res) => {
// 处理登录成功逻辑
console.log('登录成功:', res.data)
},
fail: (err) => {
console.error('登录请求失败:', err)
}
})
}
uni-app 版本
// Google 授权登录
handleGoogleLogin() {
this.googleSDK.login({
serverClientId: "YOUR_SERVER_CLIENT_ID.apps.googleusercontent.com", // 必填:Google Web 客户端 ID
success: (result) => {
console.log("✅ Google登录成功");
console.log("ID Token:", result.idToken.substring(0, 50) + "...");
// 将 ID Token 发送到后端服务器进行验证
this.sendIdTokenToServer(result.idToken)
},
fail: (error) => {
console.error("❌ Google登录失败:", error);
uni.showToast({
title: error.errMsg || '登录失败',
icon: 'error'
})
},
complete: (res) => {
console.log("登录完成", res);
}
})
}
// 发送 ID Token 到后端服务器
sendIdTokenToServer(idToken) {
uni.request({
url: 'https://your-server.com/api/google/login',
method: 'POST',
data: { idToken },
success: (res) => {
console.log('登录成功:', res.data)
},
fail: (err) => {
console.error('登录请求失败:', err)
}
})
}
Google 退出登录
💡 退出当前 Google 账户登录状态
参数说明
TTGoogleLogoutOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| success | function | ❌ | 退出登录成功回调 |
| fail | function | ❌ | 退出登录失败回调 |
| complete | function | ❌ | 完成回调(无论成功或失败) |
返回值 TTGoogleLogoutSuccess
空对象,表示退出登录成功
示例代码
uni-app x 版本
// Google 退出登录
handleGoogleLogout() {
this.googleSDK?.logout({
success: (result) => {
console.log("✅ Google退出登录成功");
uni.showToast({
title: '退出登录成功',
icon: 'success'
})
},
fail: (error) => {
console.error("❌ Google退出登录失败:", error);
uni.showToast({
title: error.errMsg || '退出登录失败',
icon: 'error'
})
},
complete: (res) => {
console.log("退出登录完成", res);
}
} as googleSignin.TTGoogleLogoutOptions)
}
uni-app 版本
// Google 退出登录
handleGoogleLogout() {
this.googleSDK.logout({
success: (result) => {
console.log("✅ Google退出登录成功");
uni.showToast({
title: '退出登录成功',
icon: 'success'
})
},
fail: (error) => {
console.error("❌ Google退出登录失败:", error);
uni.showToast({
title: error.errMsg || '退出登录失败',
icon: 'error'
})
},
complete: (res) => {
console.log("退出登录完成", res);
}
})
}
错误处理
错误码说明
| 错误码 | 错误信息 | 适用场景 | 解决方案 |
|---|---|---|---|
| 系统环境错误 | |||
| 101 | 系统环境错误 | Android: Activity状态异常 iOS: 无法获取视图控制器 |
检查应用状态,确保在正确的生命周期调用 |
| 配置错误 | |||
| 108 | 登录结果为空 | iOS: 登录返回结果为空 | 重试登录,检查 SDK 回调 |
| 109 | 用户信息为空 | iOS: 用户对象为空 | 重试登录,或检查 Google 账号状态 |
| 110 | 缺少ID Token | iOS: 无法获取 idToken | 检查 Google 账号、授权范围及配置 |
| 登录凭据错误 | |||
| 103 | 不支持的登录凭据类型 | Android: 非 Google Id Token | 检查凭据类型 |
| 104 | 无法找到对应的凭据 | Android: 应用签名/包名不匹配或与Google连接失败 | 检查: - 应用包名是否正确 - SHA-1 证书指纹是否匹配 - 网络连接是否正常 |
| 105 | 登录组件缺失 | Android: GMS未安装或版本过低 | 检查设备是否安装 Google Play 服务 |
| 用户操作 | |||
| 106 | 用户取消登录 | Android/iOS: 用户主动取消 | 根据业务需求处理,通常可以忽略 |
| 退出登录 | |||
| 202 | 用户未登录 | iOS: 退出时未登录 | 确保已登录后再调用退出 |
| 其他错误 | |||
| 999 | 其他未知错误 | 所有功能 | 查看错误信息中的原始错误详情 |
错误处理示例
handleGoogleLogin() {
this.googleSDK?.login({
serverClientId: "YOUR_SERVER_CLIENT_ID.apps.googleusercontent.com",
success: (result) => {
// 登录成功处理
},
fail: (error) => {
// 根据错误码进行不同处理
switch(error.errCode) {
case 101:
console.error("系统环境错误,请检查应用状态");
break;
case 104:
console.error("无法找到凭据,请检查应用签名和包名配置");
break;
case 105:
console.error("登录组件缺失,请确保设备已安装 Google Play 服务");
uni.showModal({
title: '提示',
content: '请先安装 Google Play 服务',
showCancel: false
});
break;
case 106:
console.log("用户取消登录");
break;
case 108:
console.error("登录结果为空");
break;
case 109:
console.error("用户信息为空");
break;
case 110:
console.error("缺少ID Token");
break;
case 202:
console.error("用户未登录");
break;
case 999:
console.error("未知错误:", error.errMsg);
break;
}
},
complete: (res) => {
console.log("登录完成", res);
}
} as googleSignin.TTGoogleLoginOptions)
}
常见问题
1. 找不到插件方法?
解决方案: 确保使用自定义基座运行,标准基座不包含原生插件。
2. iOS平台登录无响应?
解决方案:
- 检查
uni_modules/tt-google-signin/utssdk/app-ios/Info.plist中的配置:GIDClientID是否正确配置CFBundleURLSchemes中的反向客户端 ID 是否正确
- 确认 Google Cloud Console 中的 iOS 客户端配置正确
- 验证 Bundle ID 是否匹配
3. Android平台登录失败?
解决方案:
- 确认设备已安装 Google Play 服务(GMS)
- 确认应用签名与 Google Cloud Console 配置的 SHA-1 证书指纹一致
- 检查包名是否正确
- 验证
serverClientId参数是否正确(Web 客户端 ID)
4. 提示"无法找到对应的凭据"(错误码 104)?
解决方案:
- Android:
- 检查应用包名是否与 Google Cloud Console 中配置的一致
- 检查 SHA-1 证书指纹是否匹配(注意:开发环境和生产环境使用不同签名)
- 确保在 Google Cloud Console 创建了 Android OAuth 客户端 ID
- 网络问题: 确保设备可以访问 Google 服务
5. 提示"登录组件缺失"(错误码 105)?
解决方案:
- Android: 确保设备已安装 Google Play 服务(GMS)
- 国内设备可能没有 GMS,需要用户手动安装或使用其他登录方式
- 可以通过 Google Play Store 检查 GMS 是否可用
6. iOS 提示"配置错误"(错误码 102)?
解决方案:
- 检查
Info.plist中的GIDClientID是否正确 - 检查
CFBundleURLSchemes中的反向客户端 ID 格式是否正确 - 确保在 Google Cloud Console 创建了 iOS OAuth 客户端 ID
- 验证反向客户端 ID 的计算是否正确(将客户端 ID 的字段按相反顺序排列)
7. accessToken 为 null?
解决方案:
- 这是正常现象,Android 平台的 Credential Manager 可能不返回 accessToken
- 建议使用
idToken在后端验证用户身份 - 如需访问 Google API,可以在后端使用
idToken或通过 OAuth 2.0 流程获取 accessToken
8. 如何获取反向客户端 ID?
解决方案:
- 在 Google Cloud Console 的 iOS OAuth 客户端详情页面,可以找到 "iOS URL Scheme"
- 该值即为反向客户端 ID,直接复制使用即可
- 手动计算:将客户端 ID(如
***-abcdefg.apps.googleusercontent.com)按点分隔,然后反序排列:com.googleusercontent.apps.123456789-abcdefg
9. 如何验证 ID Token?
解决方案:
- 在后端使用 Google 的 Token 验证 API 验证 ID Token
- 验证 ID Token 的签名和有效期
- 提取用户信息(sub、email、name 等)
- 参考:Google ID Token 验证文档
📞 技术支持
如果在使用过程中遇到问题,请:
- 查阅上方常见问题
- 参考 Google 官方开发文档
- 检查配置是否正确
- 确认 Google Cloud Console 配置
祝您开发愉快! 🎉

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 159
赞赏 1
下载 10722094
赞赏 1797
赞赏
京公网安备:11010802035340号