احراز هویت پلتفرم برای بازی های اندروید

برای دسترسی به قابلیت‌های خدمات بازی‌های گوگل پلی، بازی شما باید حساب کاربری تأیید شده‌ی بازیکن را ارائه دهد. این مستندات نحوه‌ی پیاده‌سازی یک تجربه‌ی احراز هویت یکپارچه در بازی شما را شرح می‌دهد.

کیت توسعه نرم‌افزار Play Games Services v2 بهبودهایی را به همراه دارد که تعداد کاربران احراز هویت شده در بازی شما را افزایش داده و توسعه را آسان‌تر می‌کند:

  • بهبودهایی برای کاربران:
    • پس از انتخاب حساب پیش‌فرض، کاربران بدون نیاز به تعامل با اعلان، احراز هویت می‌شوند.
    • کاربران دیگر نیازی به دانلود برنامه Play Games برای تأیید اعتبار با سرویس‌های Play Games یا ایجاد یک حساب کاربری جدید ندارند.
    • کاربران اکنون می‌توانند حساب‌های کاربری سرویس‌های بازی‌های Play خود را برای چندین بازی از یک صفحه مدیریت کنند.
  • بهبودهایی برای توسعه‌دهندگان:
  • کد کلاینت دیگر نیازی به مدیریت جریان احراز هویت یا خروج از سیستم ندارد، زیرا ورود به سیستم به طور خودکار با شروع بازی فعال می‌شود و مدیریت حساب در تنظیمات سیستم عامل انجام می‌شود.

ادغام کلاینت جدید

این بخش نحوه یکپارچه‌سازی کلاینت جدید با ورود به سیستم سرویس‌های بازی‌های Play نسخه ۲ را نشان می‌دهد.

وابستگی را اضافه کنید

وابستگی SDK مربوط به Play Game Services را به فایل build.gradle سطح ریشه برنامه خود اضافه کنید. اگر از Gradle استفاده می‌کنید، می‌توانید این وابستگی را به صورت زیر اضافه یا به‌روزرسانی کنید:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

تعریف شناسه پروژه

برای افزودن شناسه پروژه SDK سرویس‌های Play Games به برنامه خود، مراحل زیر را انجام دهید:

  1. در فایل AndroidManifest.xml برنامه خود، عنصر <meta-data> و ویژگی‌های زیر را به عنصر <application> اضافه کنید:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    مرجع منبع رشته‌ای @string/game_services_project_id را با استفاده از شناسه پروژه خدمات بازی بازی‌های خود به عنوان مقدار تعریف کنید. شناسه پروژه خدمات بازی‌های شما را می‌توانید زیر نام بازی خود در صفحه پیکربندی در کنسول گوگل پلی پیدا کنید.

  2. در فایل res/values/strings.xml خود، یک مرجع منبع رشته‌ای اضافه کنید و شناسه پروژه خود را به عنوان مقدار تنظیم کنید. در کنسول گوگل پلی، می‌توانید شناسه پروژه خود را زیر نام بازی خود در صفحه پیکربندی پیدا کنید. به عنوان مثال:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game's project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

مقداردهی اولیه SDK

کیت توسعه نرم‌افزار Play Games را در فراخوانی onCreate(..) از کلاس Application خود مقداردهی اولیه کنید.

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

دریافت نتیجه احراز هویت

وقتی بازی شما اجرا می‌شود، همیشه سعی می‌کند کاربر را احراز هویت کند. برای احراز هویت کاربر، باید تأیید کنید که کاربر با موفقیت احراز هویت شده است و سپس شناسه بازیکن (Player ID) او را دریافت کنید.

برای تأیید تلاش احراز هویت، GamesSignInClient.isAuthenticated() را فراخوانی کنید و addOnCompleteListener برای بازیابی نتایج استفاده کنید. برای مثال:

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());

gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
  boolean isAuthenticated =
    (isAuthenticatedTask.isSuccessful() &&
     isAuthenticatedTask.getResult().isAuthenticated());

  if (isAuthenticated) {
    // Continue with Play Games Services
  } else {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

جلوگیری از ایجاد خودکار پروفایل

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

برای استفاده از این قابلیت، اطمینان حاصل کنید که شرایط زیر برقرار است:

  • هیچ نمایه‌ای از «خدمات بازی‌های Play» در هیچ یک از حساب‌های گوگل وارد شده در دستگاه وجود ندارد.
  • بازی شما با کیت توسعه نرم‌افزاری خدمات بازی‌های Play com.google.android.gms:play-services-games-v2:21.0.0 یا بالاتر) یکپارچه شده است.

برای جلوگیری از نمایش خودکار پیام‌های ایجاد پروفایل، مراحل زیر را انجام دهید:

  1. در فایل AndroidManifest.xml ، تگ com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION را در عنصر <meta-data> و ویژگی‌های عنصر <application> اضافه کنید:

    <application>
        ...
        <meta-data
            android:name="com.google.android.gms.games.SUPPRESS_GAME_PROFILE_CREATION"
            android:value="true" />
        ...
    </application>
    

    تنظیم این پرچم روی مقدار درست (true) به سرویس‌های بازی‌های پلی (Play Games Services) اطلاع می‌دهد که بازی شما فرآیند ایجاد پروفایل را مدیریت خواهد کرد. در نتیجه، سرویس‌های بازی‌های پلی (Play Games Services) به طور خودکار رابط کاربری ایجاد پروفایل را برای کاربرانی که در دستگاه شما پروفایل سرویس‌های بازی‌های پلی (Play Games Services) ندارند، نمایش نمی‌دهند.

  2. وقتی هر API مربوط به سرویس‌های بازی‌های Play را فراخوانی می‌کنید، کد وضعیت GamesClientStatusCodes.SIGN_IN_REQUIRED نشان می‌دهد که فراخوانی ناموفق بوده است زیرا کاربر به دلیل عدم وجود نمایه سرویس‌های بازی‌های Play نمی‌تواند به طور خودکار احراز هویت شود.

    این به کاربرانی که پروفایل Play Games Services ندارند اجازه می‌دهد تا بدون نیاز به درخواست فوری برای ایجاد پروفایل Play Games Services، با روش‌های احراز هویت پیاده‌سازی شده شما پیش بروند. ایجاد پروفایل را می‌توان با فراخوانی GamesSignInService.signin() آغاز کرد.

    import com.google.android.gms.games.PlayGames;
    ...
    
    // Get the achievements client using Play Games services.
    AchievementsClient achievementsClient = PlayGames.getAchievementsClient(getActivity());
    achievementsClient.getAchievementsIntent()
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception exception) {
                int statusCode = ((ApiException) exception).getStatusCode();
                if (statusCode == GamesClientStatusCodes.SIGN_IN_REQUIRED) {
                  // SIGN_IN_REQUIRED: The user needs to sign in with Play Games Services.
                  // Call GamesSignInService.signin() to prompt for
                  // authentication at a suitable time which will trigger the
                  // profile creation UI.
                  // (e.g., after a tutorial). Use GamesSignInService.isAuthenticated() to check auth status.
                }
              }
            });
  3. پس از افزودن برچسب سرکوب، از پنجره logcat برای تأیید افزودن استفاده کنید. خروجی logcat حاوی پیامی مشابه پیام زیر است: "بازی از درخواست ایجاد خودکار پروفایل (با استفاده از مانیفست) انصراف داد".