ورود به سیستم حساب پیوندی، ورود با یک ضربه با Google را برای کاربرانی که از قبل حساب Google خود را به سرویس شما مرتبط کردهاند، فعال میکند. این تجربه را برای کاربران بهبود می بخشد زیرا آنها می توانند با یک کلیک بدون وارد کردن نام کاربری و رمز عبور خود وارد سیستم شوند. همچنین شانس ایجاد حساب های تکراری در سرویس شما توسط کاربران را کاهش می دهد.
ورود به حساب پیوندی به عنوان بخشی از جریان ورود به سیستم با یک ضربه برای Android در دسترس است. این بدان معنی است که اگر برنامه شما قبلاً ویژگی One Tap را فعال کرده باشد، نیازی به وارد کردن کتابخانه جداگانه ندارید.
در این سند، یاد خواهید گرفت که چگونه برنامه اندروید خود را برای پشتیبانی از ورود به حساب پیوندی تغییر دهید.
چگونه کار می کند
- در طول جریان ورود به سیستم با یک ضربه، نمایش حسابهای مرتبط را انتخاب میکنید.
- اگر کاربر در Google وارد شده باشد و حساب Google خود را با حساب خود در سرویس شما پیوند داده باشد، یک رمز شناسه برای حساب پیوند شده بازگردانده می شود.
- به کاربر یک درخواست ورود به سیستم با یک ضربه با گزینه ای برای ورود به سرویس شما با حساب مرتبط خود نشان داده می شود.
- اگر کاربر بخواهد با حساب پیوند شده ادامه دهد، رمز شناسه کاربر به برنامه شما برگردانده میشود. شما این را با توکنی که در مرحله 2 برای شناسایی کاربر وارد شده به سرور شما ارسال شده است مطابقت دهید.
راه اندازی
محیط توسعه خود را تنظیم کنید
جدیدترین خدمات Google Play را در میزبان توسعه خود دریافت کنید:
- Android SDK Manager را باز کنید.
در زیر ابزار SDK ، خدمات Google Play را پیدا کنید.
اگر وضعیت این بستهها نصب نشده است، هر دو را انتخاب کنید و روی Install Packages کلیک کنید.
برنامه خود را پیکربندی کنید
در فایل
build.gradle
در سطح پروژه خود، مخزن Maven Google را در هر دو بخشbuildscript
وallprojects
قرار دهید.buildscript { repositories { google() } } allprojects { repositories { google() } }
وابستگیهای API "Link with Google" را به فایل gradle سطح برنامه ماژول خود اضافه کنید، که معمولا
app/build.gradle
است:dependencies { implementation 'com.google.android.gms:play-services-auth:21.3.0' }
برنامه Android خود را تغییر دهید تا از ورود به حساب پیوندی پشتیبانی کند
در پایان جریان ورود به حساب پیوندی، یک رمز شناسه به برنامه شما برگردانده می شود. یکپارچگی رمز شناسه باید قبل از ورود کاربر تأیید شود.
نمونه کد زیر مراحل بازیابی، تأیید کد شناسه و متعاقباً ورود کاربر را شرح می دهد.
یک فعالیت برای دریافت نتیجه هدف ورود به سیستم ایجاد کنید
کاتلین
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") } });
درخواست ثبت نام را بسازید
کاتلین
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()
Sign-In Pending intent را اجرا کنید
کاتلین
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 استفاده کنید
استفاده از Java Google API Client Library روشی توصیه شده برای تایید اعتبار توکن های Google ID در محیط تولید است.
جاوا
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 یا Cloud را نشان میدهد، میتوانید با بررسی نام دامنه بازگردانده شده با روش Payload.getHostedDomain()
ادعای hd
را تأیید کنید.