يستردّ برنامج تسجيل الدخول باستخدام ميزة "نقرة واحدة" رمزًا مميزًا لمعرّف Google عندما يختار المستخدم حساب Google. رمز التعريف هو تأكيد موقَّع لهوية المستخدم، ويحتوي أيضًا على معلومات الملف الشخصي الأساسية للمستخدم، وقد يتضمّن عنوان بريد إلكتروني تم التحقّق منه من قِبل Google.
عندما تتوفّر رموز التعريف المميّزة، يمكنك استخدامها للمصادقة بأمان مع الواجهة الخلفية لتطبيقك، أو لتسجيل المستخدم تلقائيًا في حساب جديد بدون الحاجة إلى إثبات ملكية عنوان البريد الإلكتروني للمستخدم.
لتسجيل دخول مستخدم أو تسجيله باستخدام رمز مميّز للرقم التعريفي، أرسِل الرمز المميّز إلى الواجهة الخلفية لتطبيقك. في الخلفية، تحقَّق من الرمز المميّز باستخدام مكتبة عملاء Google API أو مكتبة JWT للأغراض العامة. إذا لم يسبق للمستخدم تسجيل الدخول إلى تطبيقك باستخدام حساب Google هذا، أنشئ حسابًا جديدًا.
إذا اخترت استخدام رقم خاص للمساعدة في تجنُّب هجمات إعادة التشغيل، استخدِم getNonce لإرساله مع رمز التعريف المميّز إلى خادم الخلفية، وابحث عن القيمة المتوقّعة. ننصحك بشدة باستخدام رقم عشوائي لمرة واحدة لتحسين سلامة المستخدمين وأمانهم.
الحصول على رمز مميّز للمعرّف من عنصر بيانات الاعتماد
بعد استرداد بيانات اعتماد المستخدم، تحقَّق مما إذا كان عنصر بيانات الاعتماد يتضمّن رمز تعريف مميزًا. وإذا كان الأمر كذلك، أرسِلها إلى الخلفية.
Java
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();
if (idToken != null) {
// Got an ID token from Google. Use it to authenticate
// with your backend.
Log.d(TAG, "Got ID token.");
}
} catch (ApiException e) {
// ...
}
break;
}
}
}
Kotlin
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
when {
idToken != null -> {
// Got an ID token from Google. Use it to authenticate
// with your backend.
Log.d(TAG, "Got ID token.")
}
else -> {
// Shouldn't happen.
Log.d(TAG, "No ID token!")
}
}
} catch (e: ApiException) {
// ...
}
}
}
// ...
}