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

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

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

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

يجب إعداد حزمة تطوير البرامج (SDK) الخاصة بـ "ألعاب Play" في معاودة الاتصال "onCreate(..)" في صف واحد (Application). مثلاً:

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

...

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

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

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

  1. أزِل طلبات تسجيل الدخول باستخدام واجهة برمجة التطبيقات GoogleSignIn. سيؤدي تسجيل الدخول إلى دائمًا عند إطلاق اللعبة. بدلاً من ذلك، استمع إلى نتيجة محاولة تسجيل دخول تلقائي باستخدام 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 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