1. 程式人生 > >Android海外第三方登入之Google

Android海外第三方登入之Google

首先翻牆

1.通過以上文件獲取應用的OAuth Client Id(android型別的)並將其下載JSON檔案放入app下面(與src平級, 應用名/app/client_secret.json)

2.再建立一個網頁型別的OAuth Client Id(後面初始化需要) 將其放在string檔案下

<string name="server_web_client_id">此處填寫網頁型別的OAuth Client Id</string>

3.build檔案新增依賴  

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

4.開始寫程式碼(某個點選登入按鈕實現邏輯)

//初始化
GoogleSignInOptions gso =new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()//獲取emial
            .requestServerAuthCode(AppUtils.getString(R.string.server_web_client_id))//注意,此處用的webclientid
                .build();

//建立 GoogleSignInClient 
GoogleSignInClient mGoogleClient =  GoogleSignIn.getClient(context,gso);
//執行跳轉操作
Intent signInIntent = mGoogleClient.getSignInIntent();
activity.startActivityForResult(signInIntent, Tag.GOOGLE_INTENT_REQUESTCODE);//Tag隨意指定

5.通過 onActivityResult 獲取回撥的結果

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //登入成功結果返回
    Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            //通過account 獲取個人資訊
            ...
            //一般登入流程,客戶端獲取到authCode在將authCode傳給伺服器,伺服器在通過authCode獲取詳            
            // 細的資訊
            String authCode = acct.getServerAuthCode()
            
        } catch (ApiException e) {
            e.printStackTrace();
            //注意如果返回錯誤碼:12500可能是GooglePLay服務版本太舊,請到google商店更新最新版本
        }

}
 

6.需要登出的話

mGoogleClient.signOut();

Over!