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

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

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

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

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

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

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

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

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

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

List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
        .authorize(builder.build())
        .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);
  }
}