Android應用新增谷歌登入(Google Sign In)

語言: CN / TW / HK

Android平臺新增Google登入便於讀取使用者資訊,也便於將應用釋出到GooglePlay。 具體步驟如下,個人覺得還是比較繁瑣的,一步一步來看吧。

服務賬號建立專案

http://developers.google.com/workspace/guides/create-credentials

截圖2023-01-01 17.30.54.png 每個Google賬號可以建立12個專案。

截圖2023-01-01 17.32.19.png 點選建立。

建立憑據

截圖2023-01-01 17.41.11.png

截圖2023-01-01 17.42.29.png 這裡提示要先建立OAuth同意螢幕。

截圖2023-01-01 17.44.11.png 點選建立。

截圖2023-01-01 17.46.01.png 帶*的資訊都是要填寫的,郵箱就用當前這個就好。

回來建立OAuth客戶端ID。

截圖2023-01-01 17.47.47.png 選擇Android。

然後獲取jks的SHA1指紋。debug.keystore的除錯金鑰庫也行,密碼是android。 keytool -keystore path-to-debug-or-production-keystore -list -v path-to-debug-or-production-keystore換成你打包簽名用的jks或debug.keystore的路徑也行。然後將SHA1資訊填入。

截圖2023-01-01 17.55.42.png 然後下載配置資訊JSON檔案,後續程式碼會用到裡面的資訊。

程式碼編寫

建立GoogleSignInClient java GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestId() .requestProfile() .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions); 點選谷歌登入按鈕跳轉google登入 java Intent intent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(intent, CODE_SIGN_IN); 登入的回撥

java @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == CODE_SIGN_IN && resultCode != 0) { Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); }

java private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); GgOrFbUserInfo ggOrFbUserInfo = new GgOrFbUserInfo(); ggOrFbUserInfo.setAvatar(account.getPhotoUrl() == null ? "": account.getPhotoUrl().toString()); ggOrFbUserInfo.setLtype(1); ggOrFbUserInfo.setUserId(account.getId()); ggOrFbUserInfo.setEmail(account.getEmail()); ggOrFbUserInfo.setEmailVerified(1); ggOrFbUserInfo.setName(account.getDisplayName()); ggOrFbUserInfo.setLanguage(CommonPramsUtil.getSystemLanguage()); ggOrFbUserInfo.setFamilyName(account.getFamilyName() == null ? "" : account.getFamilyName()); ggOrFbUserInfo.setGivenName(account.getGivenName()); ggOrFbUserInfo.setRegion("zn"); login(ggOrFbUserInfo); // 這裡拿使用者google賬號的資訊呼叫自己業務的login if (account.getPhotoUrl() != null) { Glide.with(LoginActivity.this).load(account.getPhotoUrl()).into(ivAvatar); } } catch (ApiException e) { // 在這裡獲取錯誤資訊 } } 退出登入

java mGoogleSignInClient.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { } });

後續

你可以使用firebase做一些其他的事情,如埋點統計等。