คุณสามารถให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้ผู้ให้บริการ OAuth เช่น Yahoo ได้โดยการรวมการเข้าสู่ระบบ OAuth ทั่วไปบนเว็บเข้ากับแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ตั้งแต่ต้นจนจบ เนื่องจากโฟลว์นี้ต้องใช้ Firebase SDK ที่ใช้โทรศัพท์ จึงรองรับเฉพาะแพลตฟอร์ม Android และ Apple เท่านั้น
ก่อนที่คุณจะเริ่มต้น
ก่อนที่คุณจะสามารถใช้ Firebase Authentication คุณต้อง:
ลงทะเบียนโครงการ Unity ของคุณและกำหนดค่าเพื่อใช้ Firebase
หากโปรเจ็กต์ Unity ของคุณใช้ Firebase อยู่แล้ว แสดงว่ามีการลงทะเบียนและกำหนดค่าสำหรับ Firebase แล้ว
หากคุณไม่มีโครงการ Unity คุณสามารถดาวน์โหลด แอปตัวอย่างได้
เพิ่ม Firebase Unity SDK (โดยเฉพาะ
FirebaseAuth.unitypackage
) ในโครงการ Unity ของคุณ
โปรดทราบว่าการเพิ่ม Firebase ในโครงการ Unity ของคุณเกี่ยวข้องกับงานทั้งใน คอนโซล Firebase และในโครงการ Unity แบบเปิดของคุณ (เช่น คุณดาวน์โหลดไฟล์การกำหนดค่า Firebase จากคอนโซล จากนั้นย้ายไฟล์เหล่านี้ไปยังโครงการ Unity ของคุณ)
เข้าถึงคลาส Firebase.Auth.FirebaseAuth
คลาส FirebaseAuth
เป็นเกตเวย์สำหรับการเรียก API ทั้งหมด สามารถเข้าถึงได้ผ่าน FirebaseAuth.DefaultInstanceFirebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK
หากต้องการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนเหล่านี้:
สร้างอินสแตนซ์ของ
FederatedOAuthProviderData
ที่กำหนดค่าด้วยรหัสผู้ให้บริการที่เหมาะสมสำหรับ YahooFirebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
ทางเลือก : ระบุพารามิเตอร์ OAuth ที่กำหนดเองเพิ่มเติมที่คุณต้องการส่งพร้อมกับคำขอ OAuth
providerData.CustomParameters = new Dictionary<string,string>; // Prompt user to re-authenticate to Yahoo. providerData.CustomParameters.Add("prompt", "login"); // Localize to French. providerData.CustomParameters.Add("language", "fr");
สำหรับพารามิเตอร์ที่ Yahoo รองรับ โปรดดูที่ เอกสาร OAuth ของ Yahoo โปรดทราบว่าคุณไม่สามารถส่งพารามิเตอร์ที่กำหนดโดย Firebase กับ
custom_parameters()
พารามิเตอร์เหล่านี้คือ client_id , redirect_uri , response_type , scope และ stateทางเลือก : ระบุขอบเขต OAuth 2.0 เพิ่มเติมนอกเหนือจาก
profile
และemail
ที่คุณต้องการขอจากผู้ให้บริการตรวจสอบสิทธิ์ หากแอปพลิเคชันของคุณต้องการเข้าถึงข้อมูลผู้ใช้ส่วนตัวจาก Yahoo API คุณจะต้องขอสิทธิ์ไปยัง Yahoo API ภายใต้ สิทธิ์ API ในแผงควบคุมสำหรับนักพัฒนาซอฟต์แวร์ของ Yahoo ขอบเขต OAuth ที่ขอต้องตรงกันทุกประการกับขอบเขตที่กำหนดไว้ล่วงหน้าในสิทธิ์ API ของแอป ตัวอย่างเช่น หากมีการร้องขอการเข้าถึงแบบอ่าน/เขียนไปยังผู้ติดต่อของผู้ใช้ และกำหนดค่าไว้ล่วงหน้าในการอนุญาต API ของแอปsdct-w
จะต้องส่งผ่านแทนขอบเขต OAuth แบบอ่านอย่างเดียวsdct-r
มิฉะนั้นโฟลว์จะล้มเหลวและผู้ใช้ปลายทางจะแสดงข้อผิดพลาดproviderData.Scopes = new List<string>(); // Request access to Yahoo Mail API. providerData.Scopes.Add("mail-r"); // This must be preconfigured in the app's API permissions. providerData.Scopes.Add("sdct-w");
หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่ เอกสารประกอบขอบเขตของ Yahoo
เมื่อข้อมูลผู้ให้บริการของคุณได้รับการกำหนดค่าแล้ว ให้ใช้เพื่อสร้าง FederatedOAuthProvider
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);
รับรองความถูกต้องด้วย Firebase โดยใช้วัตถุผู้ให้บริการรับรองความถูกต้อง โปรดทราบว่าไม่เหมือนกับการดำเนินการ FirebaseAuth อื่นๆ ซึ่งจะควบคุม UI ของคุณโดยเปิดมุมมองเว็บขึ้นมาซึ่งผู้ใช้สามารถป้อนข้อมูลประจำตัวของตนได้
ในการเริ่มต้นขั้นตอนการลงชื่อเข้าใช้ ให้เรียก
SignInAndRetrieveDataWithCredentialAsync
:
<<../_includes/_sign_in_with_provider_unity.md>>>
แม้ว่าตัวอย่างข้างต้นจะมุ่งเน้นไปที่ขั้นตอนการลงชื่อเข้าใช้ คุณยังสามารถเชื่อมโยงผู้ให้บริการ Yahoo กับผู้ใช้ที่มีอยู่โดยใช้
LinkWithProviderAsync
ตัวอย่างเช่น คุณสามารถเชื่อมโยงผู้ให้บริการหลายรายกับผู้ใช้รายเดียวกัน โดยอนุญาตให้พวกเขาลงชื่อเข้าใช้ด้วยผู้ให้บริการรายใดรายหนึ่งuser.LinkWithProviderAsync(provider).ContinueOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("LinkWithProviderAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithProviderAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult authResult = task.Result; Firebase.Auth.FirebaseUser user = authResult.User; Debug.LogFormat("User linked successfully: {0} ({1})", user.DisplayName, user.UserId); });
สามารถใช้รูปแบบเดียวกันนี้กับ
ReauthenticateWithProviderAsync
ซึ่งสามารถใช้เพื่อดึงข้อมูลรับรองใหม่สำหรับการดำเนินการที่ละเอียดอ่อนซึ่งต้องมีการเข้าสู่ระบบล่าสุด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); });
ขั้นตอนถัดไป
หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับข้อมูลประจำตัว ซึ่งก็คือชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ ซึ่งผู้ใช้ลงชื่อเข้าใช้ด้วย บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และสามารถใช้ระบุผู้ใช้ในทุกแอปในโครงการ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม
ในแอปของคุณ คุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จากออบเจ็กต์
Firebase.Auth.FirebaseUser
:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use User.TokenAsync() instead. string uid = user.UserId; }
ใน กฎความปลอดภัย ของ Firebase Realtime Database และ Cloud Storage คุณสามารถรับ ID ผู้ใช้ที่ไม่ซ้ำกันของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร
auth
และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้
คุณสามารถอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้ผู้ให้บริการตรวจสอบสิทธิ์หลายรายโดย เชื่อมโยงข้อมูลประจำตัวของผู้ให้บริการตรวจสอบสิทธิ์กับบัญชีผู้ใช้ที่มีอยู่
หากต้องการลงชื่อออกจากผู้ใช้ ให้โทร SignOut()
:
auth.SignOut();