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

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

تتضمّن حزمة تطوير البرامج (SDK) الجديدة أربعة تغييرات رئيسية لزيادة نجاح عملية تسجيل الدخول، عليك الانتباه إليها:

  1. يتم تفعيل ميزة "تسجيل الدخول" تلقائيًا عند إطلاق اللعبة. بدلاً من استخدام GoogleSignInClient في GoogleSignIn SDK لتسجيل الدخول، يمكنك استخدام GamesSignInClient.isAuthenticated() لجلب نتيجة محاولة تسجيل الدخول التلقائي.
  2. لن تحتاج فئات Client Process إلى ضبط الإعدادات الأصلية بعد الآن على تمرير عنصر GoogleSignInAccount. لا يمكن طلب نطاقات OAuth إضافية (سيتم طلب GAMES_LITE وSCOPE_APPFOLDER تلقائيًا).
  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);
}

إزالة مكالمات تسجيل الدخول والخروج

في حال عدم تحديد أي نطاقات إضافية بخلاف GAMES وGAMES_LIGHT وSCOPE_APPFOLDER، يجب أن يكون نقل حالة الاستخدام مباشرًا.

  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 via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

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

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

نقل البيانات من GoogleApiClient

بالنسبة إلى عمليات الدمج الأقدم الحالية، قد تعتمد لعبتك على شكل واجهة برمجة التطبيقات GoogleApiClient API بحزمة SDK الخاصة "بخدمات ألعاب Play". تم إيقاف هذا الإجراء في أواخر عام 2017 واستبداله بعملاء "لا يمكن الربط بهم". لإجراء عملية نقل البيانات، يمكنك استبدال الفئة GoogleApiClient بفئة "غير متصلة". عليك بعد ذلك أيضًا اتّباع الإرشادات الواردة أعلاه لنقل لعبتك من الإصدار الأول إلى الإصدار الثاني. في ما يلي تعيين للفئات الشائعة:

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