1. 程式人生 > >Android Studio接谷歌原生登入

Android Studio接谷歌原生登入

目錄

  • 前言
  • AndroidStudio
  • server_client_id

@

前言

準備

近日,公司要求上線海外市場,需要接入海外SDK,首先上架的是GooglePlay,需要先接入GooglePlay登入,這裡我們選擇的接安卓原生,需要手機安裝谷歌三件套,如果沒有安裝好的就去下載一個Go谷歌安裝器,裡面有一鍵安裝。注:“手機必須搭梯子(這裡不讓說,否則稽核不通過)”。

開始

剛開始肯定要先查閱文件,我為此翻閱了不少博文,但是好多文章都說的一知半解的,搞半天也沒頭緒(每個公司都有自己的專案,我們在原專案上開發,註定要多走些路子)。首先,你先確定你是接Google原生登入,還有一種是整合FireBase的(不知道說法對不對),這裡只說前者,後者我也沒做,等後面再說吧。
這裡非常感謝一名在稀土掘金的叫Silence瀟湘夜雨的大佬兩句話就把我的活說明白啦。在這裡我結合他的博文來做一下我工作的詳細記錄。

AndroidStudio

我們開發的專案先匯出安卓,因為我們專案接過好幾個渠道,所以比較亂一點,搞得我也很頭痛,專案裡也有分渠道打包,我看到不是很懂,只有以後再重新弄一下。
首先我們要先匯入Google登入所要用到的庫,在app下的build.gradle裡面的的dependencies裡配置一下Google服務

implementation 'com.google.android.gms:play-services-auth:16.0.0'

然後在最上面點選Sync Now (有問題可以降一個版本,比如開發文件說要用17.0.0我的專案就適配不了用的是16.0.0)

然後我們就可以在MainActivity裡面開始寫我們的程式碼了。
先宣告一個 private GoogleSignInClient mGoogleSignInClient;


在onCreate()方法裡寫上

 //TODO Google登入
 //配置登入以請求使用者的ID,電子郵件地址和基本配置檔案.ID和基本配置檔案包含在DEFAULT_SIGN_IN中.
  GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
           .requestEmail()
           .requestIdToken(Constants.GoogleAppID)
           .build();
 //使用gso指定的選項構建一個GoogleSignInClient.
 mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Constants.GoogleAppID裡面配置的是server_client_id,(server_client_id怎麼獲取下面會說明)
Google登入肯定有按鈕,用按鈕事件呼叫googleLogin()方法

 public void googleLogin() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 1000);
    }

上面兩行的程式碼是調起Google賬號登入的介面

授權成功後肯定要回調,在onActivityResult()方法接收回調,這裡面我寫了兩種方式,用哪一種都可以。這裡handleSignInResult方法過載了一下,用一個就好。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == 1000) {
            //方式一
//            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
//            handleSignInResult(result);
            //方式二
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
}
 private void handleSignInResult(GoogleSignInResult result){
        Constants.Log("handleSignInResult方法呼叫----" + result.isSuccess());

        if (result.isSuccess()) {
            GoogleSignInAccount account = result.getSignInAccount();
            //account裡可以直接獲取到ID,name,和頭像
            Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();
            
           Constants.Log("Token-----"+idToken+"-----");
        }
    }
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            //account裡可以直接獲取到ID,name,和頭像
             Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();

            Constants.Log("Token-----"+idToken+"-----");
            
        } catch (ApiException e) {
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            Constants.Log("錯誤資訊為"+e.toString());
        }
    }

這裡面的Token值驗證賬號的時候會用的到。至於還要用到什麼資料你就和後臺溝通一下,直接傳過去就好。

可見,接入谷歌登入還是很簡單的,明白了流程,一會就弄好,個人感覺主要是不知道怎麼弄API後臺的設定

server_client_id


先弄一下OAuth同意螢幕的描述,按照你專案填寫

再建立一下OAuth客戶端id,其中

這個就是server_client_id,傳入專案就可以啦。

如果有什麼問題的話下方給我留言,我看到的話就會盡快回復的哦
現在沒寫完的,後面待寫................