شروع به کار با «اصالت‌سنجی Firebase» در Unity

می‌توانید از Firebase Authentication استفاده کنید تا به کاربران اجازه دهید بااستفاده از یک یا چند روش ورود به سیستم، ازجمله ورود به سیستم با نشانی ایمیل و گذرواژه، و ارائه‌دهندگان هویت فدرال مانند «ورود به سیستم با Google» و «ورود به سیستم با Facebook» به سیستم بازی شما وارد شوند. این آموزش گام‌به‌گام با نشان دادن نحوه افزودن ورود به سیستم با گذرواژه و نشانی ایمیل به بازی‌تان، شما را با Firebase Authentication آشنا می‌کند.

قبل از شروع

پیش‌از اینکه بتوانید از Firebase Authentication استفاده کنید، باید:

  • پروژه Unity خود را ثبت کنید و آن را برای استفاده از Firebase پیکربندی کنید.

    • اگر پروژه Unity شما ازقبل از Firebase استفاده می‌کند، پس ازقبل برای Firebase ثبت و پیکربندی شده است.

    • اگر پروژه Unity ندارید، می‌توانید برنامه نمونه‌ای را بارگیری کنید.

  • Firebase Unity SDK (به‌طور دقیق، FirebaseAuth.unitypackage) را به پروژه Unity خود اضافه کنید.

توجه داشته باشید که افزودن Firebase به پروژه Unity شما شامل وظایفی در هر دو Firebase کنسول و پروژه Unity باز شما است (برای مثال، فایل‌های پیکربندی Firebase را از کنسول بارگیری می‌کنید، سپس آن‌ها را به پروژه Unity خود منتقل می‌کنید).

ثبت‌نام کاربران جدید

فرم‌هایی ایجاد کنید که به کاربران جدید اجازه دهد بااستفاده از نشانی ایمیل و گذرواژه خود در بازی شما ثبت‌نام کنند. وقتی کاربر فرم را تکمیل می‌کند، نشانی ایمیل و گذرواژه ارائه‌شده توسط کاربر را اعتبارسنجی کنید، سپس آن‌ها را به روش CreateUserWithEmailAndPasswordAsync منتقل کنید:

auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
    return;
  }

  // Firebase user has been created.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Firebase user created successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

ورود به سیستم کاربران موجود

فرم‌هایی ایجاد کنید که به کاربران فعلی امکان می‌دهد بااستفاده از نشانی ایمیل و گذرواژه خود به سیستم وارد شوند. وقتی کاربر فرم را تکمیل می‌کند، روش SignInWithEmailAndPasswordAsync را فراخوانی کنید:

auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithEmailAndPasswordAsync 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);
});

مدیر رویداد تغییر وضعیت اصالت‌سنجی را تنظیم کنید و داده‌های کاربر را دریافت کنید

برای پاسخ دادن به رویدادهای ورود به سیستم و خروج از سیستم، یک مدیریت‌کننده رویداد به شیء اصالت‌سنجی سراسری پیوست کنید. هرگاه وضعیت ورود به سیستم کاربر تغییر کند، این مدیریت‌کننده فراخوانده می‌شود. ازآنجایی‌که مدیریت‌کننده فقط پس‌از اینکه شیء اصالت‌سنجی به‌طور کامل مقداردهی اولیه شد و پس‌از اینکه همه تماس‌های شبکه تکمیل شد اجرا می‌شود، بهترین مکان برای دریافت اطلاعات درباره کاربر واردشده است.

مدیر رویداد را بااستفاده از فیلد StateChanged شیء FirebaseAuth ثبت کنید. وقتی کاربری باموفقیت به سیستم وارد می‌شود، می‌توانید اطلاعات مربوط به کاربر را در مدیریت‌کننده رویداد دریافت کنید.

درنهایت، وقتی Destroy بار روی این شیء کلیک شود، به‌طور خودکار با OnDestroy تماس می‌گیرد. مرجع‌های شیء Auth را در OnDestroy پاک‌سازی کنید.

void InitializeFirebase() {
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null
        && auth.CurrentUser.IsValid();
    if (!signedIn && user != null) {
      Debug.Log("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      Debug.Log("Signed in " + user.UserId);
      displayName = user.DisplayName ?? "";
      emailAddress = user.Email ?? "";
      photoUrl = user.PhotoUrl ?? "";
    }
  }
}

void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

مراحل بعدی

با نحوه افزودن پشتیبانی برای ارائه‌دهندگان هویت دیگر و حساب‌های مهمان ناشناس آشنا شوید: