ให้สิทธิ์เข้าถึงข้อมูลผู้ใช้บน Android

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

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

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

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

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

ใน Google Identity Services การตรวจสอบสิทธิ์จะเกิดขึ้นโดยใช้ SignInClient. สำหรับการให้สิทธิ์การดำเนินการที่ต้องเข้าถึงข้อมูลผู้ใช้ที่ Google จัดเก็บไว้ แนะนำให้ใช้ AuthorizationClient

การขอสิทธิ์ที่จำเป็นโดยการดำเนินการของผู้ใช้

เมื่อใดก็ตามที่ผู้ใช้ดำเนินการที่ต้องการขอบเขตเพิ่มเติม ให้เรียกใช้ 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));

ใน Callback 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);
  }
}