คุณสามารถอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้ Apple ID ได้โดยดำเนินการดังนี้ โดยใช้ Firebase SDK เพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ OAuth 2.0 แบบต้นทางถึงปลายทาง
ก่อนเริ่มต้น
หากต้องการลงชื่อเข้าใช้ให้ผู้ใช้ด้วย Apple ให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple ก่อน ในเว็บไซต์ของนักพัฒนาซอฟต์แวร์ Apple จากนั้นให้ Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้สำหรับ โปรเจ็กต์ Firebase
เข้าร่วมโปรแกรมนักพัฒนาซอฟต์แวร์ของ Apple
เฉพาะสมาชิกของนักพัฒนาซอฟต์แวร์ Apple เท่านั้นที่สามารถกำหนดค่าฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ได้ โปรแกรม
กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple
ต้องเปิดใช้การลงชื่อเข้าใช้ Apple และกำหนดค่าอย่างถูกต้องในโปรเจ็กต์ Firebase การกำหนดค่านักพัฒนาซอฟต์แวร์ของ Apple แตกต่างกันไปตามแพลตฟอร์ม Android และ Apple โปรดทำตาม "กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple" ของ iOS+ และ/หรือ คู่มือ Android ก่อนหน้านี้ ดำเนินการต่อเปิดใช้ Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้
- ในคอนโซล Firebase ให้เปิดส่วน Auth ในแท็บวิธีการลงชื่อเข้าใช้ เปิดใช้ผู้ให้บริการ Apple
- กำหนดการตั้งค่าผู้ให้บริการการลงชื่อเข้าใช้ Apple ดังนี้
- หากคุณทำให้แอปใช้งานได้เฉพาะในแพลตฟอร์มของ Apple เท่านั้น ให้ออกจาก ช่องรหัสบริการ, รหัสทีม Apple, คีย์ส่วนตัว และรหัสคีย์ว่างเปล่า
- วิธีรับการสนับสนุนในอุปกรณ์ Android
- เพิ่ม Firebase ลงในโปรเจ็กต์ Android เป็น อย่าลืมลงทะเบียนลายเซ็น SHA-1 ของแอปเมื่อคุณตั้งค่าแอปใน คอนโซล Firebase
- ในคอนโซล Firebase ให้เปิดส่วน Auth ใน แท็บวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ผู้ให้บริการ Apple ระบุ รหัสบริการที่คุณสร้างไว้ในส่วนก่อนหน้า นอกจากนี้ในโค้ด OAuth การกำหนดค่าโฟลว์ ให้ระบุรหัสทีม Apple และคีย์ส่วนตัวของคุณ และรหัสคีย์ที่คุณสร้างไว้ในส่วนก่อนหน้านี้
ปฏิบัติตามข้อกำหนดด้านข้อมูลที่ไม่ระบุตัวบุคคลของ Apple
ฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ช่วยให้ผู้ใช้เลือกลบข้อมูลระบุตัวบุคคลได้
รวมถึงอีเมลเมื่อลงชื่อเข้าใช้ ผู้ใช้ที่เลือกตัวเลือกนี้
มีที่อยู่อีเมลในโดเมน privaterelay.appleid.com
วันและเวลา
หากใช้ฟีเจอร์ลงชื่อเข้าใช้ด้วย Apple ในแอป คุณจะต้องปฏิบัติตาม
นโยบายหรือข้อกำหนดสำหรับนักพัฒนาซอฟต์แวร์จาก Apple เกี่ยวกับ Apple ที่มีการลบข้อมูลระบุตัวบุคคลเหล่านี้
รหัส
ซึ่งรวมถึงการได้รับความยินยอมที่จำเป็นจากผู้ใช้ก่อนคุณ เชื่อมโยงข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้โดยตรงกับ Apple ที่มีการลบข้อมูลระบุตัวบุคคล ID เมื่อใช้การตรวจสอบสิทธิ์ Firebase อาจรวมถึงสิ่งต่อไปนี้ การดำเนินการ:
- ลิงก์อีเมลกับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
- ลิงก์หมายเลขโทรศัพท์กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
- ลิงก์ข้อมูลเข้าสู่ระบบโซเชียลที่ระบุตัวบุคคลไม่ได้ (Facebook, Google ฯลฯ) กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
รายการด้านบนเป็นเพียงตัวอย่างบางส่วนเท่านั้น เข้าร่วมโปรแกรมนักพัฒนาซอฟต์แวร์ของ Apple ข้อตกลงการอนุญาตให้ใช้สิทธิในส่วนการเป็นสมาชิกของบัญชีนักพัฒนาแอป ให้แอปของคุณเป็นไปตามข้อกำหนดของ Apple
เข้าถึงชั้นเรียน Firebase.Auth.FirebaseAuth
คลาส FirebaseAuth
เป็นเกตเวย์สำหรับการเรียก API ทั้งหมด
ซึ่งเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstance
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK
ขั้นตอนในการลงชื่อเข้าใช้ด้วย Apple จะแตกต่างกันไปในแพลตฟอร์มของ Apple และ Android ทั้งหมด
ในแพลตฟอร์ม Apple
ติดตั้งปลั๊กอินของบุคคลที่สามเพื่อจัดการ Nonce และโทเค็นการลงชื่อเข้าใช้ Apple เช่น การลงชื่อเข้าใช้ด้วยพื้นที่เก็บข้อมูลของ Apple ของ Unity บรรจุหีบห่อ คุณอาจต้องเปลี่ยนโค้ดเพื่อใช้สตริง Nonce แบบสุ่มที่สร้างขึ้น สถานะสตริงดิบสำหรับใช้ในการดำเนินการ Firebase (ซึ่งก็คือจัดเก็บสำเนาของ ก่อนที่จะสร้างรูปแบบไดเจสต์ SHA256 ของ Nonce)
ใช้สตริงโทเค็นที่ได้และ Nonce ดิบเพื่อสร้าง Firebase ข้อมูลเข้าสู่ระบบและลงชื่อเข้าใช้ Firebase
Firebase.Auth.Credential credential = Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
รูปแบบเดียวกันนี้สามารถใช้กับ
ReauthenticateAsync
ซึ่งสามารถ ใช้เพื่อเรียกข้อมูลข้อมูลเข้าสู่ระบบใหม่สำหรับการดำเนินการที่มีความละเอียดอ่อนซึ่งจำเป็นต้องใช้ การเข้าสู่ระบบครั้งล่าสุด สำหรับข้อมูลเพิ่มเติม โปรดดูที่ จัดการผู้ใช้เมื่อลิงก์กับ Apple Sign-In ในแพลตฟอร์มของ Apple คุณอาจพบข้อผิดพลาด ลิงก์บัญชี Firebase ที่มีอยู่กับบัญชี Apple แล้ว วันและเวลา กรณีนี้จะมีการโยน
Firebase.Auth.FirebaseAccountLinkException
แทนที่จะเป็นFirebase.FirebaseException
มาตรฐาน ในกรณีนี้ ข้อยกเว้นมีพร็อพเพอร์ตี้UserInfo.UpdatedCredential
โดยสามารถใช้เพื่อลงชื่อเข้าใช้ผู้ใช้ที่ลิงก์กับ Apple ผ่าน หากเหมาะสมFirebaseAuth.SignInAndRetrieveDataWithCredentialAsync
ข้อมูลเข้าสู่ระบบที่อัปเดตนี้ทำให้ไม่จำเป็นต้องสร้างโทเค็น Apple Sign-In ใหม่ ด้วยค่า Nonce สำหรับการดำเนินการลงชื่อเข้าใช้auth.CurrentUser.LinkWithCredentialAsync( Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null)) .ContinueWithOnMainThread( task => { if (task.IsCompletedSuccessfully) { // Link Success } else { if (task.Exception != null) { foreach (Exception exception in task.Exception.Flatten().InnerExceptions) { Firebase.Auth.FirebaseAccountLinkException firebaseEx = exception as Firebase.Auth.FirebaseAccountLinkException; if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) { // Attempt to sign in with the updated credential. auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential). ContinueWithOnMainThread( authResultTask => { // Handle Auth result. }); } else { Debug.Log("Link with Apple failed:" + firebaseEx ); } } // end for loop } } });
บน Android
ใน Android ตรวจสอบสิทธิ์ผู้ใช้ด้วย Firebase ด้วยการผสานรวมในเว็บ การเข้าสู่ระบบ OAuth ทั่วไปในแอปโดยใช้ Firebase SDK เพื่อดำเนินการ สิ้นสุดขั้นตอนการลงชื่อเข้าใช้
หากต้องการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนต่อไปนี้
สร้างอินสแตนซ์ของ
FederatedOAuthProviderData
ที่กำหนดค่าด้วย รหัสผู้ให้บริการที่เหมาะกับ Apple เท่านั้นFirebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = "apple.com";
ไม่บังคับ: ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจากค่าเริ่มต้นที่ ต้องการส่งคำขอจากผู้ให้บริการตรวจสอบสิทธิ์
providerData.Scopes = new List<string>(); providerData.Scopes.Add("email"); providerData.Scopes.Add("name");
ไม่บังคับ: หากต้องการแสดงหน้าจอลงชื่อเข้าใช้ของ Apple ในภาษา นอกเหนือจากภาษาอังกฤษ ให้ตั้งค่าพารามิเตอร์
locale
โปรดดู ลงชื่อเข้าใช้ด้วยเอกสารของ Apple สำหรับภาษาที่รองรับproviderData.CustomParameters = new Dictionary<string,string>; // Localize to French. providerData.CustomParameters.Add("language", "fr");
เมื่อกำหนดค่าข้อมูลผู้ให้บริการแล้ว ให้ใช้ข้อมูลเพื่อสร้าง FederatedOAuthProvider
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
ตรวจสอบสิทธิ์กับ Firebase โดยใช้ออบเจ็กต์ผู้ให้บริการการตรวจสอบสิทธิ์ โปรดทราบว่าสิ่งที่ การดำเนินการ FirebaseAuth อื่นๆ ขั้นตอนนี้จะควบคุม UI ของคุณด้วยการ เป็นมุมมองเว็บที่ผู้ใช้สามารถป้อนข้อมูลเข้าสู่ระบบได้
หากต้องการเริ่มขั้นตอนการลงชื่อเข้าใช้ โปรดโทรหา
signInWithProvider
auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User signed in successfully: {0} ({1})", user.DisplayName, user.UserId); });
รูปแบบเดียวกันนี้สามารถใช้กับ
ReauthenticateWithProvider
ซึ่งสามารถ ใช้เพื่อเรียกข้อมูลข้อมูลเข้าสู่ระบบใหม่สำหรับการดำเนินการที่มีความละเอียดอ่อนซึ่งจำเป็นต้องใช้ การเข้าสู่ระบบครั้งล่าสุดuser.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("ReauthenticateWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError( "ReauthenticateWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User reauthenticated successfully: {0} ({1})", user.DisplayName, user.UserId); });
และคุณจะใช้
LinkWithCredentialAsync()
เพื่อลิงก์ผู้ให้บริการข้อมูลประจำตัวรายต่างๆ ได้ กับบัญชีที่มีอยู่แล้วโปรดทราบว่า Apple กำหนดให้คุณต้องขอความยินยอมอย่างชัดแจ้งจากผู้ใช้ก่อนดำเนินการ ลิงก์บัญชี Apple กับข้อมูลอื่น
เช่น หากต้องการลิงก์บัญชี Facebook กับบัญชี Firebase ปัจจุบัน ให้ใช้ โทเค็นเพื่อการเข้าถึงที่คุณได้รับจากการลงชื่อเข้าใช้ Facebook ของผู้ใช้:
// Initialize a Facebook credential with a Facebook access token. Firebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token); // Assuming the current user is an Apple user linking a Facebook provider. user.LinkWithCredentialAsync(credential) .ContinueWithOnMainThread( task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Firebase.Auth.FirebaseUser user = result.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
ลงชื่อเข้าใช้ด้วย Apple Notes
Apple ไม่เหมือนกับผู้ให้บริการรายอื่นๆ ที่ Firebase Auth รองรับ URL ของภาพถ่าย
นอกจากนี้ เมื่อผู้ใช้เลือกที่จะไม่แชร์อีเมลกับแอป Apple
ให้ที่อยู่อีเมลที่ไม่ซ้ำกันสำหรับผู้ใช้ดังกล่าว (ในแบบฟอร์ม
xyz@privaterelay.appleid.com
) ซึ่งแชร์กับแอปของคุณ หากคุณ
กำหนดค่าบริการส่งต่ออีเมลส่วนตัวแล้ว Apple จะส่งต่ออีเมลที่ส่งไปยัง
กับอีเมลจริงของผู้ใช้
Apple จะแชร์เฉพาะข้อมูลผู้ใช้ เช่น ชื่อที่แสดงกับแอป
ครั้งแรกที่ผู้ใช้ลงชื่อเข้าใช้ โดยทั่วไป Firebase จะจัดเก็บชื่อที่แสดง
ครั้งแรกที่ผู้ใช้ลงชื่อเข้าใช้ด้วย Apple ซึ่งคุณจะใช้
auth.CurrentUser.DisplayName
อย่างไรก็ตาม หากก่อนหน้านี้คุณใช้ Apple ในการลงชื่อเข้าใช้แอป
เมื่อใช้ Firebase Apple จะไม่มอบชื่อที่แสดงของผู้ใช้ให้ Firebase
ขั้นตอนถัดไป
หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก ระบบจะสร้างบัญชีผู้ใช้ใหม่และลิงก์กับข้อมูลเข้าสู่ระบบ ซึ่งก็คือชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลของผู้ให้บริการการตรวจสอบสิทธิ์ ซึ่งผู้ใช้ที่ลงชื่อเข้าใช้ด้วย ระบบจะจัดเก็บบัญชีใหม่นี้เป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณได้ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดในแอป คุณสามารถดูข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จากออบเจ็กต์ Firebase.Auth.FirebaseUser โปรดดูหัวข้อจัดการผู้ใช้
ในกฎการรักษาความปลอดภัยของ Firebase และ Cloud Storage ในฐานข้อมูลเรียลไทม์ของ Firebase คุณจะได้รับรหัสผู้ใช้ที่ไม่ซ้ำของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปรการตรวจสอบสิทธิ์ และใช้รหัสดังกล่าวเพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้