Google Sign-In হল Google-এর একটি SDK যা মোবাইল এবং ওয়েব অ্যাপ্লিকেশনে Google অ্যাকাউন্টের মাধ্যমে ব্যবহারকারী প্রমাণীকরণ বাস্তবায়ন করে। প্রযুক্তিটি OAuth 2.0 প্রোটোকলের উপর ভিত্তি করে তৈরি, যা তৃতীয় পক্ষের অ্যাপ্লিকেশনকে পাসওয়ার্ড না দিয়ে Google API-তে অ্যাক্সেস টোকেন পাওয়ার অনুমতি দেয়। 3 বিলিয়নেরও বেশি Android ডিভাইস Google Sign-In সমর্থন করে, যা এটিকে মোবাইল অ্যাপে সবচেয়ে সাধারণ লগইন পদ্ধতি করে তুলেছে। Google Identity Platform, 2025 অনুসারে, SDK ইন্টিগ্রেশন রেজিস্ট্রেশন সময় 60% কমায় এবং ব্যবহারকারী রূপান্তর বাড়ায়।
মূল বিষয়
Google Sign-In হল Google-এর প্রদত্ত একটি সিঙ্গেল সাইন-অন (SSO) পরিষেবা যা তৃতীয় পক্ষের অ্যাপ্লিকেশনে ব্যবহারকারী প্রমাণীকরণের জন্য। SDK ডেভেলপারদের নিজস্ব রেজিস্ট্রেশন সিস্টেম তৈরি না করেই Google অ্যাকাউন্টের মাধ্যমে লগইন সংহত করার অনুমতি দেয়। প্রযুক্তিটি OAuth 2.0 প্রোটোকল এবং OpenID Connect-এর উপর ভিত্তি করে তৈরি, যা ব্যবহারকারীর পরিচয় তথ্য সরবরাহ করে: নাম, ইমেল, অবতার এবং অনন্য শনাক্তকারী।
ঐতিহ্যগত ইমেল এবং পাসওয়ার্ড প্রমাণীকরণের বিপরীতে, Google Sign-In পাসওয়ার্ড মনে রাখার এবং রেজিস্ট্রেশন প্রক্রিয়ার মধ্য দিয়ে যাওয়ার প্রয়োজনীয়তা দূর করে। ব্যবহারকারী ডিভাইসে একটি Google অ্যাকাউন্ট নির্বাচন করে, অনুমতি নিশ্চিত করে এবং অ্যাপটি একটি অ্যাক্সেস টোকেন পায়। Google Identity Platform (2025) অনুসারে, Google Sign-In সহ অ্যাপগুলি ইমেল/পাসওয়ার্ড ফর্মের তুলনায় 52% বেশি সফল রেজিস্ট্রেশন দেখায়।
Google Sign-In তিনটি ব্যবহারের পরিস্থিতি সমর্থন করে: ব্যবহারকারী প্রমাণীকরণ (ID Token পাওয়া), Google API-তে অ্যাক্সেসের জন্য অনুমোদন (Access Token পাওয়া), এবং ইতিমধ্যে অনুমোদিত ব্যবহারকারীদের জন্য নির্বিঘ্ন প্রমাণীকরণ (Silent Sign-In)। প্রতিটি পরিস্থিতির জন্য বিভিন্ন সুযোগের (scopes) সেট প্রয়োজন এবং বিভিন্ন ধরণের টোকেন ফেরত দেয়।
OAuth 2.0 হল একটি অনুমোদন প্রোটোকল যা একটি অ্যাপকে ব্যবহারকারীর শংসাপত্র প্রকাশ না করেই ব্যবহারকারীর সম্পদে সীমিত অ্যাক্সেস পেতে দেয়। Google Sign-In-এর প্রসঙ্গে, প্রোটোকলটি নিম্নরূপ কাজ করে: অ্যাপটি Google-এর মাধ্যমে ব্যবহারকারীর কাছ থেকে অনুমোদনের অনুরোধ করে, একটি অস্থায়ী অনুমোদন কোড পায়, এটি অ্যাক্সেস টোকেনের জন্য বিনিময় করে এবং Google API কল করতে সেই টোকেনগুলি ব্যবহার করে।
OAuth 2.0-এর পূর্ববর্তী প্রোটোকলগুলি থেকে মূল পার্থক্য হল সম্পদের মালিক (ব্যবহারকারী), ক্লায়েন্ট (অ্যাপ), অনুমোদন সার্ভার (Google) এবং সম্পদ সার্ভার (Google API) এর মধ্যে ভূমিকার পৃথকীকরণ। অ্যাপ কখনই ব্যবহারকারীর পাসওয়ার্ড পায় না — শুধুমাত্র একটি টোকেন যা প্রত্যাহার করা যেতে পারে। Google Identity Platform OAuth 2.0-এর উপরে OpenID Connect স্পেসিফিকেশন ব্যবহার করে, যা JWT ফর্ম্যাটে একটি মানসম্মত ID Token যোগ করে।
// Credential Manager-এর মাধ্যমে ID Token পাওয়ার উদাহরণ
val googleIdOption = GoogleIdCredentialOption.Builder()
.setServerClientId(serverClientId)
.build()
val credentialManager = CredentialManager.create(this)
val request = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
credentialManager.getCredential(request)
.addOnSuccessListener { result ->
val credential = result.credential as GoogleIdCredential
Log.d("SignIn", credential.idToken)
}ID Token (JWT) তিনটি সেগমেন্ট ধারণ করে: স্বাক্ষর অ্যালগরিদম সহ হেডার, ব্যবহারকারী ডেটা (sub, email, name, picture) সহ পেলোড এবং যাচাইকরণের জন্য স্বাক্ষর। অ্যাপের সার্ভার-সাইড অংশ Google-এর পাবলিক কী ব্যবহার করে ID Token স্বাক্ষর যাচাই করে এবং ব্যবহারকারী শনাক্তকারী বের করে। এই পদ্ধতি নিশ্চিত করে যে ক্লায়েন্ট অ্যাপের সাথে আপস করা হলেও, Google-এর প্রাইভেট কী-তে অ্যাক্সেস ছাড়া আক্রমণকারী টোকেন জাল করতে পারে না।
Credential Manager হল 2023 সালে প্রবর্তিত একটি আধুনিক Android API যা সমস্ত প্রমাণীকরণ পদ্ধতি (Google Sign-In, পাসওয়ার্ড লগইন, Passkeys) একটি একক ব্যবহারকারী ইন্টারফেসে একত্রিত করে। পুরানো GoogleSignInClient-এর বিপরীতে, Credential Manager-এর লগইনের জন্য WebView-এর প্রয়োজন নেই — এটি একটি নেটিভ Bottom Sheet ব্যবহার করে, যা প্রমাণীকরণকে গতিশীল করে এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।
Credential Manager-এর প্রধান সুবিধা হল সমস্ত ক্রেডেনশিয়াল প্রকারের জন্য একীভূত UX। ব্যবহারকারী একটি ডায়ালগ দেখে যেখানে তারা বেছে নিতে পারে: Google দিয়ে সাইন ইন করুন, একটি Passkey ব্যবহার করুন বা পাসওয়ার্ড লিখুন। ডেভেলপারকে বিভিন্ন প্রমাণীকরণ ফ্লো পরিচালনা করতে হবে না — Credential Manager Google Sign-In, Smart Lock এবং Passkeys-এর সাথে মিথস্ক্রিয়াকে বিমূর্ত করে। Google Android 14+-এর জন্য Google Sign-In সংহত করার প্রাথমিক উপায় হিসাবে Credential Manager সুপারিশ করে।
| প্যারামিটার | GoogleSignInClient (লিগ্যাসি) | Credential Manager |
|---|---|---|
| ন্যূনতম API | Android 4.4 (API 19) | Android 4.4 (API 19) |
| ইন্টারফেস | WebView / BottomSheet | নেটিভ BottomSheet |
| Passkey সমর্থন | না | হ্যাঁ |
| SDK আকার | ~500 KB | ~150 KB |
| অবস্থা | অপ্রচলিত (2024) | Google দ্বারা সুপারিশকৃত |
মাইগ্রেশন GoogleSignInClient থেকে Credential Manager-এ ক্লায়েন্ট-সাইড লজিক পরিবর্তনের প্রয়োজন: GoogleSignInOptions-এর পরিবর্তে GoogleIdCredentialOption ব্যবহার করুন এবং GoogleSignIn.getSignedInAccountFromIntent-এর পরিবর্তে GetCredentialResponse-এর মাধ্যমে ফলাফল পরিচালনা করুন। সার্ভার-সাইড অংশে পরিবর্তনের প্রয়োজন নেই কারণ ID Token একই JWT ফর্ম্যাটে থাকে। Google I/O 2024 অনুসারে, Google Play-তে প্রায় 40% অ্যাপ ইতিমধ্যে Credential Manager-এ মাইগ্রেট হয়েছে।
Google Sign-In একটি Android অ্যাপে সংহত করা শুরু হয় Google Cloud Console-এ প্রকল্প কনফিগার করার মাধ্যমে। প্রথম ধাপ হল Android-এর জন্য একটি OAuth 2.0 Client ID তৈরি করা: অ্যাপের প্যাকেজ নাম এবং SHA-1 সার্টিফিকেট ফিঙ্গারপ্রিন্ট উল্লেখ করুন। Google এই ডেটা ব্যবহার করে যাচাই করে যে প্রমাণীকরণ অনুরোধটি আপনার অ্যাপ থেকে আসছে এবং নকল ক্লায়েন্ট থেকে নয়।
Google Cloud Console-এ ক্লায়েন্ট তৈরি করার পর, ডেভেলপার build.gradle-এ Credential Manager নির্ভরতা যোগ করে এবং serverClientId সহ GoogleIdCredentialOption কনফিগার করে। গুরুত্বপূর্ণ: serverClientId হল একই Google Cloud প্রকল্পের ওয়েব অ্যাপ্লিকেশনের Client ID, যা সার্ভার সাইড ID Token যাচাই করতে ব্যবহার করে। ক্লায়েন্ট অ্যাপ টোকেন যাচাই করে না — এটি শুধুমাত্র এটি গ্রহণ করে এবং সার্ভারে পাঠায়।
// build.gradle (app) dependencies
implementation("androidx.credentials:credentials:1.5.0")
implementation("androidx.credentials:credentials-play-services-auth:1.5.0")
implementation("com.google.android.libraries.identity.googleid:googleid:1.1.0")
// Credential Manager-এর মাধ্যমে Google Sign-In অনুরোধ করুন
suspend fun requestGoogleSignIn(context: Context): String? {
val credentialManager = CredentialManager.create(context)
val googleIdOption = GoogleIdCredentialOption.Builder()
.setServerClientId(BuildConfig.SERVER_CLIENT_ID)
.setAutoSelectEnabled(true)
.build()
val result = credentialManager.getCredential(
context as Activity,
GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
)
return (result.credential as GoogleIdCredential).idToken
}ক্লায়েন্টে ID Token পাওয়ার পর, অ্যাপটি এটি তার সার্ভারে পাঠায় যেখানে যাচাইকরণ করা হয়। সার্ভার Google-এর পাবলিক কী (https://www.googleapis.com/oauth2/v3/certs-এ উপলব্ধ), টোকেনের মেয়াদ শেষ হওয়ার সময় (exp) এবং aud ফিল্ডের মান ব্যবহার করে JWT স্বাক্ষর যাচাই করে — এটি serverClientId-এর সাথে মিলতে হবে। যাচাইকরণের পর, সার্ভার তার নিজস্ব সেশন তৈরি করে, উদাহরণস্বরূপ, একটি অভ্যন্তরীণ JWT বা Session Token জারি করে।
iOS-এ Google Sign-In-এর ইন্টিগ্রেশন GoogleSignIn-iOS SDK-এর মাধ্যমে করা হয়, যা CocoaPods বা Swift Package Manager-এর মাধ্যমে উপলব্ধ। সেটআপ প্রক্রিয়ায় Google Cloud Console-এ iOS-এর জন্য Client ID তৈরি করা (Bundle Identifier উল্লেখ করে), কলব্যাকের জন্য URL Scheme যোগ করা এবং প্রমাণীকরণের পরে Google-এর ফেরত দেওয়া URL পরিচালনা করার জন্য AppDelegate কনফিগার করা অন্তর্ভুক্ত।
Google Sign-In-এর iOS সংস্করণের Android থেকে গুরুত্বপূর্ণ পার্থক্য হল URL Scheme এবং Info.plist কনফিগার করার প্রয়োজন। GoogleSDK কলব্যাকের জন্য Universal Links ব্যবহার করে, কিন্তু ফallback-এর জন্য `com.googleusercontent.apps.[CLIENT_ID]` ফর্মের একটি URL Scheme প্রয়োজন। অ্যাপ লঞ্চের মধ্যে রিফ্রেশ টোকেন সংরক্ষণের জন্য Keychain Sharing কনফিগারেশনও প্রয়োজন। Google Identity ডকুমেন্টেশন অনুসারে, iOS SDK iOS 15 এবং তার উপরে সমর্থন করে।
// iOS-এ Google Sign-In সেটআপ করা
import GoogleSignIn
class SignInManager: ObservableObject {
func signIn(presenting viewController: UIViewController) {
GIDSignIn.sharedInstance.signIn(
withPresenting: viewController
) { signInResult, error in
guard let result = signInResult else {
print("Sign in failed: \(error)")
return
}
let idToken = result.user.idToken.tokenString
// ID Token সার্ভারে পাঠানো
sendTokenToBackend(idToken)
}
}
}iOS-এ, Google Sign-In ব্যবহারকারীদের জন্য Silent Sign-In সমর্থন করে যারা পূর্বে অনুমোদন করেছে। restorePreviousSignIn পদ্ধতি স্বয়ংক্রিয়ভাবে সেশন পুনরুদ্ধার করে যদি রিফ্রেশ টোকেন Keychain-এ সংরক্ষিত থাকে। এটি বিশেষ করে সেই অ্যাপগুলির জন্য গুরুত্বপূর্ণ যেখানে ব্যবহারকারীকে প্রতিটি লঞ্চে আবার লগইন করা উচিত নয়। Google-এর মতে, সক্রিয় Google সেশন সহ ডিভাইসগুলিতে Silent Sign-In 85% ক্ষেত্রে সফল হয়।
Google Sign-In-এর নিরাপত্তা তিনটি স্তরে নির্মিত: ক্লায়েন্ট যাচাইকরণ (SHA-1 অ্যাপ স্বাক্ষর), ট্রান্সপোর্ট এনক্রিপশন (HTTPS/TLS) এবং ক্রিপ্টোগ্রাফিক JWT স্বাক্ষর। Google থেকে প্রাপ্ত ID Token RS256 অ্যালগরিদম (SHA-256 সহ RSA) ব্যবহার করে স্বাক্ষরিত। অ্যাপের সার্ভার-সাইড অংশকে টোকেন স্বাক্ষর, মেয়াদ শেষ হওয়া এবং ইস্যুকারী (iss) — শুধুমাত্র accounts.google.com যাচাই করতে হবে।
Access Token হল একটি অস্থায়ী টোকেন (1 ঘন্টা বেঁচে থাকে) যা Google API (Google Drive, Google Calendar, YouTube, ইত্যাদি) অ্যাক্সেস সরবরাহ করে। ID Token-এর বিপরীতে, Access Token-এ ব্যবহারকারীর তথ্য থাকে না — এটি একটি অস্বচ্ছ স্ট্রিং যা Google API সার্ভার অনুরোধ অনুমোদনের জন্য ব্যবহার করে। Refresh Token হল একটি দীর্ঘস্থায়ী টোকেন যা ব্যবহারকারীকে পুনরায় লগইন না করেই নতুন Access Token পেতে দেয়। Refresh Token শুধুমাত্র প্রথম লগইনে জারি করা হয় এবং ব্যবহারকারী তাদের Google অ্যাকাউন্ট সেটিংসে এটি প্রত্যাহার করতে পারেন।
// সার্ভারে ID Token প্রক্রিয়াকরণের উদাহরণ (সিউডোকোড)
fun verifyGoogleToken(idToken: String): User? {
val verifier = GoogleIdTokenVerifier.Builder(
NetHttpTransport(), GsonFactory.getDefaultInstance()
).setAudience(listOf(CLIENT_ID))
.build()
val token = verifier.verify(idToken) ?: return null
val payload = token.payload
return User(
id = payload.subject,
email = payload.email,
name = payload.get("name") as String
)
}নিরাপত্তা সুপারিশ: ID Token কখনই অনিরাপদ চ্যানেলের মাধ্যমে প্রেরণ করবেন না, সমস্ত সার্ভার অনুরোধের জন্য HTTPS ব্যবহার করুন, টোকেনের মেয়াদ শেষ হওয়া (exp ফিল্ড) এবং ইস্যুকারী (iss) পরীক্ষা করুন। ক্লায়েন্টে, এনক্রিপশন ছাড়া SharedPreferences-এ টোকেন সংরক্ষণ করবেন না — EncryptedSharedPreferences বা Android Keystore ব্যবহার করুন। Google Sign-In সার্ভার-থেকে-সার্ভার প্রমাণীকরণের জন্য নয় — এর জন্য Service Accounts ব্যবহার করুন।
Credential Manager এবং ViewModel ব্যবহার করে Android অ্যাপে Google Sign-In ইন্টিগ্রেশনের একটি সম্পূর্ণ উদাহরণ। অ্যাপটি একটি সাইন-ইন বোতাম প্রদর্শন করে, প্রমাণীকরণের পরে ID Token সার্ভারে পাঠায় এবং ব্যবহারকারীর তথ্য দেখায়। কোডটি Credential Manager-এর সাথে অ্যাসিঙ্ক্রোনাস কাজের জন্য করুটিন ব্যবহার করে।
class SignInViewModel: ViewModel() {
private val cm = CredentialManager.create(getApplication())
private val googleOption = GoogleIdCredentialOption.Builder()
.setServerClientId(BuildConfig.SERVER_CLIENT_ID)
.build()
suspend fun signIn(): SignInResult {
return try {
val response = cm.getCredential(
GetCredentialRequest.Builder()
.addCredentialOption(googleOption)
.build()
)
val credential = response.credential as GoogleIdCredential
SignInResult.Success(credential.idToken)
} catch (e: GetCredentialCancellationException) {
SignInResult.Cancelled
}
}
}
sealed class SignInResult {
data class Success(val idToken: String) : SignInResult()
data class Error(val message: String) : SignInResult()
data class Cancelled : SignInResult()
}সফল প্রমাণীকরণের পরে, অ্যাপটির যাচাইকরণ এবং সেশন তৈরির জন্য ID Token তার সার্ভারে পাঠানো উচিত। HTTPS ব্যবহার করার এবং POST অনুরোধের বডিতে টোকেন পাস করার পরামর্শ দেওয়া হয়। সার্ভার তার নিজস্ব সেশন টোকেন ফেরত দেয়, যা ক্লায়েন্ট EncryptedSharedPreferences-এ সংরক্ষণ করে। সার্ভারে প্রতিটি পরবর্তী অনুরোধে, অভ্যন্তরীণ টোকেন ব্যবহার করা হয়, Google ID Token নয়।
প্রথম সাধারণ ত্রুটি হল SHA-1 সার্টিফিকেট অমিল। Google Cloud Console OAuth 2.0 Client ID-কে SHA-1 সার্টিফিকেট ফিঙ্গারপ্রিন্টের সাথে আবদ্ধ করে। যদি অ্যাপটি ডিবাগ কী দিয়ে তৈরি করা হয় কিন্তু Client ID রিলিজ কী-র জন্য তৈরি করা হয়েছিল, তাহলে Google Sign-In ত্রুটি 12501 (SIGN_IN_FAILED) ফেরত দেবে। সমাধান: Google Cloud Console-এ উভয় SHA-1 ফিঙ্গারপ্রিন্ট (ডিবাগ এবং রিলিজ) যোগ করুন অথবা ডেভেলপমেন্টের জন্য একটি Client ID এবং প্রোডাকশনের জন্য আলাদা একটি ব্যবহার করুন।
দ্বিতীয় সাধারণ সমস্যা হল ভুল serverClientId। ডেভেলপাররা প্রায়শই Credential Manager-এর serverClientId প্যারামিটারে Android Client ID-এর পরিবর্তে ওয়েব অ্যাপ্লিকেশন Client ID ব্যবহার করেন। Google সার্ভার যাচাইকরণের জন্য ID Token তৈরি করতে ওয়েব ক্লায়েন্ট ID প্রয়োজন। Android Client ID শুধুমাত্র প্রমাণীকরণের সময় অ্যাপ শনাক্ত করতে ব্যবহৃত হয়। নিশ্চিত করুন যে serverClientId Google Cloud Console-এ ওয়েব অ্যাপ্লিকেশনের সাথে মেলে।
তৃতীয় ত্রুটি হল বাতিলকরণ হ্যান্ডলিং উপেক্ষা করা। ব্যবহারকারী প্রমাণীকরণ সম্পূর্ণ না করেই Google Sign-In ডায়ালগ বন্ধ করতে পারে। Credential Manager একটি GetCredentialCancellationException নিক্ষেপ করে যা অন্যান্য ত্রুটি থেকে আলাদাভাবে পরিচালনা করা প্রয়োজন। অনেক ডেভেলপার সমস্ত ব্যতিক্রমকে ত্রুটি হিসাবে পরিচালনা করে, ব্যবহারকারীকে “লগইন ব্যর্থ হয়েছে” বার্তা দেখায় যখন ব্যবহারকারী কেবল অপারেশন বাতিল করেছে। সঠিক হ্যান্ডলিং: বাতিল হলে — কিছু দেখাবেন না, প্রাথমিক অবস্থায় ফিরে যান।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Android-এর জন্য Credential Manager (AndroidX Credentials) এবং iOS-এর জন্য Swift Package Manager-এর মাধ্যমে GIDSignIn SDK ব্যবহার করার পরামর্শ দেওয়া হয়। Credential Manager হল Google-সমর্থিত একটি আধুনিক API যা Google Sign-In, Passkeys এবং পাসওয়ার্ড লগইনকে একটি একক ইন্টারফেসে একত্রিত করে। অপ্রচলিত GoogleSignInClient (com.google.android.gms:auth) আর ব্যবহারের জন্য সুপারিশ করা হয় না।
ID Token হল একটি JWT যা ব্যবহারকারীর তথ্য (নাম, ইমেল, অনন্য ID) ধারণ করে। এটি অ্যাপের সার্ভার সাইডে প্রমাণীকরণের জন্য ব্যবহৃত হয়। Access Token হল Google API (Google Drive, Calendar) অ্যাক্সেসের জন্য একটি অস্বচ্ছ স্ট্রিং। ID Token 1 ঘন্টা বেঁচে থাকে, Access Token-ও 1 ঘন্টা বেঁচে থাকে তবে Refresh Token-এর মাধ্যমে নবায়ন করা যেতে পারে।
প্রযুক্তিগতভাবে হ্যাঁ, কিন্তু এটি নিরাপদ নয়। আপনি যদি শুধুমাত্র ক্লায়েন্টে ID Token যাচাই করেন, তাহলে একজন আক্রমণকারী অ্যাপটি ডিকম্পাইল করে যাচাইকরণ লজিক বের করতে পারে। Google-এর পাবলিক কী ব্যবহার করে সার্ভার-সাইড যাচাইকরণ নিশ্চিত করে যে টোকেনটি প্রকৃতপক্ষে Google দ্বারা জারি করা হয়েছে এবং জাল নয়। সার্ভার ছাড়া অ্যাপগুলির জন্য, Firebase Authentication ব্যবহার করুন।
ত্রুটি 12501 (SIGN_IN_FAILED) ঘটে যখন অ্যাপের SHA-1 সার্টিফিকেট Google Cloud Console-এ উল্লেখিতটির সাথে মেলে না। সমাধান: কনসোলে ডিবাগ সার্টিফিকেট (Android Studio থেকে) এবং রিলিজ সার্টিফিকেট থেকে SHA-1 যোগ করুন। এছাড়াও পরীক্ষা করুন যে কনসোলের প্যাকেজ নাম build.gradle-এর সাথে মেলে। পরিবর্তনের পরে, প্রচার হতে 24 ঘন্টা পর্যন্ত সময় লাগতে পারে।
না, Google Sign-In-এর Google সার্ভারের সাথে যোগাযোগের জন্য ইন্টারনেট সংযোগ প্রয়োজন। যদি ডিভাইস অফলাইনে থাকে, তাহলে একটি সেশন ক্যাশিং মেকানিজম ব্যবহার করুন: সফল লগইনের পরে, EncryptedSharedPreferences-এ টোকেন সংরক্ষণ করুন এবং পরবর্তী লঞ্চে এর বৈধতা পরীক্ষা করুন। যখন নেটওয়ার্ক না থাকে, সংরক্ষিত ডেটা দেখান এবং পরে লগইন করার পরামর্শ দিন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন