অ্যান্ড্রয়েডের জন্য লিঙ্ক করা অ্যাকাউন্ট সাইন-ইন

লিঙ্ক করা অ্যাকাউন্ট সাইন-ইন সেই ব্যবহারকারীদের জন্য Google এর সাথে এক ট্যাপ সাইন ইন সক্ষম করে যাদের ইতিমধ্যেই আপনার পরিষেবার সাথে তাদের Google অ্যাকাউন্ট লিঙ্ক করা আছে। এটি ব্যবহারকারীদের জন্য অভিজ্ঞতা উন্নত করে কারণ তারা তাদের ব্যবহারকারীর নাম এবং পাসওয়ার্ড পুনরায় প্রবেশ না করেই এক ক্লিকে সাইন ইন করতে পারে৷ এটি ব্যবহারকারীদের আপনার পরিষেবাতে ডুপ্লিকেট অ্যাকাউন্ট তৈরি করার সম্ভাবনাও হ্রাস করে।

লিঙ্ক করা অ্যাকাউন্ট সাইন-ইন Android-এর জন্য ওয়ান ট্যাপ সাইন-ইন প্রবাহের অংশ হিসেবে উপলব্ধ৷ এর অর্থ হল আপনার অ্যাপে ইতিমধ্যেই ওয়ান ট্যাপ বৈশিষ্ট্য সক্ষম থাকলে আপনাকে আলাদা লাইব্রেরি আমদানি করতে হবে না।

এই নথিতে, আপনি লিঙ্কড অ্যাকাউন্ট সাইন-ইন সমর্থন করার জন্য আপনার Android অ্যাপটি কীভাবে পরিবর্তন করবেন তা শিখবেন।

এটা কিভাবে কাজ করে

  1. আপনি ওয়ান ট্যাপ সাইন-ইন ফ্লো চলাকালীন লিঙ্ক করা অ্যাকাউন্টগুলি দেখানোর জন্য নির্বাচন করেন৷
  2. ব্যবহারকারী যদি Google-এ সাইন ইন করে থাকেন এবং আপনার পরিষেবাতে তাদের অ্যাকাউন্টের সাথে তাদের Google অ্যাকাউন্ট লিঙ্ক করে থাকেন, তাহলে লিঙ্ক করা অ্যাকাউন্টের জন্য একটি আইডি টোকেন ফেরত দেওয়া হবে।
  3. ব্যবহারকারীকে তাদের লিঙ্ক করা অ্যাকাউন্ট দিয়ে আপনার পরিষেবাতে সাইন ইন করার বিকল্প সহ একটি ওয়ান ট্যাপ সাইন-ইন প্রম্পট দেখানো হয়।
  4. ব্যবহারকারী যদি লিঙ্ক করা অ্যাকাউন্টের সাথে চালিয়ে যেতে পছন্দ করে, তাহলে ব্যবহারকারীর আইডি টোকেন আপনার অ্যাপে ফেরত দেওয়া হবে। লগ ইন করা ব্যবহারকারীকে শনাক্ত করার জন্য ধাপ 2-এ আপনার সার্ভারে পাঠানো টোকেনের সাথে আপনি এটি মেলে।

সেটআপ

আপনার উন্নয়ন পরিবেশ সেট আপ করুন

আপনার ডেভেলপমেন্ট হোস্টে লেটেস্ট Google Play পরিষেবা পান:

  1. অ্যান্ড্রয়েড এসডিকে ম্যানেজার খুলুন।
  1. SDK টুলের অধীনে, Google Play পরিষেবাগুলি খুঁজুন।

  2. যদি এই প্যাকেজগুলির জন্য স্ট্যাটাস ইনস্টল করা না থাকে, সেগুলি উভয়ই নির্বাচন করুন এবং প্যাকেজ ইনস্টল করুন ক্লিক করুন।

আপনার অ্যাপ কনফিগার করুন

  1. আপনার প্রকল্প-স্তরের build.gradle ফাইলে, আপনার buildscript এবং allprojects উভয় বিভাগেই Google এর Maven সংগ্রহস্থল অন্তর্ভুক্ত করুন।

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. আপনার মডিউলের অ্যাপ-লেভেল গ্রেডল ফাইলে "Google এর সাথে লিঙ্ক করুন" API-এর নির্ভরতা যোগ করুন, যা সাধারণত app/build.gradle হয় :

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.3.0'
    }
    

লিঙ্ক করা অ্যাকাউন্ট সাইন-ইন সমর্থন করতে আপনার অ্যান্ড্রয়েড অ্যাপ পরিবর্তন করুন

লিঙ্ক করা অ্যাকাউন্ট সাইন-ইন ফ্লো শেষে, একটি আইডি টোকেন আপনার অ্যাপে ফেরত দেওয়া হয়। ব্যবহারকারী সাইন ইন করার আগে আইডি টোকেনের অখণ্ডতা যাচাই করা উচিত।

নিম্নলিখিত কোড নমুনাটি পুনরুদ্ধার, আইডি টোকেন যাচাই এবং পরবর্তীতে ব্যবহারকারীকে সাইন ইন করার পদক্ষেপের বিবরণ দেয়।

  1. সাইন-ইন অভিপ্রায়ের ফলাফল পেতে একটি কার্যকলাপ তৈরি করুন

    কোটলিন

      private val activityResultLauncher = registerForActivityResult(
        ActivityResultContracts.StartIntentSenderForResult()) { result ->
        if (result.resultCode == RESULT_OK) {
          try {
            val signInCredentials = Identity.signInClient(this)
                                    .signInCredentialFromIntent(result.data)
            // Review the Verify the integrity of the ID token section for
            // details on how to verify the ID token
            verifyIdToken(signInCredential.googleIdToken)
          } catch (e: ApiException) {
            Log.e(TAG, "Sign-in failed with error code:", e)
          }
        } else {
          Log.e(TAG, "Sign-in failed")
        }
      }
    

    জাভা

      private final ActivityResultLauncher<IntentSenderResult>
        activityResultLauncher = registerForActivityResult(
        new ActivityResultContracts.StartIntentSenderForResult(),
        result -> {
        If (result.getResultCode() == RESULT_OK) {
            try {
              SignInCredential signInCredential = Identity.getSignInClient(this)
                             .getSignInCredentialFromIntent(result.getData());
              verifyIdToken(signInCredential.getGoogleIdToken());
            } catch (e: ApiException ) {
              Log.e(TAG, "Sign-in failed with error:", e)
            }
        } else {
            Log.e(TAG, "Sign-in failed")
        }
    });
    
  2. সাইন ইন অনুরোধ তৈরি করুন

    কোটলিন

    private val tokenRequestOptions =
    GoogleIdTokenRequestOptions.Builder()
      .supported(true)
      // Your server's client ID, not your Android client ID.
      .serverClientId(getString("your-server-client-id")
      .filterByAuthorizedAccounts(true)
      .associateLinkedAccounts("service-id-of-and-defined-by-developer",
                               scopes)
      .build()
    

    জাভা

     private final GoogleIdTokenRequestOptions tokenRequestOptions =
         GoogleIdTokenRequestOptions.Builder()
      .setSupported(true)
      .setServerClientId("your-service-client-id")
      .setFilterByAuthorizedAccounts(true)
      .associateLinkedAccounts("service-id-of-and-defined-by-developer",
                                scopes)
      .build()
    
  3. সাইন-ইন মুলতুবি অভিপ্রায় চালু করুন

    কোটলিন

     Identity.signInClient(this)
        .beginSignIn(
      BeginSignInRequest.Builder()
        .googleIdTokenRequestOptions(tokenRequestOptions)
      .build())
        .addOnSuccessListener{result ->
          activityResultLauncher.launch(result.pendingIntent.intentSender)
      }
      .addOnFailureListener {e ->
        Log.e(TAG, "Sign-in failed because:", e)
      }
    

    জাভা

     Identity.getSignInClient(this)
      .beginSignIn(
        BeginSignInRequest.Builder()
          .setGoogleIdTokenRequestOptions(tokenRequestOptions)
          .build())
      .addOnSuccessListener(result -> {
        activityResultLauncher.launch(
            result.getPendingIntent().getIntentSender());
    })
    .addOnFailureListener(e -> {
      Log.e(TAG, "Sign-in failed because:", e);
    });
    

আইডি টোকেনের অখণ্ডতা যাচাই করুন

একটি Google API ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন

জাভা গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করা একটি প্রোডাকশন পরিবেশে Google আইডি টোকেন যাচাই করার প্রস্তাবিত উপায়।

জাভা

  import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
  import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
  import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

  ...

  GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
      // Specify the CLIENT_ID of the app that accesses the backend:
      .setAudience(Collections.singletonList(CLIENT_ID))
      // Or, if multiple clients access the backend:
      //.setAudience(Arrays.asList(CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3))
      .build();

  // (Receive idTokenString by HTTPS POST)

  GoogleIdToken idToken = verifier.verify(idTokenString);
  if (idToken != null) {
    Payload payload = idToken.getPayload();

    // Print user identifier
    String userId = payload.getSubject();
    System.out.println("User ID: " + userId);

    // Get profile information from payload
    String email = payload.getEmail();
    boolean emailVerified = Boolean.valueOf(payload.getEmailVerified());
    String name = (String) payload.get("name");
    String pictureUrl = (String) payload.get("picture");
    String locale = (String) payload.get("locale");
    String familyName = (String) payload.get("family_name");
    String givenName = (String) payload.get("given_name");

    // Use or store profile information
    // ...

  } else {
    System.out.println("Invalid ID token.");
  }

GoogleIdTokenVerifier.verify() পদ্ধতি JWT স্বাক্ষর, aud দাবি, iss দাবি এবং তাদের exp দাবি যাচাই করে।

আপনি যদি আইডি টোকেনটি Google Workspace বা ক্লাউড সংস্থার অ্যাকাউন্টের প্রতিনিধিত্ব করে তা যাচাই করতে চান, তাহলে আপনি Payload.getHostedDomain() পদ্ধতিতে ফেরত দেওয়া ডোমেন নাম চেক করে hd দাবিটি যাচাই করতে পারেন।