全新的 Google 登入 API

Google Identity 服務 (GIS) 是一組新的 API,能 這個套件簡單易用,適合開發人員輕鬆完成,且能安全執行登入與註冊。 本文件將詳細說明全新的 Google Sign-API (屬於 GIS 的一部分), 當使用者輕觸「使用 Google 帳戶登入」後,啟動登入或註冊流程 按鈕。這個 API 可以取代現有的 Google 登入 API 登入流程。

您只能在使用者明確顯示登入意圖時使用這個 API 。舉例來說,使用者點選「使用 Google 帳戶登入」後,就能使用這個 API 按鈕。

應用程式啟動時或不應使用這個 API 提示使用者登入 回應另一個觸發事件,例如將商品加入購物車。適用對象 用途 One Tap 登入與註冊

使用新的 API 啟動 Google 登入流程時, 使用者介面:

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 中擷取 SignInCredentialSignInCredentialgetSignInCredentialFromIntent 傳回的物件包含資訊 關於有效登入的資訊如果使用者因故無法登入 已擲回 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
});

登入成功後,系統一律會傳回使用者的全名、電子郵件、 以及個人資料相片網址如需額外資訊,您可以引導使用者 填寫完整的設定檔資訊流程