อนุญาตการเข้าถึงข้อมูลผู้ใช้ Google

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

การเรียกการตรวจสอบสิทธิ์และการให้สิทธิ์ควรเป็นโฟลว์ที่แยกกันและแตกต่างกัน 2 รายการตามความต้องการของแอป

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

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

การแยกการให้สิทธิ์จากการตรวจสอบสิทธิ์จะช่วยให้คุณหลีกเลี่ยงการสร้างความสับสนให้ผู้ใช้ใหม่ หรือทำให้ผู้ใช้สงสัยว่าเหตุใดจึงมีการขอสิทธิ์บางอย่าง

สำหรับการตรวจสอบสิทธิ์ เราขอแนะนำให้ใช้ Credential Manager API สําหรับการให้สิทธิ์การดําเนินการที่ต้องเข้าถึงข้อมูลผู้ใช้ที่ Google จัดเก็บไว้ เราขอแนะนําให้ใช้ AuthorizationClient

สร้าง โปรเจ็กต์

  1. เปิดโปรเจ็กต์ใน หรือสร้างโปรเจ็กต์หากยังไม่มี
  2. ใน ตรวจสอบว่าข้อมูลทั้งหมดถูกต้องและครบถ้วน
    1. ตรวจสอบว่าแอปมีชื่อแอป โลโก้แอป และหน้าแรกของแอปที่ถูกต้อง ค่าเหล่านี้จะแสดงต่อผู้ใช้ในหน้าจอขอความยินยอมให้ใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Google เมื่อลงชื่อสมัครใช้ และในหน้าจอแอปและบริการของบุคคลที่สาม
    2. ตรวจสอบว่าคุณได้ระบุ URL ของนโยบายความเป็นส่วนตัวและ ข้อกำหนดในการให้บริการของแอปแล้ว
  3. ใน สร้างรหัสไคลเอ็นต์ Android สำหรับแอปหากยังไม่มี คุณจะต้องระบุชื่อแพ็กเกจและลายเซ็น SHA-1 ของแอป
    1. ไปที่
    2. คลิกสร้างไคลเอ็นต์
    3. เลือกประเภทแอปพลิเคชัน Android
  4. ใน ให้สร้างรหัสไคลเอ็นต์ "เว็บแอปพลิเคชัน" ใหม่หากยังไม่ได้สร้าง คุณสามารถละเว้นช่อง "ต้นทาง JavaScript ที่ได้รับอนุญาต" และ "URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต" ในตอนนี้ได้ ระบบจะใช้รหัสไคลเอ็นต์นี้เพื่อระบุเซิร์ฟเวอร์แบ็กเอนด์ เมื่อเซิร์ฟเวอร์สื่อสารกับบริการตรวจสอบสิทธิ์ของ Google
    1. ไปที่
    2. คลิกสร้างไคลเอ็นต์
    3. เลือกประเภทเว็บแอปพลิเคชัน

ประกาศทรัพยากร Dependency

ในไฟล์ build.gradle ของโมดูล ให้ประกาศการขึ้นต่อกันโดยใช้ไลบรารีบริการข้อมูลประจำตัวของ Google เวอร์ชันล่าสุด

dependencies {
  // ... other dependencies

  implementation "com.google.android.gms:play-services-auth:<latest version>"
}

ขอสิทธิ์ที่การดำเนินการของผู้ใช้ต้องใช้

เมื่อใดก็ตามที่ผู้ใช้ดำเนินการที่ต้องใช้ขอบเขตเพิ่มเติม ให้เรียกใช้ AuthorizationClient.authorize()

เช่น หากผู้ใช้ดำเนินการที่ต้องเข้าถึงพื้นที่เก็บข้อมูลแอปในไดรฟ์ ให้ทำดังนี้

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(authorizationRequest)
        .addOnSuccessListener(
            authorizationResult -> {
              if (authorizationResult.hasResolution()) {
                    // Access needs to be granted by the user
                PendingIntent pendingIntent = authorizationResult.getPendingIntent();
                try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
                } catch (IntentSender.SendIntentException e) {
                Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
                }
              } else {
            // Access already granted, continue with user action
                saveToDriveAppFolder(authorizationResult);
              }
            })
        .addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));

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

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
    AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
    saveToDriveAppFolder(authorizationResult);
  }
}

หากเข้าถึง Google API ในฝั่งเซิร์ฟเวอร์ คุณสามารถเรียกใช้เมธอด getServerAuthCode() ของ AuthorizationResult เพื่อรับรหัสการให้สิทธิ์ ซึ่งคุณจะส่งไปยังแบ็กเอนด์เพื่อแลกเป็นโทเค็นเพื่อการเข้าถึงและโทเค็นเพื่อการรีเฟรช