更新记录

1.0.0(2026-11-05)

  • 新增 Android Credential Manager 与 iOS GoogleSignIn 官方原生身份登录实现,支持 ID Token 与 nonce;实际平台验收边界见 README。
  • 新增本地环境检查,按凭据组件所需最低 Google Play 服务版本检测 Android 可用性。
  • 新增本地退出、按请求编号取消登录等待、可配置超时、并发保护与单次回调。
  • 新增原生与 UTS 脱敏诊断、完整报告一键复制、固定快照分段及复制失败手动回退。
  • 新增 uni-app Vue2/Vue3 与 uni-app x 分类示例,按登录、会话、测试和配置 tabs 展示全部公开能力,保留公共状态与完整日志。
  • 新增真实接口空 ID、无效时限和无请求取消测试入口,以及开发者 OAuth 配置、后端验签与多端验收说明。

平台兼容性

uni-app(5.33)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × √ - - - ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

uni-app x(5.33)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × - - × ×

Google 授权登录 UTS 插件

介绍

lizhao-google-login 面向 uni-app、uni-app x,封装 Google 官方原生身份登录,在 Android、iOS 取得 ID Token,由业务后端验签后建立自己的账号会话。提供登录、本地退出、取消超时、环境检查和脱敏诊断。当前作为开发者接入与自测源码交付;真实 OAuth 登录、后端验签及 iOS Apple 编译/真机回跳仍需在自己的应用中验收,不能把本地编译或参数测试视为登录成功。

功能特色

功能 对应 API / 配置 用途
Google 身份登录 signInGoogle Android 使用 Credential Manager,iOS 使用 GoogleSignIn,成功返回非空 ID Token 和可取得的资料
本地环境检查 checkGoogleLoginEnvironment 检查前台上下文、Google Play 服务版本、配置、iOS 回跳与原生忙碌状态
一次性挑战 nonce 原样传给 SDK,供后端绑定登录请求、核对并防止重放
本地退出 signOutGoogle 清除本应用 Google 登录或凭据选择状态;业务会话需另外退出
取消与超时 cancelGoogleLogin、timeoutMs 按请求编号取消本地登录等待,隔离重复与迟到回执
诊断读取与清理 getGoogleLoginDiagnosticsSync、clearGoogleLoginDiagnosticsSync 汇总脱敏的 UTS / 原生日志,清理诊断不会改变账号状态
分类示例 登录 / 会话 / 测试 / 配置 tabs 覆盖全部公开 API,保留状态、环境和底部完整报告;两种宿主功能一致
完整报告 示例报告辅助模块 一键复制、固定快照分段、失败手动回退,记录环境来源与日志丢弃情况

适合哪些场景

场景 推荐能力 使用边界
应用提供 Google 账号登录 signInGoogle → 自己的后端验签 Android 需要可用 GMS;设备网络与账号可访问 Google
现有业务账号绑定 Google 后端关联验签后的 sub 不以邮箱、昵称或客户端成功标记作为可信身份
登录请求防重放 后端下发一次性 nonce 后端绑定请求、校验并单次消费,插件不生成固定挑战
页面关闭、授权中断 保存请求编号并取消登录等待 iOS 系统授权 UI 可能仍需用户关闭;不撤销已授予权限
配置或基座问题排查 环境检查、复现一次后复制日志 本地检查无法证明后台登记、真实网络和后端 audience 正确

本插件只处理身份认证,不提供 accessToken、refreshToken、serverAuthCode、额外 scopes、Google 撤权或业务后端登录接口。访问 Drive、Calendar 等 API 需另行实现对应授权;无需为了使用本插件额外接入 Firebase 或 uniCloud。

下载与导入

宿主 示例代码位置
uni-app uni_modules/lizhao-google-login/example/uniapp/index.vue
uni-app x uni_modules/lizhao-google-login/example/uniappx/index.uvue

从基础到进阶:按业务模块使用

基础功能配置示例

接入前准备

步骤 必须准备的内容 检查方式
1. 导入 完整保留 uni_modules/lizhao-google-login/ 页面从插件根目录导入,避免直接引用 utssdk 实现
2. Web 客户端 自己 Google Cloud 项目的 Web 类型 OAuth Client ID 两端传给 serverClientId;不能用 Android 类型 ID 替代
3. Android 登记 同项目的 Android OAuth 客户端,登记实际包名和签名 SHA-1 调试、正式、Play App Signing 的签名分别核实
4. iOS 登记 实际 Bundle ID 对应的 iOS OAuth 客户端、Client ID 和反转 URL Scheme 与 Web 类型分开;配置合入最终安装包
5. 原生构建 使用包含该插件的原生联编或自定义基座 标准基座不含插件,WGT 不能增加或替换原生 SDK
6. 账号与后端 按项目的 OAuth 发布/测试状态配置账号访问;业务后端完成 ID Token 验签 本地环境满足后仍需真实账号测试

Google Cloud 后台由项目管理者操作;若 Google 要求账号安全验证,需该账号本人完成。Client ID 是公开应用标识,Client Secret 是服务端秘密,插件不接收 Secret,不应将密码、证书私钥或 Token 写入前端配置。

插件按每次调用配置,无需额外的初始化 API。下面的 UTS 函数可放在 uni-app x 页面脚本中,由登录按钮传入页面中填写的真实 Web Client ID;省略 nonce、iosClientId 和 timeoutMs 时分别采用未设置、读取 iOS Bundle 配置、120000 毫秒。iOS 仍须完成下文的 Bundle 配置。

import { signInGoogle, GoogleSignInOptions } from '@/uni_modules/lizhao-google-login'

function requestGoogleLogin(webClientId: string): string {
  const options: GoogleSignInOptions = {
    serverClientId: webClientId,
    success: (result) => {
      // result.idToken 通过 HTTPS 交给自己的业务后端;不打印、保存或复制令牌。
      console.log('已取得 Google 凭据,等待后端验签;请求=' + result.requestId)
    },
    fail: (error) => { console.log('Google 登录失败:' + error.errCode.toString() + ';' + error.errMsg) },
    complete: (result) => { console.log('完成回调:' + result.errCode.toString()) }
  }
  return signInGoogle(options)
}

注册示例页面

在各自宿主的 pages.json 的 pages 数组中加入对应对象,保留其他页面。uni-app x 使用:

{
  "path": "uni_modules/lizhao-google-login/example/uniappx/index",
  "style": { "navigationBarTitleText": "Google授权登录" }
}

uni-app 的 Vue2 / Vue3 使用:

{
  "path": "uni_modules/lizhao-google-login/example/uniapp/index",
  "style": { "navigationBarTitleText": "Google授权登录" }
}

iOS 配置代码

将下面片段合并到 uni_modules/lizhao-google-login/utssdk/app-ios/Info.plist 已有的 <dict> 中,替换所有 YOUR_... 为自己项目的真实值。保留宿主原有的其他 URL Scheme;示例字符串不能直接用于登录。Android 不需要这些字段。

<key>GIDClientID</key>
<string>YOUR_IOS_CLIENT_ID.apps.googleusercontent.com</string>
<key>GIDServerClientID</key>
<string>YOUR_WEB_CLIENT_ID.apps.googleusercontent.com</string>
<key>CFBundleURLTypes</key>
<array><dict><key>CFBundleURLSchemes</key><array>
  <string>com.googleusercontent.apps.YOUR_IOS_CLIENT_ID</string>
</array></dict></array>

反转 Scheme 使用 Google 控制台提供的 iOS URL Scheme;不要反转 Web ID。调用时传入的 iosClientId 与 Bundle 中 GIDClientID 同时存在时须一致;serverClientId 与 GIDServerClientID 同时存在时也须一致。配置变更后重新构建 iOS 原生包。参考 Google iOS 配置指南。

高级示例

组合配置与精确取消

以下 UTS 示例适用于 uni-app x。webClientId 来自自己的 Web 客户端,iosClientId 在 Android 传空字符串、在 iOS 可传真实 ID 或留空读取 Bundle,challenge 来自自己的后端。页面调用 loginWithChallenge;关闭页面或点击取消时调用 cancelOwnLogin。业务先限制一次原生操作,插件也会拒绝冲突请求。

import { signInGoogle, cancelGoogleLogin, GoogleSignInOptions } from '@/uni_modules/lizhao-google-login'
let loginRequestId = ''

function loginWithChallenge(webClientId: string, iosClientId: string, challenge: string) {
  if (loginRequestId.length > 0) return
  const options: GoogleSignInOptions = {
    serverClientId: webClientId,
    iosClientId: iosClientId,
    nonce: challenge,
    timeoutMs: 30000,
    success: (result) => { console.log('已取得凭据,请交后端核对挑战;请求=' + result.requestId) },
    fail: (error) => { console.log('授权结果:' + error.errCode.toString() + ';' + error.errMsg) },
    complete: (result) => { if (loginRequestId == result.requestId) loginRequestId = '' }
  }
  loginRequestId = signInGoogle(options)
}

function cancelOwnLogin() {
  if (loginRequestId.length == 0) return
  const result = cancelGoogleLogin(loginRequestId)
  console.log('本地等待已取消=' + result.cancelled.toString() + ';系统界面可能保留=' + result.nativeUiMayRemain.toString())
}
配置或操作 示例行为 必须保留的处理
nonce: challenge 将后端的一次性挑战原样交 SDK 不用固定值;后端验证归属和单次消费;最长 512 字符且无空白/控制字符
timeoutMs: 30000 最多等待 30 秒 超时返回 9365010;外部授权结果未知,不能显示成功或直接重复弹窗
iosClientId 显式传入或留空读取 Bundle 显式值仍须与 Bundle 一致;Android 留空
cancelGoogleLogin(loginRequestId) 只结束对应登录的本地等待 不取消退出操作;不存在的请求返回 cancelled=false
页面卸载 调用 cancelOwnLogin 或直接按活动请求号取消 忽略旧页面回执;iOS 系统授权界面可能仍需用户关闭

环境检查、退出与诊断

以下 UTS 函数可直接放入页面脚本。环境检查不用登录账号,也不代表后台登记验证通过。inspectGoogle 传入实际配置或空字符串查看缺失项;logoutGoogle 由“本地退出”按钮调用;诊断函数由各自按钮触发,不自动上传。

import { checkGoogleLoginEnvironment, signOutGoogle, getGoogleLoginDiagnosticsSync, clearGoogleLoginDiagnosticsSync } from '@/uni_modules/lizhao-google-login'

function inspectGoogle(webClientId: string, iosClientId: string) {
  checkGoogleLoginEnvironment({
    serverClientId: webClientId,
    iosClientId: iosClientId,
    success: (result) => { console.log('本地可用=' + result.available.toString() + ';' + result.checks.join(';')) },
    fail: (error) => { console.log('环境检查失败:' + error.errCode.toString()) },
    complete: (result) => { console.log('环境检查完成:' + result.errCode.toString()) }
  })
}
function logoutGoogle() {
  signOutGoogle({
    timeoutMs: 30000,
    success: (result) => { console.log('本地退出完成;业务后端会话请另行退出') },
    fail: (error) => { console.log('退出失败:' + error.errCode.toString() + ';' + error.errMsg) },
    complete: (result) => { console.log('退出完成回调:' + result.errCode.toString()) }
  })
}
function readGoogleDiagnostics() {
  const result = getGoogleLoginDiagnosticsSync()
  console.log('插件=' + result.pluginId + ';公共日志=' + result.logs.length.toString() + ';丢弃=' + result.droppedLogs.toString())
}
function clearGoogleDiagnostics() {
  clearGoogleLoginDiagnosticsSync()
  console.log('插件诊断已清理,账号状态不变')
}

后端通过可信库验证 Google ID Token 的签名、iss、aud、exp,再用验签后的 sub 关联用户;设置 nonce 时还要验证挑战。客户端解码 JWT 或拿到一个非空字符串都不等于建立可信业务会话。参考 Google 后端验签指南。

完整示例

页面分类与功能入口

交付示例统一使用紧凑业务 tabs。默认显示“登录”,选中态清晰;切换只改变展示,保留配置、请求、忙碌状态和已有日志,不重新调用 SDK。状态与诊断放公共区域,错误不会因切换分类而消失。示例的“测试”页同时给出填写配置、检查环境、登录或取消、本地退出的操作顺序;六个公开 API 均可从分类或公共区域触发。

分类 / 公共区域 能力 / API 测试方法
登录 serverClientId、signInGoogle 输入自己项目的 Web ID,点击 Google 登录;成功仅显示 Token 存在与长度
会话 signOutGoogle 点击“退出本地会话”,核对 success / fail / complete;不移除手机账号
测试 signInGoogle 空配置 点击“空 ID”,Android / iOS 应返回 9365003,不能发起原生授权
测试 signOutGoogle 无效时限 点击“无效时限”,传 1ms,应返回 9365001,不能实际清除登录状态
测试 cancelGoogleLogin('') 空闲时点击“无请求取消”,应显示 cancelled=false
配置 iosClientId、nonce、timeoutMs 输入配置后切回登录;nonce 原样传递,时限也应用于本地退出
公共状态 cancelGoogleLogin(requestId) 登录等待时点击取消;退出请求期间该按钮禁用
公共环境 checkGoogleLoginEnvironment OAuth 未填也可检查;配置完成后重查本地条件,观察 GMS / 回跳 / 忙碌状态
公共诊断 getGoogleLoginDiagnosticsSync、clearGoogleLoginDiagnosticsSync 读取快照、清理插件日志;页面历史和既有报告仍保留
底部日志 一键复制 / 完整报告 / 复制下一段 / 更新快照 检查环境来源、完整日志与首尾标记;分段共享同一报告号,复制失败不推进

完整分类页面路径:uni-app x 为 uni_modules/lizhao-google-login/example/uniappx/index.uvue;uni-app 为 uni_modules/lizhao-google-login/example/uniapp/index.vue。页面模板主源是 uni_modules/lizhao-google-login/example/page.template;保留脚本、回调与完整报告合同,两宿主仅语法和滚动适配不同。

下面分别给出两种宿主可复制的完整最小页面,串联输入、忙碌保护、成功/失败/完成和卸载取消。它们不包含示例页面的全部样式与报告实现;需要全部功能时直接注册上述真实分类页面。

uni-app x 完整最小页面

页面输入实际 Web Client ID;iOS Client ID 从已配置 Bundle 读取。

<template>
  <view style="padding:12px">
    <input v-model="clientId" placeholder="Web Client ID" />
    <button :disabled="busy" @click="login">使用 Google 账号登录</button>
    <text>{{ status }}</text>
  </view>
</template>
<script setup lang="uts">
import { ref } from 'vue'
import { signInGoogle, cancelGoogleLogin, GoogleSignInOptions } from '@/uni_modules/lizhao-google-login'
const clientId = ref('')
const status = ref('尚未登录')
const busy = ref(false)
let requestId = ''
function login() {
  if (busy.value) return
  busy.value = true
  const options: GoogleSignInOptions = {
    serverClientId: clientId.value,
    timeoutMs: 120000,
    success: (result) => {
      // 将result.idToken通过HTTPS交业务后端验签;这里仅显示存在性,不打印或保存令牌。
      status.value = '已取得身份凭据,等待后端验签'
    },
    fail: (error) => { status.value = error.errCode.toString() + ':' + error.errMsg },
    complete: (result) => {
      if (requestId != result.requestId) return
      requestId = ''
      busy.value = false
    }
  }
  requestId = signInGoogle(options)
}
onUnload(() => { if (requestId.length > 0) cancelGoogleLogin(requestId) })
</script>

uni-app Vue2 / Vue3 完整最小页面

通用 Options API,带环境检查、登录、本地退出与卸载取消。

<template>
  <view>
    <input v-model="clientId" placeholder="Web Client ID" />
    <button @click="inspect">检查环境</button>
    <button :disabled="busy" @click="login">使用 Google 账号登录</button>
    <button :disabled="busy" @click="logout">本地退出</button>
    <text>{{ status }}</text>
  </view>
</template>
<script>
import { checkGoogleLoginEnvironment, signInGoogle, signOutGoogle, cancelGoogleLogin } from '@/uni_modules/lizhao-google-login'
export default {
  data() { return { clientId: '', status: '尚未登录', requestId: '', busy: false } },
  onUnload() { if (this.requestId) cancelGoogleLogin(this.requestId) },
  methods: {
    inspect() {
      checkGoogleLoginEnvironment({ serverClientId: this.clientId,
        success: result => { this.status = result.available ? '本地条件满足' : result.checks.join(';') },
        fail: error => { this.status = error.errCode + ':' + error.errMsg }
      })
    },
    login() {
      if (this.busy) return
      this.busy = true
      this.requestId = signInGoogle({ serverClientId: this.clientId,
        success: result => { this.status = '已取得ID Token,等待业务后端验签' },
        fail: error => { this.status = error.errCode + ':' + error.errMsg },
        complete: result => {
          if (this.requestId !== result.requestId) return
          this.requestId = ''
          this.busy = false
        }
      })
    },
    logout() {
      if (this.busy) return
      this.busy = true
      this.requestId = signOutGoogle({ success: result => { this.status = '本地退出完成,业务会话需后端另行退出' },
        fail: error => { this.status = error.errCode + ':' + error.errMsg },
        complete: result => {
          if (this.requestId !== result.requestId) return
          this.requestId = ''
          this.busy = false
        }
      })
    }
  }
}
</script>

开发者验收清单

场景 操作与期望 所需条件
未配置 测试页空 ID 返回 9365003;环境给出缺失项 匹配原生包;无需真实 Client ID
无效时限 测试页返回 9365001;日志记录一次 fail / complete 匹配原生包;无需真实 Client ID
GMS 不满足 检查不可用;Android 登录应返回 9365006 可复现的服务缺失、禁用或版本过低设备;不要求为测试修改主力机
正常登录 官方授权完成,success 带非空 ID Token,complete 一次 自己的 Web ID、实际包名/签名或 Bundle 配置、可访问 Google 的网络与账号
后端验证 验签、audience、有效期、挑战通过后建立业务会话 自己的后端与一次性挑战;该步骤由接入者实现
取消 / 超时 系统取消 9365008;本地主动取消 9365009;超时 9365010;迟到结果不再触发成功 真实授权;可将配置时限设为 10000ms 并保持授权等待
切换 / 重复点击 分类切换保留输入及请求;忙碌时不发第二次登录;卸载后不更新旧页面 授权等待期间测试
本地退出 success / fail 如实反馈;设备 Google 账号与后端会话不被擅自删除 可用原生 SDK;不需要 Client ID
报告与剪贴板 复制后实际粘贴,核对报告号、首尾标记、条数、长度、环境来源、脱敏及各分段可重组 目标宿主真实剪贴板;模拟/静态检查不能替代
复制失败 / 长报告 失败展示真实错误和手动文本;分段只在成功后前进;更新快照才重置分段 在测试宿主构造剪贴板失败或大量操作日志
iOS 回跳 正确 Scheme 能回到应用;缺失/冲突明确报错;取消后重试无旧结果污染 Apple 编译、签名安装包和真实 iOS 设备
不支持端 Web / Harmony / 小程序保留本身的其他登录方式;参数合法后本插件业务失败 9365002 对应宿主构建与实际运行;不能把页面可显示算作 Google 登录支持

两端示例底部可复制的报告包含运行环境、插件和原生构建来源、脱敏结果/异常及本页保留的完整日志,页面只显示最近摘要。uni_modules/lizhao-google-login/example/report.uts 为报告主源,uni_modules/lizhao-google-login/static/report.js 是同源生成的传统宿主模块。页面报告缓存上限 1000 条 / 1MiB UTF-8,截断会记录丢弃数量与范围。未知 HX 编译版本、基座身份等明确标记 unknown;不以排查电脑的版本代替安装包构建来源。分段使用同一固定快照,复制失败保留原段并提供手动复制,复制不清空日志。

API 用途速查

API 返回 用途
checkGoogleLoginEnvironment(options) string请求编号 异步报告本地前置条件,available不保证外部服务可用
signInGoogle(options) string请求编号 取得ID Token,支持nonce、超时和单次success/fail/complete
signOutGoogle(options) string请求编号 清除本应用Google本地状态,不能代替服务端退出或Google撤权
cancelGoogleLogin(requestId) GoogleLoginCancelResult 精确取消本地登录等待;不取消其他请求或正在执行的退出
getGoogleLoginDiagnosticsSync() GoogleLoginDiagnostics 读取脱敏公共/原生快照,不含业务凭据
clearGoogleLoginDiagnosticsSync() void 清理插件诊断;不改授权/账号状态,也不清除页面既有报告

登录、环境与退出参数

参数 类型 必填 说明 默认值 可选参数
serverClientId string 登录必填,环境检查选填 Web类型OAuth ID;两端语义一致 无 自己的Web Client ID
iosClientId string/null 否 iOS类型;必须匹配Bundle配置;Android不使用 读取GIDClientID 自己的iOS Client ID
nonce string/null 否 后端挑战,最长512字符,不含空白/控制符;只用于登录 不传 后端生成的一次性值
timeoutMs number/null 否 登录/退出时限,单位毫秒,10000–300000整数 120000 范围内整数
success function 否 登录成功包含凭据;环境检查包含检查结果;退出为无凭据摘要 无 业务回调
fail function 否 GoogleLoginFail,包含统一错误和脱敏原生原因 无 业务回调
complete function 否 无论成功失败均至多一次,只含摘要 无 业务回调
requestId string 取消必填 由该次登录返回的编号,不能复用别的请求编号 无 对应活动请求

checkGoogleLoginEnvironment只接收clientId相关字段及回调;signOutGoogle只接收timeoutMs及回调。callback缺省时仍执行真实操作和诊断;建议至少提供fail与complete。所有业务回调异步派发,返回请求编号后才交付;同一次success与fail互斥,complete最多一次。回调抛错被隔离并记录,不阻止complete。

登录结果与资料

GoogleLoginSuccess必含errSubject、errCode=0、errMsg、requestId、platform、非空idToken。userId、email、displayName、givenName、familyName、avatarUrl可为null。Android选定Google ID SDK的id只有邮箱语义,所以userId=null;不要把邮箱当稳定sub。iOS资料来自SDK,也须以服务器验签结果为准。示例不保存令牌、不输出前后缀、不自动复制凭据。

GoogleLoginComplete只含errSubject/errCode/errMsg/requestId/platform。GoogleLoginFail额外包含nativeCode/nativeType/nativeCause/nativeStack,未知字段写unknown;详细原文先脱敏。GoogleLoginEnvironment含nativeSupported/available/hasActivity/nativeBusy/googlePlayServicesStatus/serverClientIdConfigured/iosClientIdConfigured/urlSchemeConfigured/sdkVersion/nativeBuildId/packageName/checks/limitations;Android不适用的iOS字段为false,iOS的GMS状态为-1,具体边界写入limitations。Android按当前凭据组件所需的最低Google Play服务版本检查:状态2表示需要更新服务,状态0仅表示本地服务版本检查通过,不代表网络、OAuth配置或真实授权已验证。

GoogleLoginDiagnostics含插件ID、版本及来源构建标记、生成时间、运行端、公共日志、丢弃条数、诊断失败计数和脱敏原生快照。构建标记只是对应源码的身份,不能单独证明实际安装了匹配原生包。

取消返回值

字段 类型 含义
errSubject / errCode / errMsg string / number / string 统一错误主题与取消操作摘要;没有活动请求时也可返回 errCode=0
requestId string 本次尝试取消的请求编号
cancelled boolean 是否确实结束了匹配登录请求的本地等待;没有匹配请求时为 false
nativeCancellationRequested boolean 原生层是否确认收到取消请求,不代表撤回 Google 授权
nativeUiMayRemain boolean 系统授权界面可能仍保留,关闭后检查环境再重试

错误码说明

errSubject统一为lizhao-google-login。取消、超时均不会撤销已在Google端发生的操作;超时的外部结果保持未知。缺token、坏回执、配置失败均不作为登录成功。

错误码 含义 处理建议
9365001 参数无效 核对nonce、类型、时限范围和整数约束
9365002 当前平台不支持 只在Android/iOS调用,其他端保留自己的登录方式
9365003 OAuth配置无效 区分Web与iOS客户端ID,检查冲突/占位值及后台登记
9365004 iOS回跳Scheme缺失 合并Info.plist、核对实际Bundle并重新原生联编
9365005 原生操作仍在进行 等待系统授权UI结束,检查环境后重试
9365006 Google Play服务不可用 检查GMS安装/版本/禁用状态;不靠旧SDK绕过无GMS
9365007 无可用Google凭据 检查账号、设备、网络及OAuth签名配置
9365008 用户取消系统授权 按正常用户取消处理,不自动弹第二次窗口
9365009 本地主动取消 等待/关闭系统UI后按需要重试,未撤销外部授权
9365010 等待超时 外部结果未知,检查原生忙碌状态和网络再重试
9365011 无可用前台页面 页面可交互且Activity/ViewController有效时调用
9365012 原生SDK失败 提供脱敏完整报告,保留底层错误分类与阶段
9365013 缺少有效ID Token 检查Web客户端ID和OAuth配置,不使用空token
9365014 桥接或回执无效 核对源码、原生基座与运行资源是否匹配
9365015 凭据类型或解析异常 检查完整依赖及SDK版本,不强制当Google凭据成功
9365016 本地退出失败 保留原会话边界,记录错误后重试;不要显示伪退出
9365017 取消或释放未确认 本地等待可能已结束,原生状态未知,检查环境/报告

注意事项

宿主、平台与验证范围

宿主 / 运行端 实现与最低要求 当前验证边界
uni-app Vue2 / Vue3(vue 页面) 共用 Options API 示例与插件根入口 已有 Android 资源与对应生成 Kotlin 联编证据;真实 Google 账号完整宿主流程待开发者验收
uni-app nvue 未交付 nvue 专用示例 未验证,兼容性待确认
uni-app x Vapor Composition API / script setup 示例;本项目使用 Vapor 本地资源/生成物验证与 Google 登录业务验收分别记录;实际宿主仍需匹配原生包
uni-app x 非 Vapor 本轮未对该渲染模式单独验收 不把 Vapor 结果当作非 Vapor 通过
Android Android 6.0 / API 23 起;需要 Google Play 服务 K30 原生测试壳已检查环境、错误路径和本地退出;不替代最新两宿主或真实登录 / Token 验签
iOS iOS 13 起,GoogleSignIn 9.2.0 有原生实现与资源生成证据;Apple SwiftCompile / 链接、签名安装及真实账号回跳待验收
Harmony / 鸿蒙元服务 未实现 Google 原生 SDK 登录 不支持;能加载公共入口时返回明确不支持,不用其他账号冒充
Web(含 Chrome / Safari) 未提供 Google Identity Services 网页实现 仅用于示例 UI 和不支持错误验证,不支持 Google 登录
小程序(微信、支付宝及其他) 未实现 Google 登录 不支持;不以内嵌网页、空对象或模拟回执代替
快应用 未实现 不支持
云端(uniCloud 等) 本包不提供后端云函数 可接自己的后端,但须自行完成验签和业务会话

开发与既有本地验证使用 HBuilderX 5.33.2026102401,最低引擎声明见 uni_modules/lizhao-google-login/package.json,不推定更早版本兼容。市场兼容性使用 √(支持)、-(待确认)和 x(不支持):

市场字段 当前标记 判断依据与边界
uni-app Vue2、Vue3、App vue 页面 √ 两种宿主页面与插件调用已生成并联编;此标记仅表示框架和页面适配,不代表 Google 真实授权已验收
uni-app nvue - 没有专用示例及运行证据
uni-app、uni-app x 的 Android 和 iOS - 两端已有原生实现;Android 真实授权、iOS Apple 编译和回跳仍须在匹配的宿主包中验证
uni-app x Vapor - 有 Vapor 资源与页面证据,完整原生宿主和真实登录仍待验
Harmony、Web、各小程序、快应用及云端 x 本插件不提供这些端的 Google 登录或后端实现

市场如果要求 uni-app x 至少一个运行平台标为支持,需先完成该平台的真实登录验证,再按结果调整;不要仅为通过提交校验把待确认标成支持。Android / iOS 的目录存在或资源编译通过也不代表真实登录已验收。

固定依赖与环境

平台 固定依赖 / 配置 接入注意
Android Credential Manager / provider 1.3.0、googleid 1.1.1、play-services-base 18.3.0;配置在 uni_modules/lizhao-google-login/utssdk/app-android/config.json 最低 GMS versionCode 按当前 provider 所需的 230815045 检查;状态 2 需更新,状态 0 仅表示本地版本满足
iOS GoogleSignIn 9.2.0 及已固定传递依赖;配置在 uni_modules/lizhao-google-login/utssdk/app-ios/config.json CocoaPods 取依赖;合入 uni_modules/lizhao-google-login/utssdk/app-ios/Info.plist 与 uni_modules/lizhao-google-login/utssdk/app-ios/PrivacyInfo.xcprivacy
权限 Android 仅 INTERNET;iOS 使用真实 OAuth 回跳 Scheme 不为登录申请电话、通讯录、定位或存储权限
网络与账号 使用 Google 官方服务 系统存在账号或普通网页可打开,不等于 Google 授权链路已通过

SDK 不需手动拷入工程,依赖许可与来源见 uni_modules/lizhao-google-login/THIRD-PARTY-NOTICES.md。Android 采用 Credential Manager 的 Google 身份能力,接入前置条件参考 Google Android 身份登录文档。

原生基座、生命周期与隐私

变更 / 操作 要求
首次导入、SDK、UTS / Kotlin / Swift、原生权限 / Manifest / Info.plist / 隐私配置变更 重新原生联编或制作匹配自定义基座;WGT 无法替换旧原生代码
仅页面、样式、说明变化 通常可更新页面资源;仍须确认实际安装包含当前原生实现
生成插件版本与 build-info 变化 构建标记进入原生 UTS,应重新联编以保证报告身份与源码一致
一次原生操作进行中 等待完成或按登录请求号取消;正常系统授权覆盖页面不直接当作取消
iOS 逻辑取消 / 超时 原生 UI 可能仍保留,等待 SDK 真实结束;检查环境后再尝试新请求
本地退出 不移除设备账号、不撤销 Google 权限、不清除业务后端会话
日志与 Token 报告在内存中保留,不默认上传;示例不保存、显示或复制 Token、nonce 和个人资料

日志失败不会改变业务 success / fail / complete 语义;诊断报告保留可取得的错误类型、原因与堆栈并先脱敏。不要在自己的业务日志中明文打印 ID Token、邮箱、完整回跳 URL 或 nonce。登录按钮使用官方来源图标,遵循 Google 品牌规范;Google 及相关标识属于其权利人,本插件不表示获得 Google 认可。

本地语法、资源导出、原生生成物、独立测试壳、匹配宿主基座与真实账号业务是不同验证层级。未完成真实 OAuth、后端验签、Apple 编译或设备剪贴板检查时,应按上面的清单由开发者补验,不记为已通过。

作者系列 UTS 插件

以下列表由项目核实的已发布清单生成;本插件尚未上架,暂不加入系列清单。

插件 能力方向 插件市场
lizhao-alipay-kit 支付宝授权登录、App 支付与脱敏诊断 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-camera-pro 原生相机、拍照录像、水印与媒体保存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-hce-card NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 查看插件
lizhao-health 健康数据授权、查询、统计与写入 查看插件
lizhao-http-server 本地 HTTP 服务、文件传输与实时通信 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-id-photo 证件照制作、尺寸换算、换底色与模板换装 查看插件
lizhao-img-eraser 图片去水印、局部修复与原生编辑器 查看插件
lizhao-live-activity 实时活动、系统胶囊与普通通知降级 查看插件
lizhao-live-photo 实况照片选取、展示预览与原件处理 查看插件
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-notify-pro 本地通知、点击动作、进度与定时提醒 查看插件
lizhao-novel-reader 原生小说阅读、仿真翻页与段落评论 查看插件
lizhao-office-view Office 与 PDF 文件预览、进度与缓存管理 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-serial-port 路径串口、USB 串口、多会话收发与诊断 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件
lizhao-tcp-pro TCP 客户端、服务端、多连接与诊断 查看插件
lizhao-usb-storage U 盘、移动硬盘文件浏览、读写与批量复制 查看插件
lizhao-video-editor 视频裁剪、压缩、取帧与 FFmpeg/FFprobe 查看插件
lizhao-video-feed 短视频上下滑、短剧选集与分页加载 查看插件
lizhao-video-player 原生视频播放器、清晰度与播放交互 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android仅网络权限;iOS注册OAuth回跳Scheme。无需通讯录、电话、位置、存储权限。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

用户主动登录时由Google官方SDK与Google服务交换身份数据,ID Token与基础资料仅交调用方验签。插件不接收Client Secret,不主动保存或上传令牌和诊断。Google SDK的数据处理适用Google隐私政策。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。