Android Google登录接入

官方文献:

1、前期准备:

https://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hl=zh-cnhttps://developers.google.cn/identity/sign-in/android/legacy-start-integrating?hl=zh-cn

2、具体开发:

新版 Google Sign-In API | Authentication | Google for Developershttps://developers.google.cn/identity/sign-in/android/sign-in-identity?hl=zh-cn

3、操作参考:

https://juejin.cn/post/7383652378370736167https://juejin.cn/post/7383652378370736167

代码实现:

1、直接复制我写的工具类:GoogleLoginUtils
Kotlin 复制代码
/**
 * @Date: 2024/11/11
 * @Author: xinghai.zhao
 * @role:Google登录工具类
 */
object GoogleLoginUtils {
    var mGoogleIdToken: String = "xxxx"

    fun goLogin(activity: AppCompatActivity) {
        //使用gso指定的选项构建一个GoogleSignInClient
        val client = GoogleSignIn.getClient(
            activity, GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()      //指定您的应用程序请求电子邮件信息
                .requestId()        //指定您的应用程序请求用户标识
                .requestIdToken(mGoogleIdToken) //指定请求用于身份验证用户的ID令牌
                .requestProfile()   //指定您的应用程序请求用户的个人资料信息
                .build()
        )
        activity.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { activityResult ->
            if(activityResult.resultCode == RESULT_OK) {
                handleSignInResult(activity,GoogleSignIn.getSignedInAccountFromIntent(activityResult.data))
            }
        }.launch(client.signInIntent)
    }


    fun handleSignInResult(activity: Activity, completedTask: Task<GoogleSignInAccount>) {
        try {
            val account = completedTask.getResult(ApiException::class.java)
            val displayName = account?.displayName
            val email = account?.email
            val id = account?.id
            val idToken = account?.idToken
            LogUtil.e("google-displayName:${displayName},googleEmail:${email},googleId:${id},googleIdToken:${idToken}")
            googleLoginSuccess(activity, id, email)      //将获取数据传入
        } catch (e: ApiException) {
            when (e.statusCode) {
                7 -> {
                    LogUtil.e("网络不给力,请再试一次")
                }

                12500 -> {
                    LogUtil.e("当前设备不支持")
                }

                10 -> {
                    LogUtil.e("环境配置步错误,请稍后再试")
                }
            }
            LogUtil.e("google-LoginFailed${e.statusCode}")
        }
    }

    private fun googleLoginSuccess(activity: Activity, id: String?, email: String?) {
        val date = hashMapOf<String, String>()
        if (id != null) {
            date["id"] = id
        }
        if (email != null) {
            date["email"] = email
        }
        HttpUtils.post(activity, HttpUtils.URL_Login, date,
            onResponse = {
                //todo 请求成功后 json解析
            }, onFailure = {
                //todo 请求失败后处理
            })
    }
}
2、在Activity的登录按钮点击事件中调用:
Kotlin 复制代码
    GoogleLoginUtils.goLogin(this)

类中的网络请求工具HttpUtils来这里复制:

Android 用80行代码 封装最简单网络请求 HttpUtils-CSDN博客文章浏览阅读213次,点赞11次,收藏5次。在小型项目中,实现最简单最高效的网络请求封装 轻量化,不借助除okhttp以外的三方框架 单个类实现,且可读性高,扩展性高 最少的代码行数,最简单的调用方式https://zhaoxinghai.blog.csdn.net/article/details/143712192


复制代码
如果您感觉文章有用的话,麻烦点个赞吧!
如果您发现文章有任何错误或建议,请评论区留言或者私信!
深海谢过各位的支持,一起加油!
复制代码
相关推荐
晚霞的不甘1 天前
Flutter for OpenHarmony从零到一:构建《冰火人》双人合作闯关游戏
android·flutter·游戏·前端框架·全文检索·交互
2601_949833391 天前
flutter_for_openharmony口腔护理app实战+饮食记录实现
android·javascript·flutter
独自破碎E1 天前
【滑动窗口+字符计数数组】LCR_014_字符串的排列
android·java·开发语言
stevenzqzq1 天前
compose 中 align和Arrangement的区别
android·compose
VincentWei951 天前
Compose:MutableState 和 mutableStateOf
android
jian110581 天前
Android studio配置flutter,mac Android studio 发现苹果手机设备
android·flutter·android studio
2501_940007891 天前
Flutter for OpenHarmony三国杀攻略App实战 - 性能优化与最佳实践
android·flutter·性能优化
Rysxt_1 天前
UniApp获取安卓系统权限教程
android·uni-app
毕设源码-朱学姐1 天前
【开题答辩全过程】以 基于安卓的教师上课辅助系统为例,包含答辩的问题和答案
android
诸神黄昏EX1 天前
Android Safety 系列专题【篇二:AVB签名】
android