يمكن إكمال ربط الحساب مباشرةً في تطبيقك المتوافق مع الأجهزة الجوّالة، ما يسمح للمستخدمين بربط حساباتهم على خدمتك بحسابهم على Google. ويمنح الرابط الذي تم إنشاؤه Google إمكانية الوصول إلى البيانات التي يوافق المستخدم على مشاركتها.
ويعمل هذا النهج على تحسين أداء ربط الحسابات من خلال جذب المستخدمين ضمن السياق المعتاد لتطبيقك بدلاً من إجراء محادثة مع "مساعد Google". يمكن دمج هذه الواجهة في إعدادات المستخدم وإعداداته ومساحات العرض الأخرى للتطبيقات، ما يوفّر فرصًا لاكتشاف إجراءات "مساعد Google" والتفاعل معها. على سبيل المثال، بعد الربط، يمكنك أن تعرض توجيه المستخدم إلى الإجراء مباشرةً.
تتضمَّن مزايا المستخدمين ما يلي:
- يمكن للمستخدمين بدء عملية ربط الحساب في تطبيقك وإكمالها، وهي بيئة يعرفونها جيدًا.
- لا يطلب المستخدمون بيانات اعتماد تسجيل الدخول لأنه تمت مصادقتها من قبل على الجهاز وفي تطبيقك المتوافق مع الأجهزة الجوَّالة.
تتضمن مزايا مطوّري البرامج ما يلي:
- يمكنك التحكُّم في المكان الذي يتم فيه الترويج لربط الحساب في تطبيقك المتوافق مع الأجهزة الجوّالة وبدئه، على سبيل المثال، في إعدادات المستخدم أو على الإعلانات البينية أو بعد تسجيل دخول المستخدم إلى تطبيقك المتوافق مع الأجهزة الجوّالة. وتؤدي إضافة نقاط إدخال متعددة لبدء ربط الحساب إلى تسهيل اكتشاف الحساب. ، ما يؤدي إلى زيادة التفاعل وعدد الحسابات المرتبطة.
- في معدّل الإحالات الناجحة عندما يتمكّن المستخدمون من إكمال عملية الربط بعدد خطوات أقل من خطوات OAuth العادية المستندة إلى الويب.
- يتطلّب تنفيذ الرابط من نظامك الأساسي (Android) جهدًا هندسيًا منخفضًا لأن هذه العملية تستفيد من تنفيذ OAuth2.0 الحالي، بافتراض أنك نفّذت واحدًا بالفعل.
- معدلات الانقطاع المخفَّضة نظرًا لعدم حاجة المستخدمين إلى إعادة إدخال بيانات اعتماد تسجيل الدخول والتمكن من إكمال العملية بخطوات أقل. يمكن أن تصل معدلات الانسحاب إلى 80% في التدفقات التي يُطلب فيها من المستخدمين إدخال بيانات اعتماد تسجيل الدخول وإدخالها.
آلية العمل
يتم إكمال الربط من منصتك باتّباع الخطوات التالية:
- سينقر المستخدم على عامل تشغيل الربط أو يبدِّله في تطبيقك المتوافق مع الأجهزة الجوّالة.
- يختار المستخدم حساب Google المطلوب ربطه.
- يختار المستخدم حسابًا حاليًا على Google على الجهاز ليتم ربطه، أو يسجّل الدخول باستخدام حساب جديد.
- تظهر للمستخدم شاشات طلب موافقة تستضيفها Google، وعليه الموافقة على المتابعة أو الإلغاء لإيقاف عملية الربط.
- تظهر شاشة طلب الموافقة للمستخدم، وعليه الموافقة على المتابعة أو الإلغاء لإيقاف عملية الربط.
- يتم إنشاء الرابط بين حساب المستخدم على خدمتك وحسابه على Google.

الشكل 1: الربط من مسار المنصة
المتطلبات
لتنفيذ ميزة "الربط" من منصتك، تحتاج إلى ما يلي:
- تطبيق Android
- امتلاك خادم OAuth 2.0 وإدارته وصيانتها، مع توافقه مع مسار رمز التفويض في OAuth 2.0
ضبط إعدادات الجهاز
قبل المتابعة مع الخطوات أدناه، يجب إكمال عملية التسجيل في ميزة "ربط الحساب".
إعداد بيئة التطوير
يمكنك الحصول على أحدث إصدار من "خدمات Google Play" على مضيف التطوير باتّباع الخطوات التالية:
ضمن أدوات حزمة تطوير البرامج (SDK)، ابحث عن خدمات Google Play.
إذا لم تكن حالة هذين الحِزم هي "مثبَّت"، اختَر الحِزمتَين وانقر على تثبيت الحِزم.
ضبط إعدادات تطبيقك
في ملف
build.gradle
على مستوى المشروع، أدرِج مستودع Maven من Google في كلّ من القسمَينbuildscript
وallprojects
.buildscript { repositories { google() } } allprojects { repositories { google() } }
أضِف التبعيات لواجهة برمجة التطبيقات "ربط حساب Google" إلى ملف Gradle على مستوى التطبيق الخاص بالوحدة، والذي يكون عادةً
app/build.gradle
:dependencies { implementation 'com.google.android.gms:play-services-auth:21.3.0' }
إضافة ميزة "الربط" من منصّتك
سيؤدي مسار "الربط من المنصة" إلى حفظ رمز دخول يوفّره تطبيقك من خلال Google. يجب الحصول على الموافقة قبل عرض الرمز المميّز للمستخدم.
اتّبِع الخطوات التالية للحصول على موافقة من المستخدم وعرض رمز مميّز لرمز المصادقة من خلال حزمة تطوير البرامج (SDK) لخدمة "خدمات Google Play".
أنشئ PendingIntent يمكنه تشغيل نشاط طلب الموافقة. يتم تشغيل طلب الموافقة من خلال واجهة برمجة التطبيقات Play Services API. سيكون عليك تقديم
PendingIntent
(يُشار إليه باسمconsentPendingIntent
للوضوح) عند استدعاء واجهة برمجة التطبيقات.Kotlin
// Build a PendingIntent that can launch the consent activity val consentPendingIntent = buildConsentPendingIntent()
Java
// Build a PendingIntent that can launch your consent activity PendingIntent consentPendingIntent = buildConsentPendingIntent();
أنشئ نشاطًا ملائمًا للتعامل مع نية الموافقة.
Kotlin
class ConsentActivity : AppCompatActivity private fun onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature // of the following call) val token = getToken() val intent = Intent() .putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token) setResult(Activity.RESULT_OK, intent) finish() } private fun onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED) finish() }
Java
public class ConsentActivity extends AppCompatActivity { ... private void onConsentAccepted() { // Obtain a token (for simplicity, we’ll ignore the async nature of // the following call String token = getToken(); Intent intent = new Intent(); intent.putExtra(SaveAccountLinkingTokenRequest.EXTRA_TOKEN, token); setResult(Activity.RESULT_OK, intent); finish(); } private void onConsentRejectedOrCanceled() { setResult(Activity.RESULT_CANCELED, null); finish(); } }
نفترض أنّه يتمّ استدعاء الطريقتَين
onConsentAccpeted()
وonConsentRejectedOrCanceled()
إذا قبل المستخدم موافقتك أو رفضها/ألغاها، على التوالي.أنشئ طلبًا لحفظ الرمز المميّز، وأدخِل
PendingIntent
الذي تم إنشاؤه في الخطوة 1 أعلاه، من بين مَعلمات الضبط الأخرى.Kotlin
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract val activityResultLauncher = registerForActivityResult( ActivityResultContracts.StartIntentSenderForResult()) { result -> if (result.resultCode == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } } // Build token save request val request = SaveAccountLinkingTokenRequest.builder() .setTokenType(SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build() // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { val pendingIntent = saveAccountLinkingTokenResult .getPendingIntent() val intentSenderRequest = IntentSenderRequest .Builder(pendingIntent).build() activityResultLauncher.launch(intentSenderRequest) } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, “Failed to save token”, e))
Java
// Create an ActivityResultLauncher which registers a callback for the // Activity result contract ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult(new ActivityResultContracts .StartIntentSenderForResult(), result -> { if (result.getResultCode() == RESULT_OK) { // Successfully finished the flow and saved the token } else { // Flow failed, for example the user may have canceled the flow } }); // Build token save request SaveAccountLinkingTokenRequest request = SaveAccountLinkingTokenRequest.builder() .setTokenType( SaveAccountLinkingTokenRequest.TOKEN_TYPE_AUTH_CODE) .setConsentPendingIntent(consentPendingIntent) .setServiceId("service-id-of-and-defined-by-developer") //Set the scopes that the token is valid for on your platform .setScopes(scopes) .build(); // Launch consent activity and retrieve token Identity.getCredentialSavingClient(this) .saveAccountLinkingToken(request) .addOnSuccessListener( saveAccountLinkingTokenResult -> { if (saveAccountLinkingTokenResult.hasResolution()) { // Launch the resolution intent PendingIntent pendingIntent = saveAccountLinkingTokenResult.getPendingIntent(); IntentSenderRequest intentSenderRequest = new IntentSenderRequest.Builder(pendingIntent).build(); activityResultLauncher.launch(intentSenderRequest); } else { // This should not happen, let’s log this Log.e(TAG, "Failed to save token"); } }) .addOnFailureListener(e -> Log.e(TAG, "Failed to save token", e)); ```
تطلب الخطوات أعلاه من المستخدم الموافقة وتُرسل رمز التفويض إلى Google.
أفضل الممارسات
يجب أن يشير تطبيقك إلى حالة الرابط للمستخدم من خلال زر أو زر تبديل أو عنصر مرئي مشابه.
الشكل 1: نموذج صورة حالة الرابط
يجب إعلام المستخدم بعد إجراء ربط ناجح، مثلاً من خلال عرض إشعار عابر أو تنشيط تغيير حالة التبديل أو إعادة توجيه المستخدم إلى صفحة إحالة ناجحة منفصلة للرابط.
ننصحك بمطالبة المستخدمين داخل التطبيق بربط الحسابات، ويُفضَّل أن يكون ذلك استنادًا إلى إشارات قوية تشير إلى أنّ الربط سيفيد هؤلاء المستخدمين.
بعد الربط بنجاح، يجب أن تقدّم للمستخدمين مثالاً على ما يمكنهم فعله بالحساب المرتبط، مثلاً إذا ربطت للتو خدمة بث موسيقى، اطلب من "مساعد Google" تشغيل الموسيقى.
يمكنك السماح للمستخدمين بإدارة حساباتهم المرتبطة، بما في ذلك خيار إلغاء ربطها. وجِّه المستخدم إلى صفحة إدارة "الحسابات المرتبطة" في Google، وهي https://myaccount.google.com/accountlinking.
مراجع
مستندات مرجع واجهة برمجة التطبيقات لنظام المصادقة في Android