مصادقة الأنظمة الأساسية لألعاب Android

للوصول إلى وظائف "خدمات ألعاب Google Play"، يجب أن توفّر لعبتك حساب اللاعب الذي تم إثبات هويته. يوضّح هذا المستند كيفية توفير تجربة مصادقة سلسة في لعبتك.

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

  • تحسينات للمستخدمين:
    • بعد اختيار حساب تلقائي، يتم إثبات هوية المستخدمين بدون الحاجة إلى التفاعل مع طلب.
    • لم يعُد على المستخدمين تنزيل تطبيق "ألعاب Play" للمصادقة باستخدام "خدمات ألعاب Play" أو إنشاء حساب جديد.
    • يمكن للمستخدمين الآن إدارة حساباتهم على "خدمات ألعاب Play" لألعاب متعددة من صفحة واحدة.
  • تحسينات للمطوّرين:
  • لم يعُد رمز العميل بحاجة إلى التعامل مع عملية المصادقة أو تسجيل الخروج، لأنّه يتم بدء عملية تسجيل الدخول تلقائيًا عند بدء اللعبة، ويتم التعامل مع إدارة الحساب في إعدادات نظام التشغيل.

دمج عميل جديد

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

إضافة الاعتمادية

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

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

تحديد رقم تعريف المشروع

لإضافة رقم تعريف مشروع حزمة تطوير البرامج (SDK) الخاصة "بخدمات ألعاب Play" إلى تطبيقك، عليك إكمال الخطوات التالية:

  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 Console.

  2. في ملف res/values/strings.xml، أضِف مرجعًا لمورد سلسلة وحدِّد رقم تعريف مشروعك كقيمة. في Google Play Console، يمكنك العثور على رقم تعريف مشروعك ضمن اسم لعبتك في صفحة الإعداد. على سبيل المثال:

    <!-- 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)

يمكنك إعداد حزمة تطوير البرامج (SDK) الخاصة بـ "ألعاب Play" في الدالة 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 {
    // Show a sign-in button to ask players to authenticate. Clicking it should
    // call GamesSignInClient.signIn().
  }
});

منع إنشاء الملفات الشخصية تلقائيًا

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

لاستخدام هذه الميزة، تأكَّد من استيفاء الشروط التالية:

  • لا يتوفّر ملف شخصي على &quot;خدمات ألعاب Play&quot; في أي من حسابات Google التي تم تسجيل الدخول إليها على الجهاز.
  • لعبتك مدمَجة مع الإصدار com.google.android.gms:play-services-games-v2:21.0.0 أو إصدار أحدث من حزمة تطوير البرامج (SDK) الخاصة بـ "خدمات ألعاب Play".

لمنع ظهور طلبات إنشاء الملف الشخصي التي يتم تشغيلها تلقائيًا، اتّبِع الخطوات التالية:

  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>
    

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

  2. عند طلب أي واجهة برمجة تطبيقات في &quotخدمات ألعاب Play&quot، يشير رمز الحالة GamesClientStatusCodes.SIGN_IN_REQUIRED إلى تعذُّر الطلب لأنّه لا يمكن إجراء مصادقة تلقائية للمستخدم بسبب عدم توفّر ملف شخصي في &quotخدمات ألعاب Play&quot.

    يتيح ذلك للمستخدمين الذين ليس لديهم ملف شخصي على "خدمات ألعاب Play" مواصلة استخدام طرق المصادقة التي نفّذتها بدون أن يُطلب منهم إنشاء ملف شخصي على "خدمات ألعاب Play" على الفور. يمكن بدء عملية إنشاء الملف الشخصي من خلال استدعاء 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 على رسالة مشابهة لما يلي: "تم إيقاف طلب إنشاء الملف الشخصي تلقائيًا (باستخدام ملف البيان)".