Android Google應(yīng)用內(nèi)登錄(舊Api)

前言

本文主要闡述了Google 登錄以及Android 接入遇到的一些常見問題添吗,Google 登錄主要分為兩步走演怎,第一步呢瘟栖,是Google 登錄配置方法横蜒,這邊就不再進(jìn)行闡述糊渊,有需要的闊以參考一下另一篇文檔Android Google SignIn配置問題右核,第二部就是本文將要講的,將Google 登錄集成到Android內(nèi)渺绒。

準(zhǔn)備工作

1.配置完成Google 登錄環(huán)境(Android Google SignIn配置問題)
2.準(zhǔn)備一部支付Google 服務(wù)的手機(jī)(Google 服務(wù)三件套)

官方文檔:Google SigIn
官方Demo:Google SigIn Demo
配置環(huán)境:Android Google SignIn配置問題

流程圖

image.png
image.png

引入Apk

在項(xiàng)目級下Build.grade中添加

allprojects {
    repositories {
        google()
    }
}

然后贺喝,在應(yīng)用級下 Build.grade中添加

apply plugin: 'com.android.application'
    ...
    dependencies {
        implementation 'com.google.android.gms:play-services-auth:19.0.0'
    }

添加 Google SignIn Button

在google的Api里有這么一個(gè)Google Sign Button 原生的闊以使用,你闊以修改對應(yīng)樣式宗兼,間距等躏鱼。當(dāng)然也可以不使用這個(gè)控件,自己寫一個(gè)控件也是可以的殷绍,沒有印象的染苛。

sigin.png

    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:ignore="MissingConstraints" />

配置 Google SigIn Client

在Activity的onCreate()中進(jìn)行初始化,配置Google 登錄用以請求用戶的Email主到,Id以及個(gè)人信息殖侵,請求的需要IdToken作為請求依據(jù)。

    private var gso: GoogleSignInOptions? = null
    private var mGoogleSignClient: GoogleSignInClient? = null

   fun  initGoogleClient() {
        gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()      //指定您的應(yīng)用程序請求電子郵件信息
            .requestId()        //指定您的應(yīng)用程序請求用戶標(biāo)識
            .requestIdToken("1033370260928-ju6f2shsld313g8o37s8phvkg2nc947o.apps.googleusercontent.com") //指定請求用于身份驗(yàn)證用戶的ID令牌
            .requestProfile()   //指定您的應(yīng)用程序請求用戶的個(gè)人資料信息
            .build()
        //使用gso指定的選項(xiàng)構(gòu)建一個(gè)GoogleSignInClient
        mGoogleSignClient = GoogleSignIn.getClient(activity, gso!!)
    }

注:IdToken是配置環(huán)境里面的WebClient的Id镰烧,不要填寫錯(cuò)誤拢军,如果不填寫,或者填寫錯(cuò)誤怔鳖,會報(bào)error10的錯(cuò)誤茉唉,并且點(diǎn)擊Google SigIn Button的時(shí)候?qū)霈F(xiàn)閃屏的現(xiàn)象。

error.png

開始登錄

在點(diǎn)擊事件中使用此方法,通過使用方法調(diào)起Google SigIn頁面如圖G

  private var requestCode =10

    fun login() {
        val intent = mGoogleSignClient?.signInIntent
        activity.startActivityForResult(intent, requestCode)
    }
圖G.png

配置Google 回調(diào)方法

用戶登錄后度陆,通過活動的onActivityResult方法為該用戶獲取一個(gè)對象艾凯,對象中包含請求回來的信息。

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == GoogleLoginUtil.requestCode) {
            val googleResultTask = GoogleSignIn.getSignedInAccountFromIntent(data)
            googleLoginUtil?.handleSignInResult(googleResultTask)
        }
    }

Google 回調(diào)方法處理

1.提取用戶信息

GoogleSignInAccount對象包含有關(guān)已登錄用戶的信息懂傀,例如用戶趾诗,id等一些信息,通過getRsult()提取出來即可蹬蚁。

    fun handleSignInResult(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
            Log.e(tag, "google-displayName:${displayName},googleEmail:${email},googleId:${id},googleIdToken:${idToken}")
            googleLoginSuccess(id, email)      //將獲取數(shù)據(jù)傳入
        } catch (e: ApiException) {
            when (e.statusCode) {
                error_7 -> { Log.e(tag, "網(wǎng)絡(luò)不給力恃泪,請?jiān)僭囈淮?)}
                error_12500 -> {Log.e(tag, "當(dāng)前設(shè)備不支持")}
                requestCode -> { Log.e(tag, "環(huán)境配置步錯(cuò)誤,請稍后再試")}
            }
            Log.e(tag, "googleLoginFailed${e.statusCode}")
        }
    }
2.傳入用戶信息

將獲取到的用戶信息犀斋,傳給后端

注:Google帳戶的電子郵件地址可以更改贝乎,因此不能使用它來識別用戶,推薦使用帳戶的ID叽粹。

    fun googleLoginSuccess(id: String?, email: String?) {
       //將id和email傳入后端
      //·······
    }
image.png

退出登錄

在退出登錄之前览效,需要判斷一下當(dāng)前用戶是否使用Google SigIn登錄的,找到此用戶將用戶與當(dāng)前設(shè)備取消關(guān)聯(lián)虫几,便于下次登錄的時(shí)候重新登錄新的用戶锤灿。

    fun logout(context: Context) {
        val account = GoogleSignIn.getLastSignedInAccount(context)
        if (account == null) {
            Log.e(tag, "已經(jīng)登出")
        } else {
         mGoogleSignClient?.signOut()
            ?.addOnCompleteListener {
                Log.e(tag, "成功登出")
            }
            ?.addOnFailureListener {
                Log.e(tag, "登出失敗,請稍后再試")
            }
        }
    }

總結(jié)

Android 接入Google 登錄流程比較簡單辆脸,比較難在Google 配置環(huán)境但校,環(huán)境配置不成功,導(dǎo)致很多錯(cuò)誤每强。Android 接入成功后,同時(shí)也需要將App上傳到Google console上的內(nèi)部測試中州刽,進(jìn)行調(diào)試才可以空执。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市穗椅,隨后出現(xiàn)的幾起案子辨绊,更是在濱河造成了極大的恐慌,老刑警劉巖匹表,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件门坷,死亡現(xiàn)場離奇詭異,居然都是意外死亡袍镀,警方通過查閱死者的電腦和手機(jī)默蚌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苇羡,“玉大人绸吸,你說我怎么就攤上這事。” “怎么了锦茁?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵攘轩,是天一觀的道長。 經(jīng)常有香客問我码俩,道長度帮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任稿存,我火速辦了婚禮笨篷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挠铲。我一直安慰自己冕屯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布拂苹。 她就那樣靜靜地躺著安聘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢棒。 梳的紋絲不亂的頭發(fā)上浴韭,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音脯宿,去河邊找鬼念颈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛连霉,可吹牛的內(nèi)容都是我干的榴芳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼跺撼,長吁一口氣:“原來是場噩夢啊……” “哼窟感!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歉井,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤柿祈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哩至,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躏嚎,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年菩貌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卢佣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箭阶,死狀恐怖珠漂,靈堂內(nèi)的尸體忽然破棺而出晚缩,到底是詐尸還是另有隱情,我是刑警寧澤媳危,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布荞彼,位于F島的核電站,受9級特大地震影響待笑,放射性物質(zhì)發(fā)生泄漏鸣皂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一暮蹂、第九天 我趴在偏房一處隱蔽的房頂上張望寞缝。 院中可真熱鬧,春花似錦仰泻、人聲如沸荆陆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽被啼。三九已至,卻和暖如春棠枉,著一層夾襖步出監(jiān)牢的瞬間浓体,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工辈讶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留命浴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓贱除,卻偏偏與公主長得像生闲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子月幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容