Google Identity 服務 (GIS) 是一組新的 API,能 這個套件簡單易用,適合開發人員輕鬆完成,且能安全執行登入與註冊。 本文件將詳細說明全新的 Google Sign-API (屬於 GIS 的一部分), 當使用者輕觸「使用 Google 帳戶登入」後,啟動登入或註冊流程 按鈕。這個 API 可以取代現有的 Google 登入 API 登入流程。
您只能在使用者明確顯示登入意圖時使用這個 API 。舉例來說,使用者點選「使用 Google 帳戶登入」後,就能使用這個 API 按鈕。
應用程式啟動時或不應使用這個 API 提示使用者登入 回應另一個觸發事件,例如將商品加入購物車。適用對象 用途 One Tap 登入與註冊。
使用新的 API 啟動 Google 登入流程時, 使用者介面:
事前準備
設定 Google API 控制台專案,並設定 Android Studio 專案。
提出登入要求
如要使用 Identity API 啟動 Google 登入流程,請建構
GetSignInRequest
物件。接著,在 SignInClient
物件呼叫中
getSignInIntent
。這項呼叫為非同步性質,成功完成後,就會提供
PendingIntent
可啟動對話方塊。
private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */
private void signIn() {
GetSignInIntentRequest request =
GetSignInIntentRequest.builder()
.setServerClientId(getString(R.string.server_client_id))
.build();
Identity.getSignInClient(activity)
.getSignInIntent(request)
.addOnSuccessListener(
result -> {
try {
startIntentSenderForResult(
result.getIntentSender(),
REQUEST_CODE_GOOGLE_SIGN_IN,
/* fillInIntent= */ null,
/* flagsMask= */ 0,
/* flagsValue= */ 0,
/* extraFlags= */ 0,
/* options= */ null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Google Sign-in failed");
}
})
.addOnFailureListener(
e -> {
Log.e(TAG, "Google Sign-in failed", e);
});
}
處理登入結果
在 onActivityResult
中擷取 SignInCredential
。SignInCredential
從 getSignInCredentialFromIntent
傳回的物件包含資訊
關於有效登入的資訊如果使用者因故無法登入
已擲回 ApiException
。
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
try {
SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
// Signed in successfully - show authenticated UI
updateUI(credential);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
}
}
}
}
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
// handle intent result here
});
登入成功後,系統一律會傳回使用者的全名、電子郵件、 以及個人資料相片網址如需額外資訊,您可以引導使用者 填寫完整的設定檔資訊流程