সতর্কতা: এই ডেটা গুগল ব্যবহারকারী ডেটা নীতিমালার অধীনে সরবরাহ করা হয়েছে। দয়া করে পর্যালোচনা করুন এবং নীতিটি মেনে চলুন। এটি করতে ব্যর্থ হওয়ার ফলে প্রকল্প স্থগিত বা অ্যাকাউন্ট স্থগিতের ফলাফল হতে পারে।

ব্যবহারকারীদের তাদের সংরক্ষিত শংসাপত্র দিয়ে সাইন ইন করুন

ব্যবহারকারীরা আপনার অ্যাপে সাইন ইন করতে আগে যে শংসাপত্রগুলি ব্যবহার করেছিলেন তার একটি পুনরুদ্ধার করার জন্য ব্যবহারকারীর কাছ থেকে অনুমতির অনুরোধ করতে ওয়ান ট্যাপ সাইন-ইন ক্লায়েন্ট ব্যবহার করুন৷ এই শংসাপত্রগুলি হয় একটি Google অ্যাকাউন্ট বা একটি ব্যবহারকারীর নাম-পাসওয়ার্ড সংমিশ্রণ হতে পারে যা তারা Chrome, Android অটোফিল বা পাসওয়ার্ডের জন্য Smart Lock ব্যবহার করে Google এর সাথে সংরক্ষণ করেছে৷

এক-ট্যাপ সাইন-ইন UI

শংসাপত্রগুলি সফলভাবে পুনরুদ্ধার করা হলে, আপনি সেগুলিকে ব্যবহার করতে পারেন ব্যবহারকারীকে আপনার অ্যাপে প্রবেশ করুন করতে।

ব্যবহারকারী যদি কোনো শংসাপত্র সংরক্ষণ না করে থাকে, তাহলে কোনো UI উপস্থাপন করা হয় না এবং আপনি আপনার স্বাভাবিক সাইন-আউট অভিজ্ঞতা প্রদান করতে পারেন।

আমার কোথায় ওয়ান ট্যাপ সাইন-ইন ব্যবহার করা উচিত?

আপনার অ্যাপের ব্যবহারকারীদের সাইন ইন করার প্রয়োজন হলে, আপনার সাইন-ইন স্ক্রিনে One Tap UI প্রদর্শন করুন। আপনার কাছে ইতিমধ্যেই একটি "Google দিয়ে সাইন ইন করুন" বোতাম থাকলেও এটি সহায়ক হতে পারে: কারণ ওয়ান ট্যাপ UI শুধুমাত্র সেই শংসাপত্রগুলি দেখানোর জন্য কনফিগার করা যেতে পারে যা ব্যবহারকারী আগে সাইন-ইন করতে ব্যবহার করেন, এটি এমন ব্যবহারকারীদের জন্য একটি অনুস্মারক হতে পারে যারা কদাচিৎ সাইন ইন করেন কিভাবে তারা শেষবার সাইন ইন করেছিল এবং ভুলবশত আপনার অ্যাপ দিয়ে নতুন অ্যাকাউন্ট তৈরি করা থেকে তাদের বাধা দেয়।

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

সাইন-ইন ঐচ্ছিক অ্যাপ্লিকেশানগুলিও উপরে উল্লিখিত কারণগুলির জন্য তাদের সাইন-ইন স্ক্রিনে ওয়ান ট্যাপ সাইন-ইন ব্যবহার করা উচিত৷

তুমি শুরু করার আগে

1. ওয়ান ট্যাপ সাইন-ইন ক্লায়েন্ট কনফিগার করুন

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

যদি আপনার অ্যাপটি ব্যবহারের পাসওয়ার্ড ভিত্তিক সাইন ইন, ব্যবহার setPasswordRequestOptions() পাসওয়ার্ড শংসাপত্র অনুরোধ সক্রিয়।

আপনার অ্যাপ Google সাইন-ইন, ব্যবহার ব্যবহার করে setGoogleIdTokenRequestOptions() সক্রিয় ও কনফিগার গুগল আইডি টোকেন অনুরোধ:

  • সার্ভার ক্লায়েন্ট ID সেট করুন আইডি আপনি Google API গুলি কনসোলে নির্মিত । মনে রাখবেন এটি আপনার সার্ভারের ক্লায়েন্ট আইডি, আপনার অ্যান্ড্রয়েড ক্লায়েন্ট আইডি নয়।

  • অনুমোদিত অ্যাকাউন্ট দ্বারা ফিল্টার করার জন্য ক্লায়েন্টকে কনফিগার করুন। আপনি যখন এই বিকল্পটি সক্ষম করেন, তখন ওয়ান ট্যাপ ক্লায়েন্ট শুধুমাত্র ব্যবহারকারীদের আগে থেকে ব্যবহার করা Google অ্যাকাউন্টগুলির মাধ্যমে আপনার অ্যাপে সাইন ইন করতে অনুরোধ করে৷ এটি করা ব্যবহারকারীদের সফলভাবে সাইন ইন করতে সাহায্য করতে পারে যখন তারা নিশ্চিত না যে তাদের কাছে ইতিমধ্যেই একটি অ্যাকাউন্ট আছে বা তারা কোন Google অ্যাকাউন্ট ব্যবহার করেছে এবং ব্যবহারকারীদের ভুলবশত আপনার অ্যাপের সাথে নতুন অ্যাকাউন্ট তৈরি করা থেকে বিরত রাখে।

  • আপনি স্বয়ংক্রিয়ভাবে যখন সম্ভব ব্যবহারকারীদের সাইন ইন করতে চান তাহলে, সঙ্গে বৈশিষ্ট্যটি সক্ষম setAutoSelectEnabled() । নিম্নলিখিত মানদণ্ড পূরণ হলে স্বয়ংক্রিয় সাইন-ইন সম্ভব:

    • ব্যবহারকারীর আপনার অ্যাপের জন্য ঠিক একটি শংসাপত্র সংরক্ষিত আছে। অর্থাৎ, একটি সংরক্ষিত পাসওয়ার্ড বা একটি সংরক্ষিত Google অ্যাকাউন্ট।
    • ব্যবহারকারী নিষ্ক্রিয় করেননি স্বয়ংক্রিয় সাইন-ইন তাদের মধ্যে Google অ্যাকাউন্ট সেটিংস
  • ঐচ্ছিক হলেও, আমরা সুপারিশ করছি যে আপনি সাইন-ইন নিরাপত্তা উন্নত করতে এবং রিপ্লে আক্রমণ এড়াতে একটি নন্স ব্যবহার করার বিষয়ে দৃঢ়ভাবে বিবেচনা করুন। ব্যবহার করুন setNonce প্রতিটি অনুরোধের একটি আপাতত অন্তর্ভূক্ত করে নেয়। SafetyNet দেখতে একটি আপাতত প্রাপ্ত একটি আপাতত উৎপাদিত উপর পরামর্শের জন্য অধ্যায় এবং অতিরিক্ত বিস্তারিত।

জাভা

public class YourActivity extends AppCompatActivity {
  // ...

  private SignInClient oneTapClient;
  private BeginSignInRequest signInRequest;

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState,
                       @Nullable PersistableBundle persistentState) {
      super.onCreate(savedInstanceState, persistentState);

      oneTapClient = Identity.getSignInClient(this);
      signInRequest = BeginSignInRequest.builder()
              .setPasswordRequestOptions(PasswordRequestOptions.builder()
                      .setSupported(true)
                      .build())
              .setGoogleIdTokenRequestOptions(GoogleIdTokenRequestOptions.builder()
                      .setSupported(true)
                      // 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())
              // Automatically sign in when exactly one credential is retrieved.
              .setAutoSelectEnabled(true)
              .build();
      // ...
  }
  // ...
}

কোটলিন

class YourActivity : AppCompatActivity() {
    // ...

    private lateinit var oneTapClient: SignInClient
    private lateinit var signInRequest: BeginSignInRequest

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        oneTapClient = Identity.getSignInClient(this)
        signInRequest = BeginSignInRequest.builder()
            .setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder()
                .setSupported(true)
                .build())
            .setGoogleIdTokenRequestOptions(
                BeginSignInRequest.GoogleIdTokenRequestOptions.builder()
                    .setSupported(true)
                    // Your server's client ID, not your Android client ID.
                    .setServerClientId(getString(R.string.your_web_client_id))
                    // Only show accounts previously used to sign in.
                    .setFilterByAuthorizedAccounts(true)
                    .build())
            // Automatically sign in when exactly one credential is retrieved.
            .setAutoSelectEnabled(true)
            .build()
        // ...
    }
    // ...
}

2. সাইন-ইন করা ব্যবহারকারীর জন্য চেক করুন

আপনার অ্যাক্টিভিটি যদি সাইন-ইন করা ব্যবহারকারী বা সাইন-আউট করা ব্যবহারকারী ব্যবহার করতে পারে, তাহলে ওয়ান ট্যাপ সাইন-ইন UI প্রদর্শন করার আগে ব্যবহারকারীর স্থিতি পরীক্ষা করুন।

প্রম্পটটি বন্ধ করে বা এর বাইরে ট্যাপ করে ব্যবহারকারী ইতিমধ্যে ওয়ান ট্যাপ সাইন-ইন ব্যবহার করতে অস্বীকার করেছেন কিনা তাও আপনার নজর রাখা উচিত। এটি আপনার কার্যকলাপের একটি বুলিয়ান সম্পত্তি হিসাবে সহজ হতে পারে. (দেখুন স্টপ একবার আলতো চাপ UI 'তে প্রদর্শন , নীচের।)

3. এক ট্যাপ সাইন-ইন UI প্রদর্শন করুন৷

ব্যবহারকারী সাইন ইন করা না থাকলে এবং ইতিমধ্যে ব্যবহার করতে একবার আলতো চাপ সাইন-ইন অস্বীকার করেননি, ক্লায়েন্ট বস্তুর কল beginSignIn() পদ্ধতি, এবং লিসেনারের সংযুক্ত Task এটা ফেরৎ। অ্যাপস সাধারণত কার্যকলাপ রয়েছে এই কাজটি onCreate() পদ্ধতি বা পর্দা ট্রানজিশন পর যখন একটি একক ভ্রমণ স্থাপত্য ব্যবহার করে।

ব্যবহারকারীর কাছে আপনার অ্যাপের জন্য কোনো সংরক্ষিত শংসাপত্র থাকলে ওয়ান ট্যাপ ক্লায়েন্ট সফল শ্রোতাকে কল করবে। সাফল্য শ্রোতা সালে থেকে অভিপ্রায় মুলতুবী পেতে Task ফলাফলের এবং এটি পাস startIntentSenderForResult() একবার আলতো চাপ সাইন-ইন UI 'তে শুরু।

ব্যবহারকারীর কাছে কোনো সংরক্ষিত শংসাপত্র না থাকলে, ওয়ান ট্যাপ ক্লায়েন্ট ব্যর্থ শ্রোতাকে কল করবে। এই ক্ষেত্রে, কোনও পদক্ষেপের প্রয়োজন নেই: আপনি কেবল অ্যাপের সাইন-আউট অভিজ্ঞতা উপস্থাপন করা চালিয়ে যেতে পারেন। যাইহোক, আপনি যদি One Tap সাইন-আপ সমর্থন করেন, তাহলে আপনি একটি নির্বিঘ্ন অ্যাকাউন্ট তৈরির অভিজ্ঞতার জন্য এখানে সেই প্রবাহ শুরু করতে পারেন। দেখুন একবার আলতো চাপ নতুন অ্যাকাউন্ট তৈরি করুন

জাভা

oneTapClient.beginSignIn(signUpRequest)
        .addOnSuccessListener(this, new OnSuccessListener<BeginSignInResult>() {
            @Override
            public void onSuccess(BeginSignInResult result) {
                try {
                    startIntentSenderForResult(
                            result.getPendingIntent().getIntentSender(), REQ_ONE_TAP,
                            null, 0, 0, 0);
                } catch (IntentSender.SendIntentException e) {
                    Log.e(TAG, "Couldn't start One Tap UI: " + e.getLocalizedMessage());
                }
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // No saved credentials found. Launch the One Tap sign-up flow, or
                // do nothing and continue presenting the signed-out UI.
                Log.d(TAG, e.getLocalizedMessage());
            }
        });

কোটলিন

oneTapClient.beginSignIn(signInRequest)
    .addOnSuccessListener(this) { result ->
        try {
            startIntentSenderForResult(
                result.pendingIntent.intentSender, REQ_ONE_TAP,
                null, 0, 0, 0, null)
        } catch (e: IntentSender.SendIntentException) {
            Log.e(TAG, "Couldn't start One Tap UI: ${e.localizedMessage}")
        }
    }
    .addOnFailureListener(this) { e ->
        // No saved credentials found. Launch the One Tap sign-up flow, or
        // do nothing and continue presenting the signed-out UI.
        Log.d(TAG, e.localizedMessage)
    }

4. ব্যবহারকারীর প্রতিক্রিয়া হ্যান্ডেল

একবার আলতো চাপ সাইন-ইন প্রম্পট ব্যবহারকারীর প্রতিক্রিয়া আপনার কার্যকলাপ এর ব্যবহার করে আপনার অ্যাপ্লিকেশানে প্রতিবেদন করা হবে onActivityResult() পদ্ধতি। ব্যবহারকারী যদি সাইন ইন করা বেছে নেন, ফলাফলটি একটি সংরক্ষিত শংসাপত্র হবে৷ ব্যবহারকারী সাইন ইন করতে পারেন একবার আলতো চাপ UI 'তে ক্লোজিং বা বাইরে ট্যাপ করে অস্বীকার করেন, তাহলে ফলাফলের কোড সহ ফিরে আসবে RESULT_CANCELED । আপনার অ্যাপটিকে উভয় সম্ভাবনাই পরিচালনা করতে হবে।

পুনরুদ্ধার করা শংসাপত্র দিয়ে সাইন ইন করুন

ব্যবহারকারীর আপনার অ্যাপ্লিকেশনে সাথে ভাগ পরিচয়পত্র বেছে থাকে, তাহলে আপনি তাদের কাছ থেকে অভিপ্রায় তথ্য ক্ষণস্থায়ী দ্বারা উদ্ধার করতে পারেন onActivityResult() একবার আলতো চাপ ক্লায়েন্টের কাছে getSignInCredentialFromIntent() পদ্ধতি। ক্রেডেনশিয়াল একটি অ-নাল থাকবে googleIdToken সম্পত্তি যদি ব্যবহারকারী আপনার অ্যাপ ব্যবহার করলে Google অ্যাকাউন্ট ক্রেডেনশিয়াল, অথবা একটি অ নাল ভাগ password যদি ব্যবহারকারী একটি সংরক্ষিত পাসওয়ার্ড ভাগ সম্পত্তি।

আপনার অ্যাপের ব্যাকএন্ড দিয়ে প্রমাণীকরণ করতে শংসাপত্র ব্যবহার করুন।

  • যদি একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড যুগল পুনরুদ্ধার করা হয়, সেগুলিকে সাইন ইন করতে একইভাবে ব্যবহার করুন যদি ব্যবহারকারী নিজে সেগুলি সরবরাহ করে থাকে।
  • যদি Google অ্যাকাউন্টের শংসাপত্রগুলি পুনরুদ্ধার করা হয়, তাহলে আপনার ব্যাকএন্ডের সাথে প্রমাণীকরণ করতে আইডি টোকেন ব্যবহার করুন। আপনি যদি রিপ্লে আক্রমণ এড়াতে সাহায্য করার জন্য একটি নন্স ব্যবহার করা বেছে নিয়ে থাকেন তবে আপনার ব্যাকএন্ড সার্ভারে প্রতিক্রিয়া মান পরীক্ষা করুন। দেখুন একটি ব্যাকএন্ড আইডি টোকেন ব্যবহার সহ প্রমাণীকরণ

জাভা

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data);
                  String idToken = credential.getGoogleIdToken();
                  String username = credential.getId();
                  String password = credential.getPassword();
                  if (idToken !=  null) {
                      // Got an ID token from Google. Use it to authenticate
                      // with your backend.
                      Log.d(TAG, "Got ID token.");
                  } else if (password != null) {
                      // Got a saved username and password. Use them to authenticate
                      // with your backend.
                      Log.d(TAG, "Got password.");
                  }
              } catch (ApiException e) {
                  // ...
              }
              break;
      }
  }
}

কোটলিন

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
             REQ_ONE_TAP -> {
                try {
                    val credential = oneTapClient.getSignInCredentialFromIntent(data)
                    val idToken = credential.googleIdToken
                    val username = credential.id
                    val password = credential.password
                    when {
                        idToken != null -> {
                            // Got an ID token from Google. Use it to authenticate
                            // with your backend.
                            Log.d(TAG, "Got ID token.")
                        }
                        password != null -> {
                            // Got a saved username and password. Use them to authenticate
                            // with your backend.
                            Log.d(TAG, "Got password.")
                        }
                        else -> {
                            // Shouldn't happen.
                            Log.d(TAG, "No ID token or password!")
                        }
                    }
                } catch (e: ApiException) {
                    // ...
                }
            }
        }
    }
    // ...
}

ওয়ান ট্যাপ UI প্রদর্শন করা বন্ধ করুন

ব্যবহারকারী সাইন ইন করতে অস্বীকার করেন, তাহলে কল getSignInCredentialFromIntent() একটি নিক্ষেপ করা হবে ApiException একটি সঙ্গে CommonStatusCodes.CANCELED স্থিতি কোড। যখন এটি ঘটে, তখন আপনাকে সাময়িকভাবে ওয়ান ট্যাপ সাইন-ইন UI অক্ষম করতে হবে যাতে আপনি বারবার প্রম্পট দিয়ে আপনার ব্যবহারকারীদের বিরক্ত না করেন। নিম্নলিখিত উদাহরণটি অ্যাক্টিভিটিতে একটি সম্পত্তি সেট করার মাধ্যমে এটি সম্পন্ন করে, যা এটি ব্যবহারকারীকে ওয়ান ট্যাপ সাইন-ইন অফার করবে কিনা তা নির্ধারণ করতে ব্যবহার করে; তবে আপনার কাছে একটি মান বাঁচাতে পারে SharedPreferences অথবা অন্য কোনো পদ্ধতি ব্যবহার করুন।

ওয়ান ট্যাপ সাইন-ইন প্রম্পটগুলির সীমিত আপনার নিজস্ব হার বাস্তবায়ন করা গুরুত্বপূর্ণ। আপনি যদি তা না করেন, এবং একজন ব্যবহারকারী পরপর একাধিক প্রম্পট বাতিল করে, One Tap ক্লায়েন্ট পরবর্তী 24 ঘন্টার জন্য ব্যবহারকারীকে অনুরোধ করবে না।

জাভা

public class YourActivity extends AppCompatActivity {

  // ...
  private static final int REQ_ONE_TAP = 2;  // Can be any integer unique to the Activity.
  private boolean showOneTapUI = true;
  // ...

  @Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
      super.onActivityResult(requestCode, resultCode, data);

      switch (requestCode) {
          case REQ_ONE_TAP:
              try {
                  // ...
              } catch (ApiException e) {
                  switch (e.getStatusCode()) {
                      case CommonStatusCodes.CANCELED:
                          Log.d(TAG, "One-tap dialog was closed.");
                          // Don't re-prompt the user.
                          showOneTapUI = false;
                          break;
                      case CommonStatusCodes.NETWORK_ERROR:
                          Log.d(TAG, "One-tap encountered a network error.");
                          // Try again or just ignore.
                          break;
                      default:
                          Log.d(TAG, "Couldn't get credential from result."
                                  + e.getLocalizedMessage());
                          break;
                  }
              }
              break;
      }
  }
}

কোটলিন

class YourActivity : AppCompatActivity() {

    // ...
    private val REQ_ONE_TAP = 2  // Can be any integer unique to the Activity
    private var showOneTapUI = true
    // ...

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            REQ_ONE_TAP -> {
                try {
                    // ...
                } catch (e: ApiException) {
                    when (e.statusCode) {
                        CommonStatusCodes.CANCELED -> {
                            Log.d(TAG, "One-tap dialog was closed.")
                            // Don't re-prompt the user.
                            showOneTapUI = false
                        }
                        CommonStatusCodes.NETWORK_ERROR -> {
                            Log.d(TAG, "One-tap encountered a network error.")
                            // Try again or just ignore.
                        }
                        else -> {
                            Log.d(TAG, "Couldn't get credential from result." +
                                " (${e.localizedMessage})")
                        }
                    }
                }
            }
        }
    }
    // ...
}

5. সাইন-আউট পরিচালনা করুন

যখন একজন ব্যবহারকারী লক্ষণ আপনার অ্যাপের বাইরে একবার আলতো চাপ ক্লায়েন্টের সাথে যোগাযোগ signOut() পদ্ধতি। কলিং signOut() স্বয়ংক্রিয় সাইন-ইন অক্ষম করে আবার ব্যবহারকারী লক্ষণ পর্যন্ত।

এমনকি আপনি স্বয়ংক্রিয় সাইন-ইন ব্যবহার না করলেও, এই পদক্ষেপটি গুরুত্বপূর্ণ কারণ এটি নিশ্চিত করে যে যখন ব্যবহারকারীরা আপনার অ্যাপ থেকে সাইন আউট করেন, তখন আপনি যে কোনো Play পরিষেবা API ব্যবহার করেন তার প্রমাণীকরণ অবস্থাও রিসেট হয়ে যায়।

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

আপনি যদি Google শংসাপত্রগুলি পুনরুদ্ধার করতে One Tap ক্লায়েন্ট কনফিগার করেন, তাহলে আপনার অ্যাপ এখন Google ID টোকেন পেতে পারে যা আপনার ব্যবহারকারীদের Google অ্যাকাউন্টের প্রতিনিধিত্ব করে। কীভাবে আপনি পারেন ব্যাকএন্ড এই টোকেন ব্যবহার

আপনি Google সাইন-ইনকে সমর্থন, তাহলে আপনি ক্লায়েন্ট একবার আলতো চেপে ব্যবহার করতে পারেন frictionless অ্যাকাউন্ট তৈরি আপনার অ্যাপ্লিকেশানে প্রবাহিত যোগ