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

با مجموعه‌ها، منظم بمانید ذخیره و دسته‌بندی محتوا براساس اولویت‌های شما.

می‌توانید از سرویس‌های «بازی‌های Google Play» برای ورود بازیکنان به یک بازی Android ساخته‌شده بر روی 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. در ویرایشگر Unity، در قسمت Build Settings > Player Settings > Other Settings نام بسته اندروید بازی خود را تنظیم کنید.

  3. سپس، در بخش Build Settings > Player Settings > Publishing Settings ، یک keystore و کلید را انتخاب کرده یا ایجاد کنید، که برای امضای بسته 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 گواهی امضای خود را با دستور signingReport :

    gradlew signingReport

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

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

    1. شناسه سرویس گیرنده وب سرور و رمز سرویس گیرنده پروژه خود را پیدا کنید. شناسه سرویس گیرنده وب سرور پروژه Firebase شما را در سرورهای تأیید اعتبار Google Play شناسایی می کند.

      برای یافتن این مقادیر:

      1. پروژه Firebase خود را در صفحه اطلاعات کاربری کنسول Google APIs باز کنید.
      2. در بخش شناسه های مشتری OAuth 2.0 ، صفحه جزئیات سرویس گیرنده وب (ایجاد خودکار توسط Google Service) را باز کنید. این صفحه شناسه و راز سرویس گیرنده وب سرور شما را فهرست می کند.
    2. سپس، در کنسول Firebase ، بخش Authentication را باز کنید.

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

سرویس‌های «بازی‌های 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 ارائه کرده‌اید، در قسمت « شناسه مشتری» جای‌گذاری کنید.
    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.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

مراحل بعدی

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

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

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  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();