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

شما می‌توانید از سرویس‌های بازی‌های گوگل پلی برای ورود بازیکنان به یک بازی اندروید ساخته شده بر روی فایربیس و یونیتی استفاده کنید. برای استفاده از ورود به سیستم سرویس‌های بازی‌های گوگل پلی با فایربیس، ابتدا بازیکن را با گوگل پلی گیمز وارد سیستم کنید و هنگام انجام این کار، کد احراز هویت OAuth 2.0 را درخواست کنید. سپس، کد احراز هویت را به PlayGamesAuthProvider ارسال کنید تا یک اعتبارنامه فایربیس ایجاد شود که می‌توانید از آن برای احراز هویت با فایربیس استفاده کنید.

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

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

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

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

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

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

پروژه Firebase خود را تنظیم کنید

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

  2. اثر انگشت SHA-1 بازی خود را مشخص کنید.

    1. در کنسول Firebase ، به مسیر زیر بروید: > برگه عمومی .

    2. به پایین صفحه و قسمت «برنامه‌های شما» بروید، برنامه اندروید خود را انتخاب کنید و اثر انگشت SHA-1 خود را در قسمت «اثر انگشت گواهی SHA» اضافه کنید.

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

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

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

    gradlew signingReport

    برای جزئیات بیشتر در مورد نحوه دریافت اثر انگشت SHA برنامه خود، به بخش احراز هویت کلاینت خود مراجعه کنید.

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

  3. فعال کردن Google Play Games به عنوان ارائه‌دهنده‌ی ورود:

    1. در کنسول Firebase ، به بخش امنیت > احراز هویت بروید.

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

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

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

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

Play Games services با اطلاعات برنامه Firebase خود پیکربندی کنید

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

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

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

  4. در صفحه پیکربندی Play Games services ، روی «افزودن اعتبارنامه» کلیک کنید.

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

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

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

    <?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 Store بتوانند به سیستم وارد شوند، اضافه کنید.

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

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

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

  3. افزونه Play Games را تنظیم کنید:

    1. برای باز کردن صفحه پیکربندی اندروید ، روی Window > Google Play Games > Setup > Android Setup کلیک کنید.
    2. قطعه کد منابع اندروید را که از کنسول Play دریافت کرده‌اید، در فیلد Resources Definition جایگذاری (paste) کنید.
    3. شناسه کلاینت وب سرور خود را که هنگام فعال کردن ورود به سیستم Play Games در کنسول Firebase ارائه دادید، در فیلد شناسه کلاینت وارد کنید.
    4. روی تنظیم کلیک کنید.
  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 Games وارد سیستم شود، تابع Social.localUser.Authenticate() را فراخوانی کنید:

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

احراز هویت با فایربیس

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

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

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. سپس، کد احراز هویت از سرویس‌های Play Games را با اعتبارنامه 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 شما ذخیره می‌شود و می‌تواند برای شناسایی کاربر در هر برنامه در پروژه شما استفاده شود.

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

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

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

auth.SignOut();