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

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

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

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

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

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

সেটআপ

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

আপনার ডেভেলপমেন্ট হোস্টে সর্বশেষ গুগল প্লে পরিষেবাগুলি পান:

  1. অ্যান্ড্রয়েড এসডিকে ম্যানেজার খুলুন।
  1. SDK Tools-এর অধীনে Google Play services খুঁজুন।

  2. যদি এই প্যাকেজগুলির স্ট্যাটাস 'Installed' না হয়, তাহলে উভয়টিই নির্বাচন করুন এবং 'Install Packages'-এ ক্লিক করুন।

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

  1. আপনার প্রোজেক্ট-স্তরের build.gradle ফাইলে, buildscript এবং allprojects উভয় সেকশনেই গুগলের মেভেন রিপোজিটরি অন্তর্ভুক্ত করুন।

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

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

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

একটি গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করুন

প্রোডাকশন পরিবেশে গুগল আইডি টোকেন যাচাই করার জন্য জাভা গুগল এপিআই ক্লায়েন্ট লাইব্রেরি ব্যবহার করার পরামর্শ দেওয়া হয়।

জাভা

  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 ক্লেইম যাচাই করে।

আইডি টোকেনটি যে একটি গুগল ওয়ার্কস্পেস বা ক্লাউড অর্গানাইজেশন অ্যাকাউন্টের প্রতিনিধিত্ব করে, তা যাচাই করতে হলে, আপনি Payload.getHostedDomain() মেথড দ্বারা ফেরত আসা ডোমেইন নামটি পরীক্ষা করে hd ক্লেইমটি যাচাই করতে পারেন।