অ্যান্ড্রয়েডে গুগল প্লে গেম পরিষেবাগুলি ব্যবহার করে প্রমাণীকরণ করুন৷

আপনি ফায়ারবেসে তৈরি একটি অ্যান্ড্রয়েড গেমে খেলোয়াড়দের সাইন ইন করাতে গুগল প্লে গেমস পরিষেবা ব্যবহার করতে পারেন। ফায়ারবেসের সাথে গুগল প্লে গেমস পরিষেবা ব্যবহার করে সাইন-ইন করতে, প্রথমে গুগল প্লে গেমসে খেলোয়াড়কে সাইন ইন করান এবং সেই সময়ে একটি OAuth 2.0 অথোরাইজেশন কোডের জন্য অনুরোধ করুন। তারপর, একটি ফায়ারবেস ক্রেডেনশিয়াল তৈরি করার জন্য PlayGamesAuthProvider -এ অথোরাইজেশন কোডটি পাঠান, যা আপনি ফায়ারবেসের সাথে অথেন্টিকেট করতে ব্যবহার করতে পারবেন।

শুরু করার আগে

আপনার অ্যান্ড্রয়েড প্রজেক্ট সেট আপ করুন

  1. যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন

  2. আপনার মডিউল (অ্যাপ-লেভেল) গ্রেডল ফাইলে (সাধারণত <project>/<app-module>/build.gradle.kts অথবা <project>/<app-module>/build.gradle ), অ্যান্ড্রয়েডের জন্য Firebase Authentication লাইব্রেরির ডিপেন্ডেন্সি যোগ করুন। লাইব্রেরির ভার্সনিং নিয়ন্ত্রণের জন্য আমরা Firebase Android BoM ব্যবহার করার পরামর্শ দিই।

    এছাড়াও, Firebase Authentication সেট আপ করার অংশ হিসেবে, আপনাকে আপনার অ্যাপে Google Play services SDK যোগ করতে হবে।

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.12.0"))
    
        // Add 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 add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1")
    }

    Firebase Android BoM ব্যবহার করলে, আপনার অ্যাপ সর্বদা Firebase Android লাইব্রেরিগুলোর সামঞ্জস্যপূর্ণ সংস্করণ ব্যবহার করবে।

    (Alternative) Add Firebase library dependencies without using the BoM

    আপনি যদি Firebase BoM ব্যবহার না করার সিদ্ধান্ত নেন, তাহলে আপনাকে প্রতিটি Firebase লাইব্রেরির ভার্সন তার ডিপেন্ডেন্সি লাইনে উল্লেখ করতে হবে।

    মনে রাখবেন, আপনি যদি আপনার অ্যাপে একাধিক Firebase লাইব্রেরি ব্যবহার করেন, তাহলে আমরা লাইব্রেরির ভার্সনগুলো পরিচালনা করার জন্য BoM অফ মেটেরিয়ালস) ব্যবহার করার জন্য দৃঢ়ভাবে সুপারিশ করি, যা সব ভার্সনের সামঞ্জস্যতা নিশ্চিত করে।

    dependencies {
        // Add 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:24.0.1")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1")
    }

আপনার ফায়ারবেস প্রজেক্ট সেট আপ করুন

  1. Firebase কনসোলের সেটিংস পৃষ্ঠা থেকে আপনার গেমের SHA-1 ফিঙ্গারপ্রিন্ট সেট করুন।

    আপনি gradle signingReport কমান্ডটি ব্যবহার করে আপনার সাইনিং সার্টিফিকেটের SHA হ্যাশ পেতে পারেন:

    ./gradlew signingReport

  2. সাইন-ইন প্রদানকারী হিসেবে গুগল প্লে গেমস সক্রিয় করুন:

    1. আপনার প্রোজেক্টের ওয়েব সার্ভার ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট খুঁজে বের করুন। এই ওয়েব সার্ভার ক্লায়েন্ট আইডি গুগল প্লে অথেন্টিকেশন সার্ভারগুলোর কাছে আপনার ফায়ারবেস প্রোজেক্টকে শনাক্ত করে।

      এই মানগুলি খুঁজে বের করতে:

      1. Google APIs কনসোল ক্রেডেনশিয়াল পৃষ্ঠায় আপনার Firebase প্রজেক্টটি খুলুন।
      2. OAuth 2.0 ক্লায়েন্ট আইডি বিভাগে, ওয়েব ক্লায়েন্ট (গুগল পরিষেবা দ্বারা স্বয়ংক্রিয়ভাবে তৈরি) বিবরণ পৃষ্ঠাটি খুলুন। এই পৃষ্ঠায় আপনার ওয়েব সার্ভার ক্লায়েন্ট আইডি এবং সিক্রেট তালিকাভুক্ত আছে।
    2. এরপর, Firebase কনসোলে Authentication সেকশনটি খুলুন।

    3. সাইন ইন মেথড ট্যাবে, প্লে গেমস সাইন-ইন প্রোভাইডারটি সক্রিয় করুন। আপনাকে আপনার প্রোজেক্টের ওয়েব সার্ভার ক্লায়েন্ট আইডি এবং ক্লায়েন্ট সিক্রেট উল্লেখ করতে হবে, যা আপনি এপিআই কনসোল থেকে পেয়েছেন।

আপনার Firebase অ্যাপের তথ্য দিয়ে Play Games services কনফিগার করুন

  1. Google Play কনসোলে আপনার Google Play অ্যাপটি খুলুন অথবা একটি তৈরি করুন।

  2. Grow সেকশনে, Play Games services > Setup & Management > Configuration- এ ক্লিক করুন।

  3. ‘হ্যাঁ, আমার গেমটি ইতিমধ্যেই গুগল এপিআই ব্যবহার করে’ বিকল্পে ক্লিক করুন, তালিকা থেকে আপনার ফায়ারবেস প্রজেক্টটি বেছে নিন এবং তারপরে ‘ ব্যবহার করুন’ বিকল্পে ক্লিক করুন।

  4. Play Games services কনফিগারেশন পৃষ্ঠায়, ক্রেডেনশিয়াল যোগ করুন (Add Credential) বোতামে ক্লিক করুন।

    1. গেম সার্ভারের ধরন নির্বাচন করুন।
    2. OAuth ক্লায়েন্ট ফিল্ডে, আপনার প্রজেক্টের ওয়েব ক্লায়েন্ট আইডি নির্বাচন করুন। নিশ্চিত করুন যে এটি সেই একই ক্লায়েন্ট আইডি যা আপনি Play Games সাইন-ইন সক্রিয় করার সময় উল্লেখ করেছিলেন।
    3. আপনার পরিবর্তনগুলো সংরক্ষণ করুন।
  5. Play Games services কনফিগারেশন পৃষ্ঠাতেই, আবার ক্রেডেনশিয়াল যোগ করুন (Add Credential) বোতামে ক্লিক করুন।

    1. অ্যান্ড্রয়েডের ধরন নির্বাচন করুন।
    2. In the OAuth client field, select your project's Android client ID. (If you don't see your Android client ID, be sure you set your game's SHA-1 fingerprint in the Firebase console.)
    3. আপনার পরিবর্তনগুলো সংরক্ষণ করুন।
  6. টেস্টার পেজে, সেই সমস্ত ব্যবহারকারীদের ইমেল ঠিকানা যোগ করুন যাদের আপনার গেমটি Play Store প্রকাশ করার আগে গেমে সাইন ইন করার প্রয়োজন হবে।

আপনার গেমে প্লে গেমস সাইন-ইন সংযুক্ত করুন।

প্রথমে, আপনার অ্যাপে প্লে গেমস সাইন-ইন যুক্ত করুন। সম্পূর্ণ নির্দেশাবলীর জন্য ‘অ্যান্ড্রয়েড গেমসে সাইন ইন’ দেখুন।

আপনার ইন্টিগ্রেশনে, GoogleSignInOptions অবজেক্টটি তৈরি করার সময়, DEFAULT_GAMES_SIGN_IN কনফিগারেশনটি ব্যবহার করুন এবং requestServerAuthCode কল করুন:

Kotlin

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

Java

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

আপনাকে অবশ্যই requestServerAuthCode মেথডে আপনার ওয়েব সার্ভার ক্লায়েন্ট আইডি পাস করতে হবে। এই আইডিটি আপনি Firebase কনসোলে প্লে গেমস সাইন-ইন সক্রিয় করার সময় প্রদান করেছিলেন।

ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

আপনার অ্যাপে প্লে গেমস সাইন-ইন যোগ করার পরে, কোনো খেলোয়াড় প্লে গেমসের মাধ্যমে সফলভাবে সাইন ইন করলে প্রাপ্ত গুগল অ্যাকাউন্টের তথ্য ব্যবহার করার জন্য আপনাকে ফায়ারবেস সেট আপ করতে হবে।

  1. প্রথমে, আপনার সাইন-ইন অ্যাক্টিভিটির onCreate মেথডে, FirebaseAuth অবজেক্টের শেয়ার্ড ইনস্ট্যান্সটি নিন:

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. আপনার অ্যাক্টিভিটি শুরু করার সময়, প্লেয়ারটি আগে থেকেই ফায়ারবেসে সাইন ইন করা আছে কিনা তা পরীক্ষা করে দেখুন:

    Kotlin

    override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }

    Java

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

    যদি প্লেয়ার সাইন ইন করা না থাকে, তাহলে তাকে আপনার গেমের সাইন-আউট করা অভিজ্ঞতাটি দেখান, যার মধ্যে সাইন ইন করার বিকল্পও থাকবে।

  3. কোনো খেলোয়াড় প্লে গেমস-এ নীরবে বা সক্রিয়ভাবে সাইন ইন করার পর, GoogleSignInAccount অবজেক্ট থেকে অথোরাইজেশন কোডটি নিন, সেটিকে একটি Firebase ক্রেডেনশিয়ালের সাথে বিনিময় করুন, এবং সেই Firebase ক্রেডেনশিয়াল ব্যবহার করে Firebase-এর সাথে অথেন্টিকেট করুন:

    Kotlin

    // 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)
                }
    
                // ...
            }
    }

    Java

    // 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);
                        }
    
                        // ...
                    }
                });
    }

    signInWithCredential কলটি সফল হলে, আপনি ` getCurrentUser মেথডটি ব্যবহার করে ব্যবহারকারীর অ্যাকাউন্টের তথ্য পেতে পারেন।

পরবর্তী পদক্ষেপ

কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি হয় এবং সেটি তার প্লে গেমস আইডির সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রজেক্টের অংশ হিসেবে সংরক্ষিত থাকে এবং আপনার প্রজেক্টের প্রতিটি অ্যাপে ব্যবহারকারীকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

আপনার গেমে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর Firebase UID পেতে পারেন:

Kotlin

val user = auth.currentUser
user?.let {
    val playerName = it.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 = it.uid
}

Java

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();

আপনার Firebase Realtime Database and Cloud Storage Security Rules-এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং এটি ব্যবহার করে একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে পারেন।

কোনো ব্যবহারকারীর প্লে গেমস প্লেয়ারের তথ্য পেতে বা প্লে গেমস পরিষেবাগুলো অ্যাক্সেস করতে, গুগল প্লে গেমস এসডিকে (SDK) দ্বারা প্রদত্ত এপিআই (API) ব্যবহার করুন।

কোনো ব্যবহারকারীকে সাইন আউট করতে, FirebaseAuth.signOut() কল করুন:

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();