অ্যান্ড্রয়েডে Google-এর মাধ্যমে প্রমাণীকরণ করুন

আপনি আপনার ব্যবহারকারীদের তাদের গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেসে প্রমাণীকরণের সুযোগ দিতে পারেন।

শুরু করার আগে

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

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

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.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 dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1")
    }

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

    (বিকল্প) 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 dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1")
    }

  3. আপনি যদি এখনও আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট নির্দিষ্ট না করে থাকেন, তাহলে Firebase কনসোলের সেটিংস পৃষ্ঠা থেকে তা করুন। আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট কীভাবে পাবেন সে সম্পর্কে বিস্তারিত জানতে "আপনার ক্লায়েন্ট প্রমাণীকরণ" অংশটি দেখুন।

  4. Firebase কনসোলে সাইন-ইন পদ্ধতি হিসেবে Google সক্রিয় করুন:
    1. Firebase কনসোলে , Auth সেকশনটি খুলুন।
    2. সাইন ইন পদ্ধতি ট্যাবে, গুগল সাইন-ইন পদ্ধতিটি সক্রিয় করুন এবং সেভ-এ ক্লিক করুন।
  5. কনসোলে অনুরোধ করা হলে, আপডেট করা Firebase কনফিগারেশন ফাইলটি ( google-services.json ) ডাউনলোড করুন, যেটিতে এখন গুগল সাইন-ইন করার জন্য প্রয়োজনীয় OAuth ক্লায়েন্টের তথ্য রয়েছে।

  6. এই আপডেট করা কনফিগারেশন ফাইলটি আপনার অ্যান্ড্রয়েড স্টুডিও প্রজেক্টে নিয়ে যান এবং বর্তমানে পুরোনো হয়ে যাওয়া সংশ্লিষ্ট কনফিগারেশন ফাইলটি প্রতিস্থাপন করুন । (দেখুন, আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন ।)

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

  1. ক্রেডেনশিয়াল ম্যানেজার ডকুমেন্টেশনে দেওয়া ধাপগুলো অনুসরণ করে আপনার অ্যাপে ‘সাইন ইন উইথ গুগল’ ফিচারটি যুক্ত করুন। নিচে এর মূল নির্দেশাবলী দেওয়া হলো:
    1. GetGoogleIdOption ব্যবহার করে একটি গুগল সাইন-ইন অনুরোধ তৈরি করুন। তারপর, GetCredentialRequest ব্যবহার করে ক্রেডেনশিয়াল ম্যানেজার অনুরোধটি তৈরি করুন:

      Kotlin

      // Instantiate a Google sign-in request
      val googleIdOption = GetGoogleIdOption.Builder()
          // Your server's client ID, not your Android client ID.
          .setServerClientId(getString(R.string.default_web_client_id))
          // Only show accounts previously used to sign in.
          .setFilterByAuthorizedAccounts(true)
          .build()
      
      // Create the Credential Manager request
      val request = GetCredentialRequest.Builder()
          .addCredentialOption(googleIdOption)
          .build()

      Java

      // Instantiate a Google sign-in request
      GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder()
              .setFilterByAuthorizedAccounts(true)
              .setServerClientId(getString(R.string.default_web_client_id))
              .build();
      
      // Create the Credential Manager request
      GetCredentialRequest request = new GetCredentialRequest.Builder()
              .addCredentialOption(googleIdOption)
              .build();

      উপরের অনুরোধে, আপনাকে অবশ্যই setServerClientId মেথডে আপনার 'সার্ভার' ক্লায়েন্ট আইডি পাস করতে হবে। OAuth 2.0 ক্লায়েন্ট আইডি খুঁজে পেতে:

      1. Google Cloud কনসোলে ক্রেডেনশিয়ালস পৃষ্ঠাটি খুলুন।
      2. ওয়েব অ্যাপ্লিকেশন টাইপ ক্লায়েন্ট আইডি হলো আপনার ব্যাকএন্ড সার্ভারের OAuth 2.0 ক্লায়েন্ট আইডি।
    2. যাচাই করুন যে, 'সাইন ইন উইথ গুগল' ইন্টিগ্রেট করার পর আপনার সাইন-ইন অ্যাক্টিভিটিতে নিম্নলিখিত কোডের মতো কোড রয়েছে:

      Kotlin

      private fun handleSignIn(credential: Credential) {
          // Check if credential is of type Google ID
          if (credential is CustomCredential && credential.type == TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) {
              // Create Google ID Token
              val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)
      
              // Sign in to Firebase with using the token
              firebaseAuthWithGoogle(googleIdTokenCredential.idToken)
          } else {
              Log.w(TAG, "Credential is not of type Google ID!")
          }
      }

      Java

      private void handleSignIn(Credential credential) {
          // Check if credential is of type Google ID
          if (credential instanceof CustomCredential customCredential
                  && credential.getType().equals(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)) {
              // Create Google ID Token
              Bundle credentialData = customCredential.getData();
              GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credentialData);
      
              // Sign in to Firebase with using the token
              firebaseAuthWithGoogle(googleIdTokenCredential.getIdToken());
          } else {
              Log.w(TAG, "Credential is not of type Google ID!");
          }
      }
  2. আপনার সাইন-ইন অ্যাক্টিভিটির onCreate মেথডে, FirebaseAuth অবজেক্টের শেয়ার্ড ইনস্ট্যান্সটি নিন:

    Kotlin

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

    Java

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

    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);
    }
  4. এখন, ধাপ ১-এ তৈরি করা ব্যবহারকারীর গুগল আইডি টোকেনটি নিন, সেটিকে একটি ফায়ারবেস ক্রেডেনশিয়ালের সাথে বিনিময় করুন এবং সেই ফায়ারবেস ক্রেডেনশিয়াল ব্যবহার করে ফায়ারবেসে প্রমাণীকরণ করুন:

    Kotlin

    private fun firebaseAuthWithGoogle(idToken: String) {
        val credential = GoogleAuthProvider.getCredential(idToken, null)
        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)
                    updateUI(null)
                }
            }
    }

    Java

    private void firebaseAuthWithGoogle(String idToken) {
        AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
        mAuth.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");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        updateUI(null);
                    }
                });
    }
    signInWithCredential কলটি সফল হলে, আপনি ` getCurrentUser মেথডটি ব্যবহার করে ব্যবহারকারীর অ্যাকাউন্টের তথ্য পেতে পারেন।

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

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

  • আপনার অ্যাপগুলিতে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।

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

বিদ্যমান কোনো ব্যবহারকারী অ্যাকাউন্টের সাথে অথেন্টিকেশন প্রোভাইডারের ক্রেডেনশিয়াল লিঙ্ক করার মাধ্যমে আপনি ব্যবহারকারীদের একাধিক অথেন্টিকেশন প্রোভাইডার ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

কোনো ব্যবহারকারীকে সাইন আউট করতে, signOut কল করুন। ক্রেডেনশিয়াল ম্যানেজার ডকুমেন্টেশনে সুপারিশ অনুযায়ী, আপনাকে সমস্ত ক্রেডেনশিয়াল প্রোভাইডার থেকে বর্তমান ব্যবহারকারীর ক্রেডেনশিয়াল স্টেটও ক্লিয়ার করতে হবে।

Kotlin

private fun signOut() {
    // Firebase sign out
    auth.signOut()

    // When a user signs out, clear the current user credential state from all credential providers.
    lifecycleScope.launch {
        try {
            val clearRequest = ClearCredentialStateRequest()
            credentialManager.clearCredentialState(clearRequest)
            updateUI(null)
        } catch (e: ClearCredentialException) {
            Log.e(TAG, "Couldn't clear user credentials: ${e.localizedMessage}")
        }
    }
}

Java

private void signOut() {
    // Firebase sign out
    mAuth.signOut();

    // When a user signs out, clear the current user credential state from all credential providers.
    ClearCredentialStateRequest clearRequest = new ClearCredentialStateRequest();
    credentialManager.clearCredentialStateAsync(
            clearRequest,
            new CancellationSignal(),
            Executors.newSingleThreadExecutor(),
            new CredentialManagerCallback<>() {
                @Override
                public void onResult(@NonNull Void result) {
                    updateUI(null);
                }

                @Override
                public void onError(@NonNull ClearCredentialException e) {
                    Log.e(TAG, "Couldn't clear user credentials: " + e.getLocalizedMessage());
                }
            });
}