Google সাইন-ইন API-এর অবমূল্যায়নের পর, আমরা 2026-এ গেমস v1 SDK সরিয়ে দিচ্ছি। ফেব্রুয়ারি 2025-এর পরে, আপনি Google Play-তে গেমস v1 SDK-এর সাথে নতুনভাবে সংহত শিরোনাম প্রকাশ করতে পারবেন না। আমরা আপনাকে পরিবর্তে গেমস v2 SDK ব্যবহার করার পরামর্শ দিই।
পূর্ববর্তী গেমস v1 ইন্টিগ্রেশন সহ বিদ্যমান শিরোনামগুলি কয়েক বছর ধরে কাজ করতে থাকলে, আপনাকে জুন 2025 থেকে v2 তে স্থানান্তরিত করতে উত্সাহিত করা হচ্ছে।
এই নির্দেশিকাটি প্লে গেম পরিষেবা v1 SDK ব্যবহার করার জন্য। সর্বশেষ SDK সংস্করণ সম্পর্কে তথ্যের জন্য, v2 ডকুমেন্টেশন দেখুন।
Google Play গেম পরিষেবাগুলির কার্যকারিতা অ্যাক্সেস করার জন্য, আপনার গেমটিকে সাইন-ইন করা খেলোয়াড়ের অ্যাকাউন্ট সরবরাহ করতে হবে৷ প্লেয়ারটি প্রমাণীকৃত না হলে, Google Play Games Services API-এ কল করার সময় আপনার গেমটি ত্রুটির সম্মুখীন হতে পারে। এই ডকুমেন্টেশন বর্ণনা করে কিভাবে আপনার গেমে একটি বিরামহীন সাইন-ইন অভিজ্ঞতা বাস্তবায়ন করতে হয়।
প্লেয়ার সাইন-ইন প্রয়োগ করুন
GoogleSignInClient ক্লাস হল বর্তমানে সাইন-ইন করা প্লেয়ারের অ্যাকাউন্ট পুনরুদ্ধার করার জন্য এবং প্লেয়ারে সাইন-ইন করার মূল এন্ট্রি পয়েন্ট যদি তারা ডিভাইসে আপনার অ্যাপে আগে না করে থাকে।
একটি সাইন-ইন ক্লায়েন্ট তৈরি করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
GoogleSignInOptionsঅবজেক্টের মাধ্যমে একটি সাইন-ইন ক্লায়েন্ট তৈরি করুন, যেমনটি নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে।GoogleSignInOptions.Builderএ আপনার সাইন-ইন কনফিগার করতে, আপনাকে অবশ্যইGoogleSignInOptions.DEFAULT_GAMES_SIGN_INনির্দিষ্ট করতে হবে৷DEFAULT_GAMES_SIGN_IN৷GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
আপনি যদি একটি
SnapshotsClientব্যবহার করতে চান, তাহলে আপনারGoogleSignInOptions.Builderএ.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)যোগ করুন যা নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) .build();GoogleSignIn.getClient()পদ্ধতিতে কল করুন এবং আগের ধাপে আপনি যে বিকল্পগুলি কনফিগার করেছেন সেগুলি পাস করুন৷ কলটি সফল হলে, Google সাইন-ইন APIGoogleSignInClientএর একটি উদাহরণ প্রদান করে।
প্লেয়ার ইতিমধ্যে সাইন ইন আছে কিনা পরীক্ষা করুন
আপনি GoogleSignIn.getLastSignedInAccount() ব্যবহার করে একটি অ্যাকাউন্ট ইতিমধ্যেই বর্তমান ডিভাইসে সাইন ইন করা আছে কিনা এবং এই অ্যাকাউন্টে ইতিমধ্যেই GoogleSignIn.hasPermissions() ব্যবহার করে প্রয়োজনীয় অনুমতি দেওয়া আছে কিনা তা পরীক্ষা করতে পারেন৷ যদি উভয় শর্তই সত্য হয়—অর্থাৎ, getLastSignedInAccount() একটি নন-নাল মান প্রদান করে এবং hasPermissions() true প্রদান করে —আপনি নিরাপদে getLastSignedInAccount() থেকে ফিরে আসা অ্যাকাউন্টটি ব্যবহার করতে পারেন, এমনকি ডিভাইসটি অফলাইনে থাকলেও।
একটি নীরব সাইন-ইন সম্পাদন করুন৷
আপনি বর্তমানে সাইন-ইন করা প্লেয়ারের অ্যাকাউন্ট পুনরুদ্ধার করতে silentSignIn() কল করতে পারেন, এবং প্লেয়াররা যদি অন্য ডিভাইসে সফলভাবে আপনার অ্যাপে সাইন ইন করে থাকে তাহলে ব্যবহারকারী ইন্টারফেস প্রদর্শন না করে সাইন ইন করার চেষ্টা করুন।
silentSignIn() পদ্ধতি একটি Task<GoogleSignInAccount> । টাস্কটি সম্পূর্ণ হলে, আপনি সাইন-ইন অ্যাকাউন্টে আগে ঘোষিত GoogleSignInAccount ক্ষেত্রটি সেট করুন যে টাস্কটি ফলাফল হিসাবে ফিরে আসে, বা null এ নির্দেশ করে যে কোনও সাইন-ইন করা ব্যবহারকারী নেই।
যদি নীরব সাইন-ইন প্রচেষ্টা ব্যর্থ হয়, তাহলে আপনি একটি সাইন-ইন ব্যবহারকারী ইন্টারফেস প্রদর্শন করতে সাইন-ইন অভিপ্রায় পাঠাতে পারেন, যেমন একটি ইন্টারেক্টিভ সাইন-ইন সম্পাদন করুন- এ বর্ণিত আছে।
যেহেতু ক্রিয়াকলাপটি অগ্রভাগে না থাকলে সাইন-ইন করা প্লেয়ারের অবস্থা পরিবর্তন হতে পারে, তাই আমরা অ্যাক্টিভিটির onResume() পদ্ধতি থেকে silentSignIn() কল করার পরামর্শ দিই৷
নিঃশব্দে সাইন-ইন করতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- নীরব সাইন-ইন প্রবাহ শুরু করতে
GoogleSignInClientএsilentSignIn()পদ্ধতিতে কল করুন। এই কলটি একটিTask<GoogleSignInAccount>অবজেক্ট ফেরত দেয় যাতে একটিGoogleSignInAccountথাকে যদি সাইলেন্ট সাইন-ইন সফল হয়। -
OnCompleteListenerওভাররাইড করে প্লেয়ার সাইন-ইন এর সাফল্য বা ব্যর্থতা পরিচালনা করুন।- সাইন-ইন টাস্ক সফল হলে,
getResult()কল করেGoogleSignInAccountঅবজেক্ট পান। - সাইন-ইন সফল না হলে, আপনি একটি ইন্টারেক্টিভ সাইন-ইন প্রবাহ চালু করতে একটি সাইন-ইন অভিপ্রায় পাঠাতে পারেন। আপনি ব্যবহার করতে পারেন এমন অতিরিক্ত কলব্যাক শ্রোতাদের একটি তালিকার জন্য, টাস্ক API বিকাশকারী গাইড এবং
TaskAPI রেফারেন্স দেখুন।
- সাইন-ইন টাস্ক সফল হলে,
নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে আপনার অ্যাপ নীরব সাইন-ইন করতে পারে:
private void signInSilently() { GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN; GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) { // Already signed in. // The signed in account is stored in the 'account' variable. GoogleSignInAccount signedInAccount = account; } else { // Haven't been signed-in before. Try the silent sign-in first. GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions); signInClient .silentSignIn() .addOnCompleteListener( this, new OnCompleteListener<GoogleSignInAccount>() { @Override public void onComplete(@NonNull Task<GoogleSignInAccount> task) { if (task.isSuccessful()) { // The signed in account is stored in the task's result. GoogleSignInAccount signedInAccount = task.getResult(); } else { // Player will need to sign-in explicitly using via UI. // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in, // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement // Interactive Sign-in. } } }); } } @Override protected void onResume() { super.onResume(); signInSilently(); }
নীরব সাইন-ইন প্রচেষ্টা ব্যর্থ হলে, আপনি বিস্তারিত স্ট্যাটাস কোড সহ একটি ApiException পেতে getException() কল করতে পারেন। CommonStatusCodes.SIGN_IN_REQUIRED এর একটি স্ট্যাটাস কোড নির্দেশ করে যে খেলোয়াড়কে সাইন-ইন করার জন্য স্পষ্ট পদক্ষেপ নিতে হবে। এই ক্ষেত্রে, পরবর্তী বিভাগে বর্ণিত হিসাবে আপনার অ্যাপের একটি ইন্টারেক্টিভ সাইন-ইন প্রবাহ চালু করা উচিত।
একটি ইন্টারেক্টিভ সাইন-ইন করুন
প্লেয়ার ইন্টারঅ্যাকশনের সাথে সাইন ইন করতে, আপনার অ্যাপটিকে সাইন-ইন করার অভিপ্রায় চালু করতে হবে। সফল হলে, Google সাইন-ইন API একটি ব্যবহারকারী ইন্টারফেস প্রদর্শন করে যা খেলোয়াড়কে সাইন ইন করার জন্য তাদের শংসাপত্রগুলি প্রবেশ করতে অনুরোধ করে৷ এই পদ্ধতিটি আপনার অ্যাপ বিকাশকে সহজ করে, যেহেতু সাইন-ইন কার্যকলাপটি আপনার অ্যাপের পক্ষ থেকে Google Play পরিষেবাগুলি আপডেট করার প্রয়োজন বা সম্মতি প্রম্পট দেখানোর মতো পরিস্থিতিগুলি পরিচালনা করে৷ ফলাফল onActivityResult কলব্যাকের মাধ্যমে ফেরত দেওয়া হয়।
ইন্টারেক্টিভভাবে সাইন-ইন করতে, এই ধাপগুলি অনুসরণ করুন:
একটি সাইন-ইন অভিপ্রায় পেতে
GoogleSignInClientএgetSigninIntent()এ কল করুন, তারপরstartActivity()কল করুন এবং সেই অভিপ্রায়ে পাস করুন৷ নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে আপনার অ্যাপ একটি ইন্টারেক্টিভ সাইন-ইন প্রবাহ চালু করতে পারে:private void startSignInIntent() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }onActivityResult()কলব্যাকে, ফিরে আসা অভিপ্রায় থেকে ফলাফল পরিচালনা করুন।- সাইন-ইন ফলাফল সফল হলে,
GoogleSignInResultথেকেGoogleSignInAccountঅবজেক্টটি পান। - সাইন-ইন ফলাফল সফল না হলে, আপনাকে সাইন-ইন ত্রুটি পরিচালনা করা উচিত (উদাহরণস্বরূপ, একটি সতর্কতায় একটি ত্রুটি বার্তা প্রদর্শন করে)। নিম্নলিখিত কোড স্নিপেট দেখায় যে কীভাবে আপনার অ্যাপ প্লেয়ার সাইন-ইন করার ফলাফলগুলি পরিচালনা করতে পারে:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // The signed in account is stored in the result. GoogleSignInAccount signedInAccount = result.getSignInAccount(); } else { String message = result.getStatus().getStatusMessage(); if (message == null || message.isEmpty()) { message = getString(R.string.signin_other_error); } new AlertDialog.Builder(this).setMessage(message) .setNeutralButton(android.R.string.ok, null).show(); } } }
- সাইন-ইন ফলাফল সফল হলে,
প্লেয়ার তথ্য পুনরুদ্ধার
Google সাইন-ইন এপিআই যে GoogleSignInAccount ফেরত দেয় তাতে কোনো প্লেয়ারের তথ্য থাকে না। যদি আপনার গেম প্লেয়ারের তথ্য ব্যবহার করে, যেমন প্লেয়ারের ডিসপ্লে নাম এবং প্লেয়ার আইডি, আপনি এই তথ্য পুনরুদ্ধার করতে এই পদক্ষেপগুলি অনুসরণ করতে পারেন৷
-
getPlayersClient()পদ্ধতিতে কল করে এবং একটি প্যারামিটার হিসাবেGoogleSignInAccountএ পাস করে একটিPlayersClientঅবজেক্ট পান। -
Playerঅবজেক্টকে অ্যাসিঙ্ক্রোনাসভাবে লোড করতেPlayersClientপদ্ধতিগুলি ব্যবহার করুন যাতে কোনও খেলোয়াড়ের তথ্য রয়েছে৷ উদাহরণস্বরূপ, আপনি বর্তমানে সাইন-ইন করা প্লেয়ার লোড করতেgetCurrentPlayer()কল করতে পারেন। যদি টাস্কটিSIGN_IN_REQUIREDএর স্ট্যাটাস কোড সহ একটিApiExceptionফেরত দেয়, তাহলে এটি নির্দেশ করে যে প্লেয়ারটিকে পুনরায় প্রমাণীকরণ করতে হবে। এটি করার জন্য, প্লেয়ারে ইন্টারেক্টিভভাবে সাইন ইন করতেGoogleSignInClient.getSignInIntent()এ কল করুন। - যদি টাস্কটি সফলভাবে
Playerঅবজেক্টটি ফেরত দেয়, তাহলে আপনিPlayerঅবজেক্টের পদ্ধতিগুলিকে নির্দিষ্ট প্লেয়ারের বিবরণ পুনরুদ্ধার করতে কল করতে পারেন (উদাহরণস্বরূপ,getDisplayName()বাgetPlayerId()।
একটি সাইন-ইন বোতাম প্রদান করুন
আপনার গেমে একটি আদর্শ Google সাইন-ইন বোতাম প্রদান করতে, আপনি এই পদ্ধতিগুলির মধ্যে একটি ব্যবহার করতে পারেন:
- প্রধান কার্যকলাপ লেআউটে একটি
com.google.android.gms.common.SignInButtonঅন্তর্ভুক্ত করুন; বা - Google সাইন-ইন ব্র্যান্ডিং নির্দেশিকা অনুসারে একটি কাস্টম সাইন-ইন বোতাম ডিজাইন করুন৷
ব্যবহারকারীরা সাইন-ইন বোতামে ক্লিক করলে, আপনার গেমটি একটি সাইন-ইন অভিপ্রায় পাঠিয়ে সাইন-ইন প্রবাহ শুরু করবে, যেমনটি একটি ইন্টারেক্টিভ সাইন-ইন সম্পাদন করুন- এ বর্ণিত আছে।
এই কোড স্নিপেট দেখায় কিভাবে আপনি আপনার কার্যকলাপের জন্য onCreate() পদ্ধতিতে একটি সাইন-ইন বোতাম যোগ করতে পারেন।
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); }
নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে আপনি সাইন-ইন অভিপ্রায় পাঠাতে পারেন যখন ব্যবহারকারী সাইন-ইন বোতামে ক্লিক করেন।
@Override public void onClick(View view) { if (view.getId() == R.id.sign_in_button) { // start the asynchronous sign in flow startSignInIntent(); } else if (view.getId() == R.id.sign_out_button) { // sign out. signOut(); // show sign-in button, hide the sign-out button findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); } }
খেলা পপ আপ প্রদর্শন
আপনি GamesClient ক্লাস ব্যবহার করে আপনার গেমে পপ-আপ ভিউ প্রদর্শন করতে পারেন। উদাহরণ স্বরূপ, আপনার গেম একটি "ওয়েলকাম ব্যাক" বা "অ্যাচিভমেন্ট আনলকড" পপ-আপ প্রদর্শন করতে পারে। Google Play গেম পরিষেবাগুলিকে আপনার গেমের ভিউতে পপ-আপগুলি চালু করার অনুমতি দিতে, setViewForPopups() পদ্ধতিতে কল করুন৷ আপনি setGravityForPopups() কল করে স্ক্রিনে পপ-আপ কোথায় প্রদর্শিত হবে তা আরও কাস্টমাইজ করতে পারেন।
প্লেয়ার সাইন আউট
সাইন-আউট GoogleSignInClient এ signOut() পদ্ধতিতে কলের মাধ্যমে সম্পন্ন হয়।
private void signOut() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); signInClient.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // at this point, the user is signed out. } }); }