با استفاده از خدمات بازی های Google Play در Unity احراز هویت کنید

می‌توانید از سرویس‌های «بازی‌های Google Play» برای ورود بازیکنان به یک بازی اندروید ساخته‌شده بر روی Firebase و Unity استفاده کنید. برای استفاده از ورود به سیستم سرویس‌های بازی‌های Google Play با Firebase، ابتدا با بازی‌های Google Play وارد بازیکن شوید و در صورت انجام این کار، کد تأیید OAuth 2.0 را درخواست کنید. سپس، کد احراز هویت را به PlayGamesAuthProvider ارسال کنید تا یک اعتبار Firebase ایجاد کند، که می توانید از آن برای احراز هویت با Firebase استفاده کنید.

قبل از اینکه شروع کنی

پروژه یونیتی خود را راه اندازی کنید

  1. فایل پیکربندی Firebase و Firebase Unity SDK را همانطور که در Add Firebase به پروژه Unity خود توضیح داده شده به پروژه Unity خود اضافه کنید. دستورالعمل های اندروید را دنبال کنید.

    حتما FirebaseAuth.unitypackage وارد کنید.

  2. در ویرایشگر یونیتی، در قسمت Build Settings > Player Settings > Other Settings نام بسته اندروید بازی خود را تنظیم کنید.

  3. سپس، در بخش Build Settings > Player Settings > Publishing Settings ، یک keystore و key را انتخاب یا ایجاد کنید، که برای امضای بسته Android شما استفاده می شود. APK شما باید امضا شده باشد تا ورود به سیستم بازی‌های Play کار کند—این شرط نه فقط برای انتشار، بلکه در طول توسعه بازی شما نیز اعمال می‌شود.

پروژه Firebase خود را راه اندازی کنید

  1. در کنسول Firebase ، به پروژه Firebase بروید که در آن پروژه Unity خود را ثبت کرده اید.

  2. با استفاده از کلیدی که در Unity تنظیم کرده اید، اثر انگشت SHA-1 بازی خود را از صفحه تنظیمات کنسول Firebase تنظیم کنید.

    می توانید اثر انگشت SHA-1 کلید خود را با دستور keytool دریافت کنید:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    از طرف دیگر، می توانید هش SHA گواهی امضای خود را با دستور gradle signingReport دریافت کنید:

    gradlew signingReport

    APK شما باید با این کلید امضا شود، از جمله در طول توسعه.

  3. فعال کردن بازی‌های Google Play به عنوان ارائه‌دهنده ورود به سیستم:

    1. در کنسول Firebase، بخش Authentication را باز کنید.

    2. شناسه سرویس گیرنده وب سرور و رمز سرویس گیرنده پروژه خود را ایجاد و به دست آورید:

      1. در برگه روش ورود به سیستم ، ارائه دهنده ورود به سیستم Google را فعال کنید.

      2. شناسه سرویس گیرنده وب سرور و راز را از ارائه دهنده ورود به سیستم Google کپی کنید.

    3. در برگه روش ورود ، ارائه‌دهنده ورود به بازی‌های Play را فعال کنید و شناسه سرویس گیرنده وب سرور پروژه خود و راز سرویس گیرنده را که در مرحله آخر دریافت کردید، مشخص کنید.

سرویس‌های «بازی‌های Play» را با اطلاعات برنامه Firebase خود پیکربندی کنید

  1. در کنسول Google Play ، برنامه Google Play خود را باز کنید یا یکی ایجاد کنید.

  2. در بخش رشد ، روی خدمات بازی‌های Play > راه‌اندازی و مدیریت > پیکربندی کلیک کنید.

  3. روی بله، بازی من قبلاً از Google API استفاده می‌کند ، پروژه Firebase خود را از لیست انتخاب کنید و سپس روی استفاده کلیک کنید.

  4. در صفحه پیکربندی خدمات بازی‌های Play، روی افزودن اعتبارنامه کلیک کنید.

    1. نوع سرور بازی را انتخاب کنید.
    2. در قسمت سرویس گیرنده OAuth ، شناسه مشتری وب پروژه خود را انتخاب کنید. مطمئن شوید که این همان شناسه مشتری است که هنگام فعال کردن ورود به سیستم بازی‌های Play مشخص کرده‌اید.
    3. تغییرات خود را ذخیره کنید
  5. هنوز در صفحه پیکربندی خدمات بازی‌های Play، دوباره روی افزودن اعتبارنامه کلیک کنید.

    1. نوع اندروید را انتخاب کنید.
    2. در قسمت سرویس گیرنده OAuth ، شناسه مشتری Android پروژه خود را انتخاب کنید. (اگر ID کلاینت اندروید خود را نمی بینید، مطمئن شوید که اثر انگشت SHA-1 بازی خود را در کنسول Firebase تنظیم کرده اید.)
    3. تغییرات خود را ذخیره کنید
  6. در صفحات رویدادها ، دستاوردها و تابلوهای امتیازات ، هر منبعی از بازی‌های Play را که می‌خواهید با بازی خود استفاده کنید ایجاد کنید (اگر نمی‌خواهید فوراً از هیچ کدام استفاده کنید، می‌توانید یک ورودی مکان‌دار ایجاد کنید). سپس، در هر یک از صفحات رویدادها ، دستاوردها ، یا تابلوهای امتیازات ، روی دریافت منابع کلیک کنید و قطعه منابع Android را در جایی مناسب کپی کنید. برای راه‌اندازی افزونه خدمات بازی‌های Google Play به این قطعه نیاز دارید.

    قطعه منابع مانند مثال زیر است:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. در صفحه آزمایش‌کنندگان ، آدرس‌های ایمیل کاربرانی را که نیاز دارند قبل از انتشار آن در فروشگاه Play، بتوانند وارد بازی خود شوند، اضافه کنید.

ورود به سیستم بازی‌های Play را در بازی خود ادغام کنید

  1. آخرین نسخه پلاگین Play Games را برای Unity دانلود کرده و آن را استخراج کنید.

  2. بسته Unity افزونه را به پروژه Unity خود وارد کنید. می توانید بسته Unity را در فهرست current-build آرشیو انتشار پیدا کنید.

  3. پلاگین بازی های Play را راه اندازی کنید:

    1. روی Window > Google Play Games > Setup > Android Setup کلیک کنید تا صفحه پیکربندی Android باز شود.
    2. قطعه منابع Android را که از کنسول Play دریافت کردید در قسمت Resources Definition جای‌گذاری کنید.
    3. شناسه سرویس گیرنده وب سرور خود را که هنگام فعال کردن ورود به سیستم بازی‌های Play در کنسول Firebase ارائه کرده‌اید، در قسمت Client ID جای‌گذاری کنید.
    4. روی Setup کلیک کنید.
  4. در بازی خود، یک سرویس گیرنده Play Games را با تنظیم RequestServerAuthCode پیکربندی کنید:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. سپس، زمانی که بازیکنی انتخاب می‌کند با بازی‌های Play وارد سیستم شود، Social.localUser.Authenticate() فراخوانی کنید:

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

با Firebase احراز هویت

پس از افزودن ورود به بازی‌های Play به بازی خود، می‌توانید از کد تأیید اعتبار سرویس‌های بازی‌های Play برای احراز هویت با Firebase استفاده کنید.

  1. پس از اینکه بازیکن با استفاده از بازی‌های Play با موفقیت وارد سیستم شد، در کنترل‌کننده ادامه ورود، یک کد تأیید اعتبار برای حساب بازیکن دریافت کنید:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. سپس، کد احراز هویت از خدمات بازی‌های Play را با اعتبار Firebase مبادله کنید و از اعتبار Firebase برای احراز هویت بازیکن استفاده کنید:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    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);
    });
    

مراحل بعدی

پس از اینکه کاربر برای اولین بار وارد سیستم شد، یک حساب کاربری جدید ایجاد می‌شود و به شناسه بازی‌های Play او مرتبط می‌شود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره می‌شود و می‌تواند برای شناسایی کاربر در هر برنامه در پروژه شما استفاده شود.

در بازی خود، می توانید UID Firebase کاربر را از شی Firebase.Auth.FirebaseUser دریافت کنید:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // 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، می‌توانید شناسه کاربری منحصر به فرد کاربر واردشده را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آن دسترسی داشته باشد استفاده کنید.

برای دریافت اطلاعات پخش کننده بازی های Play کاربر یا دسترسی به خدمات بازی های Play، از API های ارائه شده توسط افزونه بازی های Play استفاده کنید.

برای خروج از سیستم کاربر، SignOut() را فراخوانی کنید:

auth.SignOut();