การตรวจสอบสิทธิ์จะระบุตัวตนของบุคคล และมักเรียกว่าการลงชื่อสมัครใช้หรือลงชื่อเข้าใช้ของผู้ใช้ การให้สิทธิ์คือกระบวนการให้หรือปฏิเสธสิทธิ์เข้าถึงข้อมูลหรือทรัพยากร เช่น แอปขอความยินยอมจากผู้ใช้เพื่อเข้าถึง Google ไดรฟ์ของผู้ใช้
การเรียกใช้การตรวจสอบสิทธิ์และการให้สิทธิ์ควรเป็น 2 ขั้นตอนที่แยกกันและแตกต่างกันไปตามความต้องการของแอป
หากแอปมีฟีเจอร์ที่สามารถใช้ข้อมูล Google API ได้ แต่ไม่ได้เป็นส่วนหนึ่งของฟีเจอร์หลักของแอป คุณควรออกแบบแอปให้สามารถจัดการกรณีที่เข้าถึงข้อมูล API ไม่ได้ เช่น คุณอาจซ่อนรายการไฟล์ที่บันทึกล่าสุดเมื่อผู้ใช้ยังไม่ได้ให้สิทธิ์เข้าถึงไดรฟ์
คุณควรขอสิทธิ์เข้าถึงขอบเขตที่จําเป็นในการเข้าถึง Google API เฉพาะเมื่อผู้ใช้ดําเนินการที่จําเป็นต้องใช้สิทธิ์เข้าถึง API บางรายการ เช่น คุณควรขอสิทธิ์เข้าถึงไดรฟ์ของผู้ใช้ทุกครั้งที่ผู้ใช้แตะปุ่ม "บันทึกลงในไดรฟ์"
การแยกการให้สิทธิ์ออกจากการตรวจสอบสิทธิ์จะช่วยให้ผู้ใช้ใหม่ไม่สับสนหรือรู้สึกว่าถูกรบกวนมากเกินไปเมื่อระบบขอสิทธิ์บางอย่าง
สำหรับการตรวจสอบสิทธิ์ เราขอแนะนำให้ใช้ Credential Manager API สําหรับการอนุญาตการดําเนินการที่จําเป็นต้องเข้าถึงข้อมูลผู้ใช้ที่ Google จัดเก็บไว้ เราขอแนะนําให้ใช้ AuthorizationClient
สร้าง โปรเจ็กต์
- เปิดโปรเจ็กต์ใน หรือสร้างโปรเจ็กต์หากยังไม่มี
- ใน ให้ตรวจสอบว่าข้อมูลทั้งหมดถูกต้องและครบถ้วน
- ตรวจสอบว่าแอปของคุณมีชื่อแอป โลโก้แอป และหน้าแรกของแอปที่ถูกต้อง ค่าเหล่านี้จะแสดงต่อผู้ใช้ในหน้าจอขอความยินยอมของฟีเจอร์ลงชื่อเข้าใช้ด้วย Google เมื่อลงชื่อสมัครใช้และในหน้าจอแอปและบริการของบุคคลที่สาม
- ตรวจสอบว่าคุณได้ระบุ URL ของนโยบายความเป็นส่วนตัวและข้อกำหนดในการให้บริการของแอปแล้ว
- ใน ให้สร้างรหัสไคลเอ็นต์ Android สําหรับแอป หากยังไม่มี คุณจะต้องระบุชื่อแพ็กเกจและลายเซ็น SHA-1 ของแอป
- ใน ให้สร้างรหัสไคลเอ็นต์ "เว็บแอปพลิเคชัน" ใหม่หากยังไม่ได้สร้าง คุณสามารถละเว้นช่อง "ต้นทาง JavaScript ที่ได้รับอนุญาต" และ "URI การเปลี่ยนเส้นทางที่ได้รับอนุญาต" ได้ในตอนนี้ ระบบจะใช้รหัสไคลเอ็นต์นี้เพื่อระบุเซิร์ฟเวอร์แบ็กเอนด์ของคุณเมื่อสื่อสารกับบริการตรวจสอบสิทธิ์ของ Google
ประกาศทรัพยากร 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
callback ของกิจกรรม คุณสามารถตรวจสอบว่าได้รับสิทธิ์ที่จําเป็นเรียบร้อยแล้วหรือไม่ และดำเนินการตามการดำเนินการของผู้ใช้หากได้รับสิทธิ์แล้ว
@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 เพื่อรับรหัสการให้สิทธิ์ซึ่งคุณส่งไปยังแบ็กเอนด์เพื่อแลกกับโทเค็นการเข้าถึงและโทเค็นรีเฟรช