更新记录

1.0.1(2025-08-25)

1、修改iOS目录中info.plist位置

1.0.0(2025-08-19)

1、完成Google登录UTS插件开发,可以获取idToken(JWT格式)和accessToken。 iOS接入最新GoogleSignIn-iOS 9.0.0,支持自定义nonce; Android通过最新的Credential Manager方式登录。


平台兼容性

uni-app(4.21)

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

hy-googleSignIn

开发文档

UTS 语法 UTS API插件 UTS uni-app兼容模式组件 UTS 标准模式组件 Hello UTS

开发背景

项目中使用了supabase框架,使用supabase的Google provider完成Google登录时,需要通过supabase.auth.signInWithIdToken这个Api。遇到了2个问题: 1、里面有个必填的参数idToken(JWT),使用uni自带的Google登录是拿不到的,只能获取到accessToken。 2、iOS使用Google官方SDK登录时会在内部生成nonce,不知道nonce原始值所以拿到idToken也没办法去supabase完成身份鉴定。

中间也用了插件市场上的一个原生插件JY-GoogleSignin,只能完成安卓平台的登录,iOS由于上述第二个问题没办法登录。Google官方后面更新了SDK版本支持自定义nonce, 不过JY-GoogleSignin没有更新支持,所以干脆自己来开发一个UTS版本。

插件介绍

Google登录UTS插件,可以获取idToken、accessToken。 使用的原生SDK版本信息: iOS: GoogleSignIn-iOS,9.0.0 Android: "androidx.credentials:credentials:1.3.0", "androidx.credentials:credentials-play-services-auth:1.3.0", "com.google.android.libraries.identity.googleid:googleid:1.1.1"

插件public方法说明


// 登录传递的参数类型声明
// 注意:iOS端无需传递clientId,在info.plist中配置
export type LoginOptions = {
  nonce ?: string;
  clientId ?: string;
};

// 登录方法,callback是登录后回调,数据结构如下:
// code: 0 | -1, 0:登录成功  -1:登录失败
// msg: error msg, 错误信息
// idToken: 用户idToken,JWT格式
// email: 邮箱
// 其他用户信息,不一一列举,可以打印看下返回数据
export declare function login(params : LoginOptions, callback : (result : UTSJSONObject) => void) : void

// 退出登录
export declare function logout(callback : (result : UTSJSONObject) => void) : void

使用方法

一、头文件导入

import * as HYGoogleSignin from '@/uni_modules/hy-googleSignIn'

二、方法调用


2.1 登录参数定义
//根据平台定义loginOptions参数, 根据自己需求判断是否需要nonce
const nonce = this.generateNonce(32)
const sha256Nonce = CryptoJS.SHA256(nonce).toString()
const loginOptions = {
  nonce: sha256Nonce
}
if (!this.isIOS) {
  loginOptions['clientId'] =
    '29147385296-9g21r3eo3k31l155juke58qbn90r6vj0.apps.googleusercontent.com'
}

2.2 登录
HYGoogleSignin.login(loginOptions, (res) => {
  if (res.code !== 0) {
    // 登录失败
    let errorMsg = res.msg || that.$t(that.$s.common.signFail)
    this.$toast.showToast(errorMsg)
    return
  }
  let idToken = res.idToken
  let accessToken = res.accessToken
  let email = res.email

  //拿到idToken等信息,去supabase或者自己的用户系统完成登录流程
  that.signInWithIdToken()
})

2.3 退出登录
HYGoogleSignin.logout((e) => {})

隐私、权限声明

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

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

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