برای بازی‌های اندروید وارد شوید

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

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

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

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

این بخش نحوه ادغام کلاینت جدید با Play Games Services Sign In v2 را نشان می دهد.

وابستگی SDK Services Games Play را اضافه کنید

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

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

شناسه پروژه خدمات بازی‌های Play را تعریف کنید

برای افزودن شناسه پروژه 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 را با استفاده از شناسه پروژه خدمات بازی بازی های خود به عنوان مقدار تعریف کنید. شناسه پروژه خدمات بازی شما را می‌توانید در زیر نام بازی خود در صفحه پیکربندی در کنسول Google Play پیدا کنید.

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

    <!-- 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 SDK را در پاسخ به تماس onCreate(..) کلاس Application خود راه اندازی کنید.

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

...

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

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

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

برای تأیید ورود به سیستم، با 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 {
    // Disable your integration with Play Games Services or show a
    // login button to ask  players to sign-in. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

اگر کاربر تصمیم گرفت هنگام راه‌اندازی بازی وارد سیستم نشود، می‌توانید به صورت اختیاری نشان دادن یک دکمه با نماد بازی‌های Play را ادامه دهید و اگر کاربر دکمه را فشار داد، با فراخوانی GamesSignInClient.signIn() دوباره وارد سیستم شوید.

پس از تأیید اینکه کاربر وارد سیستم شده است، می توانید شناسه پخش کننده را برای شناسایی کاربر بازیابی کنید. مثلا:

PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
    // Get PlayerID with mTask.getResult().getPlayerId()
  }
);

مهاجرت به خدمات بازی‌های Play ورود به سیستم نسخه 2

این بخش نحوه انتقال کد کلاینت خود را از Play Games Services v1 به v2 توضیح می دهد.

SDK جدید شامل چهار تغییر عمده برای افزایش موفقیت در ورود به سیستم است که باید از آنها آگاه باشید:

  1. هنگامی که بازی شما راه اندازی می شود، ورود به سیستم به طور خودکار فعال می شود. به جای استفاده از GoogleSignIn SDK برای انجام GoogleSignInClient به سیستم، می توانید از GamesSignInClient.isAuthenticated() برای واکشی نتیجه تلاش برای ورود خودکار به سیستم استفاده کنید.
  2. کلاس های Client Factory دیگر نیازی به ارسال شی GoogleSignInAccount ندارند. دامنه های OAuth اضافی را نمی توان درخواست کرد ( GAMES_LITE به صورت خودکار درخواست می شود).
  3. نشانه‌های احراز هویت اکنون با استفاده از GamesSignInClient.requestServerSideAccess() در Play Games Services SDK ارائه می‌شوند.
  4. روش خروج از سیستم حذف شده است و دیگر نیازی به دکمه درون بازی برای ورود به سیستم یا خروج از خدمات بازی های Play نداریم.

علاوه بر این، بازی شما به دلیل ورود خودکار به سیستم هنگام راه‌اندازی بازی، لاگین‌های بیشتری را تجربه می‌کند. در نتیجه، باید مدیریت سهمیه خود را بررسی کنید تا مطمئن شوید که بازی شما از سهمیه درخواست ورود فراتر نمی رود.

مخزن جدید SDK Maven را هدف قرار دهید

اگر از سیستم ساخت Gradle استفاده می کنید، این کار را می توان با تغییر وابستگی خود به com.google.android.gms:play-services-games-v2:+ مصنوع در فایل build.gradle ماژول انجام داد. مثلا:

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

SDK را راه اندازی کنید

Play Games SDK را در پاسخ به تماس onCreate(..) کلاس Application خود راه اندازی کنید. مثلا:

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

...

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

تماس های ورود به سیستم و خروج از سیستم را حذف کنید

اگر هیچ محدوده اضافی مشخص نمی کنید، انتقال مورد استفاده شما باید ساده باشد.

  1. تماس های ورود به سیستم را با استفاده از GoogleSignIn API حذف کنید. ورود به سیستم همیشه هنگام راه اندازی بازی انجام می شود. در عوض، با استفاده از GamesSignInClient.isAuthenticated() به نتیجه تلاش برای ورود خودکار به سیستم گوش دهید.

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. همه تماس‌ها را برای خروج از سیستم حذف کنید، زیرا مدیریت حساب اکنون در تنظیمات برنامه «سیستم‌عامل» و «بازی‌های Play» قرار دارد.

  3. اگر بازیکن با موفقیت به سیستم وارد شد، دکمه ورود به بازی‌های Play را از بازی خود حذف کنید. اگر کاربر تصمیم گرفت هنگام راه‌اندازی بازی وارد سیستم نشود، می‌توانید به صورت اختیاری نشان دادن یک دکمه با نماد بازی‌های Play را ادامه دهید و فرآیند ورود را با GamesSignInClient.signIn() آغاز کنید.

  4. پس از تأیید اینکه کاربر وارد سیستم شده است، می توانید شناسه پخش کننده را برای شناسایی کاربر بازیابی کنید.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. اگر دیگر از GoogleSignIn API استفاده نمی کنید، وابستگی خود را حذف کنید.

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

هنگام ایجاد کلاینت (به عنوان مثال LeaderboardsClient یا AchievementsClient ) از PlayGames.getFooClient() به جای Games.getFooClient() استفاده کنید.

درخواست دسترسی سمت سرور

هنگام درخواست دسترسی سمت سرور، از GamesSignInClient.requestServerSideAccess() به جای GoogleSignInAccount.getServerAuthCode() استفاده کنید.

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

دامنه های اضافی را حذف کنید

با «خدمات بازی‌های Play» نسخه 2 نمی‌توانید دامنه‌های اضافی درخواست کنید. اگر همچنان نیاز به درخواست دامنه‌های اضافی دارید، توصیه می‌کنیم از Google Sign In SDK در کنار خدمات بازی‌های Play استفاده کنید.

مهاجرت از GoogleApiClient

برای ادغام‌های موجود قدیمی‌تر، ممکن است بازی شما به نوع GoogleApiClient API مربوط به SDK خدمات بازی‌های Play بستگی داشته باشد. این در اواخر سال 2017 منسوخ شد و با مشتریان "بدون اتصال" جایگزین شد. برای مهاجرت می‌توانید کلاس GoogleApiClient را با یک معادل «بدون اتصال» جایگزین کنید. سپس برای انتقال بازی خود از نسخه 1 به نسخه 2، باید دستورالعمل های بالا را دنبال کنید. در زیر نقشه ای از کلاس های رایج آورده شده است:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes