نقل البيانات إلى الإصدار 2 من ميزة تسجيل الدخول إلى "خدمات ألعاب Play"

يوضّح هذا الدليل كيفية نقل رمز العميل من الإصدار 1 من "خدمات ألعاب Play" إلى الإصدار 2.

تحتوي حزمة SDK الجديدة على أربعة تغييرات رئيسية لزيادة نسبة نجاح عمليات تسجيل الدخول، ويجب أن تكون على عِلم بها:

  1. يتم تفعيل تسجيل الدخول تلقائيًا عند تشغيل لعبتك. بدلاً من استخدام GoogleSignInClient في حزمة تطوير البرامج (SDK) من GoogleSignIn لإجراء تسجيل الدخول، يمكنك استخدام GamesSignInClient.isAuthenticated() لعرض نتيجة محاولة تسجيل الدخول التلقائي.
  2. لن تحتاج فئات Client Factory إلى تمرير GoogleSignInAccount object. لا يمكن طلب نطاقات OAuth إضافية (سيتم طلب GAMES_LITE تلقائيًا).
  3. يتم الآن توفير الرموز المميّزة للمصادقة باستخدام GamesSignInClient.requestServerSideAccess() ضمن حزمة تطوير البرامج (SDK) لـ "خدمات ألعاب Play" .
  4. تمّت إزالة طريقة تسجيل الخروج، ولن نطلب بعد الآن رمزًا برمجيًا في اللعبة لتسجيل الدخول إلى "خدمات ألعاب Play" أو تسجيل الخروج منها.

بالإضافة إلى ذلك، ستتم عمليات تسجيل دخول إضافية في لعبتك بسبب تسجيل الدخول التلقائي عند تشغيل اللعبة. نتيجةً لذلك، عليك مراجعة إدارة الحصة للتأكّد من أنّ لعبتك لا تتجاوز الحصة المخصّصة لطلبات تسجيل الدخول.

استهداف مستودع Maven الجديد لحزمة SDK

إذا كنت تستخدم نظام إنشاء Gradle، يمكن إجراء ذلك من خلال تغيير التبعية إلى العنصر com.google.android.gms:play-services-games-v2:+ فيملفbuild.gradle الخاص بوحدتك. مثلاً:

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

إعداد حزمة تطوير البرامج (SDK)

يمكنك إعداد حزمة تطوير البرامج (SDK) لألعاب Play في دالة 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 إذا لم تعُد قيد الاستخدام.

تعديل أسماء فئات العملاء

عند إنشاء عملاء (مثل 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 with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

إزالة النطاقات الإضافية

باستخدام الإصدار 2 من "خدمات ألعاب Play"، لا يمكنك طلب أي نطاقات إضافية. إذا كان ما زال عليك طلب نطاقات إضافية، ننصحك باستخدام حزمة تطوير البرامج (SDK) لميزة "تسجيل الدخول باستخدام حساب Google" جنبًا إلى جنب مع "خدمات ألعاب 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