المصادقة باستخدام خدمات ألعاب Google Play على Android

يمكنك استخدام خدمات ألعاب Google Play لتسجيل دخول اللاعبين إلى لعبة Android مبنية على Firebase. لاستخدام خدمات ألعاب Google Play ، قم بتسجيل الدخول باستخدام Firebase ، قم أولاً بتسجيل دخول اللاعب باستخدام ألعاب Google Play ، واطلب رمز مصادقة OAuth 2.0 عند القيام بذلك. ثم، لتمرير قانون المصادقة على PlayGamesAuthProvider لتوليد الاعتماد Firebase، والتي يمكنك استخدامها لمصادقة مع Firebase.

قبل ان تبدأ

قم بإعداد مشروع Android الخاص بك

  1. إذا كنت لم تقم بذلك بالفعل، إضافة Firebase إلى مشروع Android .

  2. باستخدام Firebase الروبوت بوم ، أن يعلن تبعية المكتبة Firebase مصادقة الروبوت في الوحدة النمطية الخاصة بك (على مستوى التطبيق) ملف Gradle (عادة app/build.gradle ).

    أيضًا ، كجزء من إعداد مصادقة Firebase ، تحتاج إلى إضافة SDK لخدمات Google Play إلى تطبيقك.

    جافا

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    باستخدام Firebase الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    Kotlin + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

    باستخدام Firebase الروبوت بوم ، والتطبيق دائما استخدام إصدارات متوافقة من المكتبات Firebase الروبوت.

    (البديل) إعلان Firebase تبعيات مكتبة دون استخدام BOM

    إذا اخترت عدم استخدام Firebase BoM ، فيجب عليك تحديد كل إصدار من إصدارات مكتبة Firebase في سطر التبعية الخاص بها.

    ملاحظة أنه إذا كنت تستخدم مكتبات Firebase متعددة في التطبيق الخاص بك، ونحن نوصي بشدة باستخدام بوم لإدارة إصدارات المكتبة، والذي يضمن أن جميع إصدارات متوافقة.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:19.2.0'
    }

قم بإعداد مشروع Firebase الخاص بك

  1. تعيين لعبتك بصمة SHA-1 من إعدادات الصفحة من وحدة التحكم Firebase.

    يمكنك الحصول على تجزئة SHA شهادة للتوقيع مع gradle signingReport الأوامر:

    ./gradlew signingReport

  2. تمكين ألعاب Google Play كموفر لتسجيل الدخول:

    1. ابحث عن معرّف عميل خادم الويب الخاص بمشروعك وسر العميل. يحدد معرّف عميل خادم الويب مشروع Firebase لخوادم مصادقة Google Play.

      للعثور على هذه القيم:

      1. فتح مشروع Firebase الخاصة بك في وحدة التحكم جوجل واجهات برمجة التطبيقات صفحة بيانات الاعتماد.
      2. في قسم أوث 2.0 معرفات العميل، فتح عميل ويب (السيارات التي تم إنشاؤها بواسطة خدمة جوجل) تفاصيل الصفحة. تسرد هذه الصفحة معرف عميل خادم الويب والسر.
    2. ثم، في وحدة التحكم Firebase ، فتح الباب المصادقة.

    3. على علامة التبويب تسجيل الدخول الأسلوب، تمكين لعب الألعاب تسجيل الدخول الموفر. ستحتاج إلى تحديد معرف عميل خادم الويب الخاص بمشروعك وسر العميل ، والذي حصلت عليه من وحدة تحكم واجهات برمجة التطبيقات.

  1. في وحدة التحكم في Google Play ، افتح التطبيق الخاص بك أو إنشاء واحد.

  2. في قسم تنمو، انقر فوق تشغيل خدمات الألعاب> الإعداد والإدارة> التكوين.

  3. انقر فوق نعم، يستخدم لعبي Google APIs فعلا، حدد اسم المشروع Firebase من القائمة، ثم انقر فوق استخدام.

  4. على Play صفحة التكوين ألعاب الخدمات، انقر فوق إضافة الاعتمادات.

    1. حدد نوع الخادم لعبة.
    2. في مجال العميل أوث، تحديد هوية العميل المشروع على شبكة الإنترنت الخاص بك. تأكد من أن هذا هو نفس معرّف العميل الذي حددته عند تمكين تسجيل الدخول إلى ألعاب Play.
    3. احفظ تغييراتك.
  5. لا يزال على Play صفحة التكوين ألعاب الخدمات، انقر فوق إضافة الاعتماد مرة أخرى.

    1. حدد نوع الروبوت.
    2. في مجال العميل أوث، تحديد هوية العميل الروبوت المشروع الخاص بك. (إذا كنت لا ترى معرّف عميل Android ، فتأكد من تعيين بصمة SHA-1 للعبة في وحدة تحكم Firebase.)
    3. احفظ تغييراتك.
  6. على الصفحة اختبار، إضافة عناوين البريد الإلكتروني لأي مستخدمين الذين يحتاجون لتكون قادرة على الدخول الى اللعبة قبل الإفراج عنها على مخزن اللعب.

ادمج تسجيل الدخول إلى "ألعاب Play" في لعبتك

أولاً ، ادمج تسجيل الدخول إلى "ألعاب Play" في تطبيقك. انظر تسجيل الدخول إلى الروبوت ألعاب للحصول على تعليمات كاملة.

في التكامل الخاص بك، عند إنشاء GoogleSignInOptions الكائن، استخدم DEFAULT_GAMES_SIGN_IN التكوين والدعوة requestServerAuthCode :

جافا

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin + KTX

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

يجب أن يمر ID العميل خادم الويب الخاص بك إلى requestServerAuthCode الأسلوب. هذا هو المعرف الذي قدمته عند تمكين تسجيل الدخول إلى "ألعاب Play" في وحدة تحكم Firebase.

مصادقة مع Firebase

بعد إضافة تسجيل الدخول إلى "ألعاب Play" إلى تطبيقك ، يلزمك إعداد Firebase لاستخدام بيانات اعتماد حساب Google التي تحصل عليها عندما يسجّل اللاعب الدخول بنجاح باستخدام "ألعاب Play".

  1. أولا، في تسجيل الدخول الخاص بك النشاط في onCreate طريقة، احصل على سبيل المثال المشتركة لل FirebaseAuth الكائن:

جافا

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin + KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. عند تهيئة نشاطك ، تحقق لمعرفة ما إذا كان اللاعب قد قام بتسجيل الدخول بالفعل باستخدام Firebase:

جافا

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

Kotlin + KTX

override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = auth.currentUser
    updateUI(currentUser)
}
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
  1. بعد علامات لاعب في اللعب مع ألعاب إما بصمت أو بشكل تفاعلي، الحصول على رمز المصادقة من GoogleSignInAccount الكائن، تبادل وذلك لالاعتماد Firebase، ومصادقة مع Firebase باستخدام الاعتماد Firebase:

جافا

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId());

    final FirebaseAuth auth = FirebaseAuth.getInstance();
    AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode());
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = auth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(MainActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }

                    // ...
                }
            });
}

Kotlin + KTX

// Call this both in the silent sign-in task's OnCompleteListener and in the
// Activity's onActivityResult handler.
private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) {
    Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!)

    val auth = Firebase.auth
    val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!)
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")
                    val user = auth.currentUser
                    updateUI(user)
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    Toast.makeText(baseContext, "Authentication failed.",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }

                // ...
            }
}

اذا كانت الدعوة إلى signInWithCredential نجحت يمكنك استخدام getCurrentUser طريقة للحصول على بيانات حساب المستخدم.

الخطوات التالية

بعد تسجيل دخول المستخدم لأول مرة ، يتم إنشاء حساب مستخدم جديد وربطه بمعرف ألعاب Play الخاص به. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase الخاص بك ، ويمكن استخدامه لتحديد مستخدم عبر كل تطبيق في مشروعك.

في اللعبة، يمكنك الحصول على Firebase UID المستخدم من FirebaseUser الكائن:

جافا

FirebaseUser user = mAuth.getCurrentUser();
String playerName = user.getDisplayName();

// The user's Id, unique to the Firebase project.
// Do NOT use this value to authenticate with your backend server, if you
// have one; use FirebaseUser.getIdToken() instead.
String uid = user.getUid();

Kotlin + KTX

val user = auth.currentUser
user?.let {
    val playerName = user.displayName

    // The user's Id, unique to the Firebase project.
    // Do NOT use this value to authenticate with your backend server, if you
    // have one; use FirebaseUser.getIdToken() instead.
    val uid = user.uid
}

في قاعدة البيانات الخاصة بك Firebase الحقيقي والكلمة الدلالية ضوابط الأمن التخزين، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

للحصول على معلومات تشغيل لاعب ألعاب المستخدم أو إلى خدمات الألعاب وصول اللعب، واستخدام واجهات برمجة التطبيقات التي تقدمها جوجل ألعابا SDK .

تسجيل الخروج مستخدم، استدعاء FirebaseAuth.signOut() :

جافا

FirebaseAuth.getInstance().signOut();

Kotlin + KTX

Firebase.auth.signOut()