หากต้องการผสานรวมการลงชื่อเข้าใช้ด้วย Google เข้ากับแอป Android ให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Google และ เพิ่มปุ่มลงในเลย์เอาต์ของแอปที่จะเริ่มขั้นตอนการลงชื่อเข้าใช้
ก่อนเริ่มต้น
กำหนดค่าโปรเจ็กต์คอนโซล Google API และตั้งค่าโปรเจ็กต์ Android Studio
กำหนดค่า Google Sign-In และออบเจ็กต์ GoogleSignInClient
ใน
onCreateเมธอดของกิจกรรมการลงชื่อเข้าใช้ ให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Google เพื่อ ขอข้อมูลผู้ใช้ที่แอปของคุณต้องการ ตัวอย่างเช่น หากต้องการกำหนดค่า การลงชื่อเข้าใช้ด้วย Google เพื่อขอรหัสและข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ ให้สร้างออบเจ็กต์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เมื่อลงชื่อเข้าใช้ ให้ขอเฉพาะขอบเขตที่จำเป็นเพื่อให้แอปทำงานได้ขั้นต่ำ เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด ขอขอบเขตเพิ่มเติมเฉพาะเมื่อจำเป็นเท่านั้น เพื่อให้ผู้ใช้เห็นหน้าจอคำยินยอมในบริบทของการดำเนินการที่ผู้ใช้ทำ ดูการขอขอบเขตเพิ่มเติมจากนั้นในเมธอด
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
เพิ่มปุ่มลงชื่อเข้าใช้ด้วย Google ลงในแอป
เพิ่ม SignInButtonในเลย์เอาต์ของแอปพลิเคชัน<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />ไม่บังคับ: หากใช้กราฟิกปุ่มลงชื่อเข้าใช้เริ่มต้นแทนการ ระบุชิ้นงานปุ่มลงชื่อเข้าใช้ของคุณเอง คุณสามารถปรับขนาดปุ่ม ได้ด้วยวิธี
setSize// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
ในกิจกรรม Android (เช่น ในเมธอด
onCreate) ให้ลงทะเบียนOnClickListenerของปุ่มเพื่อลงชื่อเข้าใช้ผู้ใช้เมื่อคลิกfindViewById(R.id.sign_in_button).setOnClickListener(this);
เริ่มโฟลว์การลงชื่อเข้าใช้
ในเมธอด onClickของกิจกรรม ให้จัดการการแตะปุ่มลงชื่อเข้าใช้โดยสร้าง Intent การลงชื่อเข้าใช้ด้วยเมธอดgetSignInIntentและเริ่ม Intent ด้วย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); }การเริ่ม Intent จะแจ้งให้ผู้ใช้เลือกบัญชี Google เพื่อลงชื่อเข้าใช้ หากคุณขอขอบเขตที่นอกเหนือจาก
profile,emailและopenidระบบจะแจ้งให้ผู้ใช้ให้สิทธิ์เข้าถึงทรัพยากรที่ขอด้วยหลังจากที่ผู้ใช้ลงชื่อเข้าใช้แล้ว คุณจะรับออบเจ็กต์
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); } }
นอกจากนี้ คุณยังรับอีเมลของผู้ใช้ด้วย
getEmailGoogle ID ของผู้ใช้ (สําหรับการใช้งานฝั่งไคลเอ็นต์) ด้วยgetIdและโทเค็นรหัสสําหรับผู้ใช้ด้วยgetIdTokenได้ด้วย หากต้องการส่งผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบันไปยังเซิร์ฟเวอร์แบ็กเอนด์ ให้ส่งโทเค็นรหัสไปยังเซิร์ฟเวอร์แบ็กเอนด์ และตรวจสอบโทเค็นในเซิร์ฟเวอร์