คุณให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้ Apple ID ได้โดยใช้ Firebase SDK เพื่อดำเนินการลงชื่อเข้าใช้ OAuth 2.0 ตั้งแต่ต้นจนจบ
ก่อนเริ่มต้น
หากต้องการให้ผู้ใช้ลงชื่อเข้าใช้ด้วย Apple ให้กำหนดค่าฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ในเว็บไซต์ของนักพัฒนาซอฟต์แวร์ Apple ก่อน จากนั้นเปิดใช้ Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้สำหรับโปรเจ็กต์ Firebase
เข้าร่วมโปรแกรมนักพัฒนาซอฟต์แวร์ของ Apple
เฉพาะสมาชิกโปรแกรม Apple Developer เท่านั้นที่กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple ได้
กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple
ในเว็บไซต์ Apple Developer ให้ทำดังนี้
-
เชื่อมโยงเว็บไซต์กับแอปตามที่อธิบายไว้ในส่วนแรกของ กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple สำหรับเว็บ เมื่อได้รับข้อความแจ้ง ให้ลงทะเบียน URL ต่อไปนี้เป็น URL ย้อนกลับ
https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler
คุณรับรหัสโปรเจ็กต์ Firebase ได้ในหน้าการตั้งค่าคอนโซล Firebase
เมื่อเสร็จแล้ว ให้จดรหัสบริการใหม่ที่ต้องใช้ในส่วนถัดไป
- สร้างการลงชื่อเข้าใช้ด้วยคีย์ส่วนตัวของ Apple คุณจะต้องใช้คีย์ส่วนตัวและรหัสคีย์ใหม่ในส่วนถัดไป
-
หากคุณใช้ฟีเจอร์ของการตรวจสอบสิทธิ์ Firebase ที่ส่งอีเมลถึงผู้ใช้ รวมถึงการลงชื่อเข้าใช้ลิงก์อีเมล การยืนยันอีเมล การเพิกถอนการเปลี่ยนแปลงบัญชี และอื่นๆ ให้ กำหนดค่าบริการส่งต่ออีเมลส่วนตัวของ Apple และลงทะเบียน
noreply@YOUR_FIREBASE_PROJECT_ID.firebaseapp.com
(หรือโดเมนเทมเพลตอีเมลที่กำหนดเอง) เพื่อให้ Apple ส่งต่ออีเมลที่ส่งโดยการตรวจสอบสิทธิ์ Firebase ไปยังอีเมล Apple ที่ไม่ระบุตัวบุคคลได้
เปิดใช้ Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้
- เพิ่ม Firebase ลงในโปรเจ็กต์ Android อย่าลืมลงทะเบียนลายเซ็น SHA-1 ของแอปเมื่อตั้งค่าแอปในคอนโซล Firebase
- ในคอนโซล Firebase ให้เปิดส่วนการตรวจสอบสิทธิ์ ในแท็บ Sign in method ให้เปิดใช้ผู้ให้บริการ Apple ระบุรหัสบริการที่คุณสร้างไว้ในส่วนก่อนหน้า นอกจากนี้ในส่วนการกำหนดค่าโฟลว์รหัส OAuth ให้ระบุ Apple Team ID รวมถึงคีย์ส่วนตัวและรหัสคีย์ที่คุณสร้างในส่วนก่อนหน้า
ปฏิบัติตามข้อกำหนดด้านข้อมูลที่ไม่ระบุตัวบุคคลของ Apple
ฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple มอบตัวเลือกให้ผู้ใช้ลบข้อมูลระบุตัวบุคคล ซึ่งรวมถึงอีเมลของตนเมื่อลงชื่อเข้าใช้ ผู้ใช้ที่เลือกตัวเลือกนี้จะมีอีเมลของโดเมน privaterelay.appleid.com
เมื่อใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ในแอป คุณต้องปฏิบัติตามนโยบายนักพัฒนาซอฟต์แวร์หรือข้อกำหนดของ Apple ที่เกี่ยวข้องกับ Apple ID ที่ไม่ระบุตัวตนเหล่านี้
ซึ่งรวมถึงการขอความยินยอมจากผู้ใช้ที่จำเป็นก่อนเชื่อมโยงข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้กับ Apple ID ที่ไม่ระบุตัวตน เมื่อใช้การตรวจสอบสิทธิ์ Firebase อาจรวมถึงการดำเนินการต่อไปนี้
- ลิงก์อีเมลกับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
- ลิงก์หมายเลขโทรศัพท์กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
- ลิงก์ข้อมูลเข้าสู่ระบบโซเชียลที่ระบุตัวบุคคล (Facebook, Google ฯลฯ) กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
รายการด้านบนเป็นเพียงตัวอย่างบางส่วนเท่านั้น โปรดอ่านข้อตกลงใบอนุญาตโปรแกรมนักพัฒนาซอฟต์แวร์ของ Apple ในส่วน "การเป็นสมาชิก" ของบัญชีนักพัฒนาแอป เพื่อตรวจสอบว่าแอปของคุณเป็นไปตามข้อกำหนดของ Apple
จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK
วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ด้วย Firebase โดยใช้บัญชี Apple บน Android คือการจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase Android SDK
ในการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase Android SDK โปรดทำตามขั้นตอนต่อไปนี้
สร้างอินสแตนซ์ของ
OAuthProvider
โดยใช้เครื่องมือสร้างที่มีรหัสผู้ให้บริการapple.com
:Kotlin+KTX
val provider = OAuthProvider.newBuilder("apple.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("apple.com");
ไม่บังคับ: ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจากค่าเริ่มต้นที่ต้องการขอจากผู้ให้บริการตรวจสอบสิทธิ์
Kotlin+KTX
provider.setScopes(arrayOf("email", "name"))
Java
List<String> scopes = new ArrayList<String>() { { add("email"); add("name"); } }; provider.setScopes(scopes);
โดยค่าเริ่มต้น เมื่อเปิดใช้1 บัญชีต่ออีเมล Firebase จะขอขอบเขตอีเมลและชื่อ หากคุณเปลี่ยนการตั้งค่านี้เป็นหลายบัญชีต่ออีเมล Firebase จะไม่ขอขอบเขตจาก Apple เว้นแต่คุณจะระบุขอบเขตนั้น
ไม่บังคับ: หากต้องการแสดงหน้าจอลงชื่อเข้าใช้ของ Apple ในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ ให้ตั้งค่าพารามิเตอร์
locale
โปรดดูภาษาที่รองรับในเอกสารการลงชื่อเข้าใช้ด้วย AppleKotlin+KTX
// Localize the Apple authentication screen in French. provider.addCustomParameter("locale", "fr")
Java
// Localize the Apple authentication screen in French. provider.addCustomParameter("locale", "fr");
ตรวจสอบสิทธิ์กับ Firebase โดยใช้ออบเจ็กต์ผู้ให้บริการ OAuth โปรดทราบว่าวิธีนี้ต่างจากการดำเนินการอื่นๆ ของ
FirebaseAuth
ตรงที่จะควบคุม UI ของคุณด้วยการเปิดแท็บ Chrome ที่กำหนดเอง ดังนั้น อย่าอ้างอิงกิจกรรมของคุณในOnSuccessListener
และOnFailureListener
ที่แนบเพราะกิจกรรมเหล่านี้จะปลดออกทันทีเมื่อการดำเนินการเริ่มต้น UIก่อนอื่นคุณควรตรวจสอบว่าได้รับคำตอบแล้วหรือยัง การลงชื่อเข้าใช้ด้วยวิธีนี้จะทำให้กิจกรรมของคุณทำงานอยู่เบื้องหลัง ซึ่งหมายความว่าระบบเรียกคืนกิจกรรมได้ระหว่างขั้นตอนการลงชื่อเข้าใช้ เพื่อให้แน่ใจว่าคุณไม่ได้ทำให้ผู้ใช้ลองอีกครั้งหากเกิดเหตุการณ์นี้ คุณควรตรวจสอบว่ามีผลลัพธ์อยู่แล้วหรือไม่
หากต้องการตรวจสอบว่ามีผลลัพธ์ที่รอดำเนินการหรือไม่ ให้โทรหา
getPendingAuthResult()
:Kotlin+KTX
val pending = auth.pendingAuthResult if (pending != null) { pending.addOnSuccessListener { authResult -> Log.d(TAG, "checkPending:onSuccess:$authResult") // Get the user profile with authResult.getUser() and // authResult.getAdditionalUserInfo(), and the ID // token from Apple with authResult.getCredential(). }.addOnFailureListener { e -> Log.w(TAG, "checkPending:onFailure", e) } } else { Log.d(TAG, "pending: null") }
Java
mAuth = FirebaseAuth.getInstance(); Task<AuthResult> pending = mAuth.getPendingAuthResult(); if (pending != null) { pending.addOnSuccessListener(new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { Log.d(TAG, "checkPending:onSuccess:" + authResult); // Get the user profile with authResult.getUser() and // authResult.getAdditionalUserInfo(), and the ID // token from Apple with authResult.getCredential(). } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "checkPending:onFailure", e); } }); } else { Log.d(TAG, "pending: null"); }
หากไม่มีผลลัพธ์ที่รอดำเนินการ ให้เริ่มขั้นตอนการลงชื่อเข้าใช้โดยโทรไปที่
startActivityForSignInWithProvider()
Kotlin+KTX
auth.startActivityForSignInWithProvider(this, provider.build()) .addOnSuccessListener { authResult -> // Sign-in successful! Log.d(TAG, "activitySignIn:onSuccess:${authResult.user}") val user = authResult.user // ... } .addOnFailureListener { e -> Log.w(TAG, "activitySignIn:onFailure", e) }
Java
mAuth.startActivityForSignInWithProvider(this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Sign-in successful! Log.d(TAG, "activitySignIn:onSuccess:" + authResult.getUser()); FirebaseUser user = authResult.getUser(); // ... } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { Log.w(TAG, "activitySignIn:onFailure", e); } });
Apple จะไม่ระบุ URL รูปภาพให้ ซึ่งต่างจากผู้ให้บริการรายอื่นๆ ที่ Firebase Auth รองรับ
นอกจากนี้ เมื่อผู้ใช้เลือกที่จะไม่แชร์อีเมลกับแอป Apple จะจัดเตรียมอีเมลที่ไม่ซ้ำกันให้กับผู้ใช้ดังกล่าว (ในแบบฟอร์ม
[email protected]
) ซึ่งแชร์กับแอปของคุณ หากคุณกำหนดค่าบริการส่งต่ออีเมลส่วนตัว Apple จะส่งต่ออีเมลที่ส่งไปยังอีเมลจริงของผู้ใช้ไปยังอีเมลจริงของผู้ใช้Apple จะแชร์เฉพาะข้อมูลผู้ใช้ เช่น ชื่อที่แสดงกับแอปในครั้งแรกที่ผู้ใช้ลงชื่อเข้าใช้ โดยทั่วไป Firebase จะจัดเก็บชื่อที่แสดงเมื่อผู้ใช้ลงชื่อเข้าใช้ด้วย Apple เป็นครั้งแรก ซึ่งคุณจะใช้ Google
getCurrentUser().getDisplayName()
ได้ อย่างไรก็ตาม หากก่อนหน้านี้คุณใช้ Apple เพื่อลงชื่อเข้าใช้ให้ผู้ใช้ในแอปโดยไม่ใช้ Firebase ทาง Apple จะไม่ให้ชื่อที่แสดงของผู้ใช้แก่ Firebase
การตรวจสอบสิทธิ์ซ้ำและการลิงก์บัญชี
รูปแบบเดียวกันนี้สามารถใช้กับ startActivityForReauthenticateWithProvider()
ได้ ซึ่งสามารถใช้เพื่อดึงข้อมูลเข้าสู่ระบบใหม่สำหรับการดำเนินการที่มีความละเอียดอ่อนซึ่งต้องลงชื่อเข้าใช้ล่าสุด
Kotlin+KTX
// The user is already signed-in.
val firebaseUser = auth.getCurrentUser()
firebaseUser
.startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener( authResult -> {
// User is re-authenticated with fresh tokens and
// should be able to perform sensitive operations
// like account deletion and email or password
// update.
})
.addOnFailureListener( e -> {
// Handle failure.
})
Java
// The user is already signed-in.
FirebaseUser firebaseUser = mAuth.getCurrentUser();
firebaseUser
.startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
.addOnSuccessListener(
new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
// User is re-authenticated with fresh tokens and
// should be able to perform sensitive operations
// like account deletion and email or password
// update.
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Handle failure.
}
});
และคุณสามารถใช้ linkWithCredential()
เพื่อลิงก์ผู้ให้บริการข้อมูลประจำตัวที่แตกต่างกันกับบัญชีที่มีอยู่ได้
โปรดทราบว่า Apple กำหนดให้คุณขอความยินยอมอย่างชัดแจ้งจากผู้ใช้ก่อนที่คุณจะลิงก์บัญชี Apple ของผู้ใช้เหล่านั้นกับข้อมูลอื่นๆ
ตัวอย่างเช่น หากต้องการลิงก์บัญชี Facebook กับบัญชี Firebase ปัจจุบัน ให้ใช้โทเค็นเพื่อการเข้าถึงที่คุณได้รับจากการลงชื่อเข้าใช้ Facebook ของผู้ใช้
Kotlin+KTX
// Initialize a Facebook credential with a Facebook access token.
val credential = FacebookAuthProvider.getCredential(token.getToken())
// Assuming the current user is an Apple user linking a Facebook provider.
mAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, task -> {
if (task.isSuccessful()) {
// Facebook credential is linked to the current Apple user.
// The user can now sign in to the same account
// with either Apple or Facebook.
}
});
Java
// Initialize a Facebook credential with a Facebook access token.
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
// Assuming the current user is an Apple user linking a Facebook provider.
mAuth.getCurrentUser().linkWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Facebook credential is linked to the current Apple user.
// The user can now sign in to the same account
// with either Apple or Facebook.
}
}
});
ขั้นสูง: จัดการขั้นตอนการลงชื่อเข้าใช้ด้วยตนเอง
นอกจากนี้คุณยังตรวจสอบสิทธิ์กับ Firebase โดยใช้บัญชี Apple ได้โดยจัดการขั้นตอนการลงชื่อเข้าใช้โดยใช้ Apple Sign-In JS SDK, สร้างขั้นตอน OAuth ด้วยตนเองหรือใช้ไลบรารี OAuth เช่น AppAuth
สำหรับคำขอลงชื่อเข้าใช้ทุกครั้ง ให้สร้างสตริงแบบสุ่ม "nonce" ที่คุณจะใช้เพื่อตรวจสอบว่าโทเค็นรหัสที่คุณได้รับนั้นได้รับสิทธิ์ในการตอบสนองต่อคำขอการตรวจสอบสิทธิ์ของแอปโดยเฉพาะ ขั้นตอนนี้มีความสำคัญในการป้องกันการโจมตีจากการเล่นซ้ำ
คุณสร้าง Nonce ที่มีการเข้ารหัสที่ปลอดภัยใน Android ด้วย
SecureRandom
ตามตัวอย่างต่อไปนี้Kotlin+KTX
private fun generateNonce(length: Int): String { val generator = SecureRandom() val charsetDecoder = StandardCharsets.US_ASCII.newDecoder() charsetDecoder.onUnmappableCharacter(CodingErrorAction.IGNORE) charsetDecoder.onMalformedInput(CodingErrorAction.IGNORE) val bytes = ByteArray(length) val inBuffer = ByteBuffer.wrap(bytes) val outBuffer = CharBuffer.allocate(length) while (outBuffer.hasRemaining()) { generator.nextBytes(bytes) inBuffer.rewind() charsetDecoder.reset() charsetDecoder.decode(inBuffer, outBuffer, false) } outBuffer.flip() return outBuffer.toString() }
Java
private String generateNonce(int length) { SecureRandom generator = new SecureRandom(); CharsetDecoder charsetDecoder = StandardCharsets.US_ASCII.newDecoder(); charsetDecoder.onUnmappableCharacter(CodingErrorAction.IGNORE); charsetDecoder.onMalformedInput(CodingErrorAction.IGNORE); byte[] bytes = new byte[length]; ByteBuffer inBuffer = ByteBuffer.wrap(bytes); CharBuffer outBuffer = CharBuffer.allocate(length); while (outBuffer.hasRemaining()) { generator.nextBytes(bytes); inBuffer.rewind(); charsetDecoder.reset(); charsetDecoder.decode(inBuffer, outBuffer, false); } outBuffer.flip(); return outBuffer.toString(); }
จากนั้นรับแฮช SHA246 ของ nonce เป็นสตริงฐานสิบหก:
Kotlin+KTX
private fun sha256(s: String): String { val md = MessageDigest.getInstance("SHA-256") val digest = md.digest(s.toByteArray()) val hash = StringBuilder() for (c in digest) { hash.append(String.format("%02x", c)) } return hash.toString() }
Java
private String sha256(String s) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] digest = md.digest(s.getBytes()); StringBuilder hash = new StringBuilder(); for (byte c: digest) { hash.append(String.format("%02x", c)); } return hash.toString(); }
คุณจะส่งแฮช SHA256 ของ nonce ไปกับคำขอลงชื่อเข้าใช้ ซึ่ง Apple จะไม่ส่งไปในการตอบสนอง Firebase จะตรวจสอบการตอบกลับโดยการแฮชค่า Nonce ต้นฉบับและเปรียบเทียบกับค่าที่ Apple ส่งให้
เริ่มขั้นตอนการลงชื่อเข้าใช้ของ Apple โดยใช้ไลบรารี OAuth หรือวิธีการอื่น อย่าลืมใส่ Nonce ที่แฮชเป็นพารามิเตอร์ในคำขอ
หลังจากได้รับการตอบกลับของ Apple ให้รับโทเค็นรหัสจากการตอบกลับและใช้โทเค็นดังกล่าว รวมถึงค่าที่ไม่ใช่การแฮชที่ไม่ได้แฮชเพื่อสร้าง
AuthCredential
Kotlin+KTX
val credential = OAuthProvider.newCredentialBuilder("apple.com") .setIdTokenWithRawNonce(appleIdToken, rawUnhashedNonce) .build()
Java
AuthCredential credential = OAuthProvider.newCredentialBuilder("apple.com") .setIdTokenWithRawNonce(appleIdToken, rawUnhashedNonce) .build();
ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้ข้อมูลเข้าสู่ระบบของ Firebase
Kotlin+KTX
auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // User successfully signed in with Apple ID token. // ... } }
Java
mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // User successfully signed in with Apple ID token. // ... } } });
หากเรียก signInWithCredential
สำเร็จ คุณจะใช้เมธอด getCurrentUser
เพื่อรับข้อมูลบัญชีของผู้ใช้ได้
การเพิกถอนโทเค็น
Apple กําหนดให้แอปที่รองรับการสร้างบัญชีต้องอนุญาตให้ผู้ใช้เริ่มลบบัญชีภายในแอปตามที่อธิบายไว้ในหลักเกณฑ์การรีวิวของ App Store
นอกจากนี้ แอปที่รองรับฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ควรใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple REST API เพื่อเพิกถอนโทเค็นของผู้ใช้
โปรดทำตามขั้นตอนต่อไปนี้เพื่อให้เป็นไปตามข้อกำหนดนี้
ใช้เมธอด
startActivityForSignInWithProvider()
เพื่อลงชื่อเข้าใช้ด้วย Apple และรับAuthResult
รับโทเค็นเพื่อการเข้าถึงสำหรับผู้ให้บริการ Apple
Kotlin+KTX
val oauthCredential: OAuthCredential = authResult.credential val accessToken = oauthCredential.accessToken
Java
OAuthCredential oauthCredential = (OAuthCredential) authResult.getCredential(); String accessToken = oauthCredential.getAccessToken();
เพิกถอนโทเค็นโดยใช้ API ของ
revokeAccessToken
Kotlin+KTX
mAuth.revokeAccessToken(accessToken) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Access token successfully revoked // for the user ... } }
Java
mAuth.revokeAccessToken(accessToken) .addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { // Access token successfully revoked // for the user ... } } });
- สุดท้าย ให้ลบบัญชีผู้ใช้ (และข้อมูลที่เกี่ยวข้องทั้งหมด)
ขั้นตอนถัดไป
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และลิงก์กับข้อมูลเข้าสู่ระบบ ซึ่งก็คือชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการการตรวจสอบสิทธิ์ที่ผู้ใช้ลงชื่อเข้าใช้ บัญชีใหม่นี้จะได้รับการจัดเก็บไว้เป็นส่วนหนึ่งของโปรเจ็กต์ Firebase ของคุณ และสามารถนำไปใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม
-
คุณจะดูข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ในแอปได้จากออบเจ็กต์
FirebaseUser
โปรดดูที่ จัดการผู้ใช้ ในกฎความปลอดภัยสำหรับฐานข้อมูลเรียลไทม์ของ Firebase และ Cloud Storage คุณจะรับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้ได้จากตัวแปร
auth
และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้
คุณอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายได้โดยลิงก์ข้อมูลเข้าสู่ระบบของผู้ให้บริการการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
หากต้องการนำผู้ใช้ออกจากระบบ ให้โทรหา
signOut
:Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();
-