เรากําลังจะ ปิดให้บริการไลบรารีแพลตฟอร์มการลงชื่อเข้าใช้ Google สําหรับเว็บ คลังจะดาวน์โหลดไม่ได้หลังจากวันที่เลิกใช้งาน 31 มีนาคม 2023 แต่ให้ใช้บริการใหม่ของ Google Identity สําหรับเว็บแทน
โดยค่าเริ่มต้น ระบบจะบล็อกรหัสไคลเอ็นต์ที่สร้างขึ้นใหม่ไม่ให้ใช้ไลบรารีแพลตฟอร์มเก่า รหัสลูกค้าที่มีอยู่จะไม่ได้รับผลกระทบ โดยรหัสไคลเอ็นต์ใหม่ที่สร้างขึ้นก่อนวันที่ 29 กรกฎาคม 2022 จะตั้งค่า `plugin_name` เพื่อเปิดใช้ไลบรารี Google Platform ได้

การผสานรวม Google Sign-In กับแอป Android

หากต้องการผสานรวม Google Sign-In ในแอป Android ให้กําหนดค่า Google Sign-In และเพิ่มปุ่มลงในเลย์เอาต์ของแอปที่เริ่มกระบวนการลงชื่อเข้าใช้

ก่อนเริ่มต้น

กําหนดค่าโปรเจ็กต์คอนโซล Google API และตั้งค่าโปรเจ็กต์ Android Studio

กําหนดค่า Google Sign-In และออบเจ็กต์ GoogleSignInClient

  1. ในเมธอด onCreate ในการลงชื่อเข้าใช้ ให้กําหนดค่า Google Sign-In เพื่อส่งคําขอข้อมูลผู้ใช้ที่จําเป็นสําหรับแอปของคุณ เช่น ในการกําหนดค่า Google Sign-In ให้ขอผู้ใช้และข้อมูลโปรไฟล์พื้นฐาน ให้สร้างออบเจ็กต์ GoogleSignInOptions ด้วยพารามิเตอร์ DEFAULT_SIGN_IN หากต้องการขออีเมลจากผู้ใช้ด้วย ให้สร้างออบเจ็กต์ GoogleSignInOptions ด้วยตัวเลือก requestEmail

    // Configure sign-in to request the user's ID, email address, and basic
    // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

    หากต้องการขอขอบเขตเพิ่มเติมเพื่อเข้าถึง Google API ให้ระบุขอบเขตดังกล่าวด้วย requestScopes เพื่อประสบการณ์ที่ดีที่สุดของผู้ใช้ ในการลงชื่อเข้าใช้ โปรดขอเพียงขอบเขตที่จําเป็นสําหรับแอปเพื่อให้ใช้งานได้น้อยที่สุด ขอขอบเขตเพิ่มเติมเมื่อจําเป็นเท่านั้น เพื่อให้ผู้ใช้เห็นหน้าจอคํายินยอมในบริบทของการดําเนินการ ดูการขอขอบเขตเพิ่มเติม

  2. จากนั้นใน onCreate วิธีการลงชื่อเข้าใช้ ให้สร้างออบเจ็กต์ GoogleSignInClient ด้วยตัวเลือกที่ระบุ

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

ตรวจสอบหาผู้ใช้ที่ลงชื่อเข้าใช้อยู่

ในวิธี onStart ของกิจกรรม ให้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้แอปด้วย Google แล้วหรือยัง

// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);

หาก GoogleSignIn.getLastSignedInAccount แสดงผลออบเจ็กต์ GoogleSignInAccount (แทน null) แสดงว่าผู้ใช้ได้ลงชื่อเข้าใช้แอปของคุณแล้วด้วย Google อัปเดต UI ให้สอดคล้องกัน นั่นคือ ซ่อนปุ่มลงชื่อเข้าใช้ เปิดใช้กิจกรรมหลัก หรืออะไรก็ตามที่เหมาะสมสําหรับแอป

หาก GoogleSignIn.getLastSignedInAccount แสดงผล null ผู้ใช้ยังไม่ได้ลงชื่อเข้าใช้แอปด้วย Google อัปเดต UI เพื่อแสดงปุ่ม Google Sign-In

เพิ่มปุ่ม Google Sign-In ลงในแอป

  1. ปุ่มลงชื่อเข้าใช้ Google แบบมาตรฐาน เพิ่ม SignInButton ในรูปแบบของแอปพลิเคชัน:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. ไม่บังคับ: หากคุณใช้กราฟิกปุ่มลงชื่อเข้าใช้เริ่มต้นแทนที่จะให้เนื้อหาปุ่มลงชื่อเข้าใช้ของคุณเอง คุณสามารถปรับแต่งขนาดปุ่มและเมธอดได้ด้วย setSize

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. ในกิจกรรม Android (เช่น ในเมธอด onCreate) ให้ลงทะเบียนปุ่ม OnClickListener#33 เพื่อลงชื่อเข้าใช้เมื่อผู้ใช้คลิก

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

เริ่มขั้นตอนการลงชื่อเข้าใช้

  1. รูปภาพของตัวเลือกการลงชื่อเข้าใช้บัญชี ในเมธอด onClick ของกิจกรรม ให้แตะปุ่มลงชื่อเข้าใช้โดยสร้าง Intent การลงชื่อเข้าใช้ด้วยเมธอด getSignInIntent แล้วเริ่มความตั้งใจด้วย startActivityForResult

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_button:
                signIn();
                break;
            // ...
        }
    }
    
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    เริ่มแสดงความตั้งใจเพื่อแจ้งให้ผู้ใช้เลือกบัญชี Google ที่จะลงชื่อเข้าใช้ หากคุณส่งคําขอขอบเขตที่เกิน profile, email และ openid ระบบจะแจ้งให้ผู้ใช้มอบสิทธิ์เข้าถึงทรัพยากรที่ขอด้วย

  2. หลังจากที่ผู้ใช้ลงชื่อเข้าใช้แล้ว คุณจะได้รับออบเจ็กต์ GoogleSignInAccount สําหรับผู้ใช้ในเมธอด onActivityResult ของกิจกรรม

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    ออบเจ็กต์ GoogleSignInAccount มีข้อมูลเกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้ เช่น ชื่อผู้ใช้

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
    
            // Signed in successfully, show authenticated UI.
            updateUI(account);
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    นอกจากนี้ คุณยังรับอีเมลของผู้ใช้ด้วย getEmail, รหัส Google (# สําหรับฝั่งไคลเอ็นต์) ของ getId และโทเค็นรหัสสําหรับผู้ใช้ที่มี getIdToken ได้ด้วย หากต้องการส่งผ่านผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบันไปยังเซิร์ฟเวอร์แบ็กเอนด์ ให้ส่งโทเค็นรหัสไปยังเซิร์ฟเวอร์แบ็กเอนด์และตรวจสอบโทเค็นในเซิร์ฟเวอร์