يمكن إكمال ربط الحساب مباشرةً في تطبيقك المتوافق مع الأجهزة الجوّالة، ما يسمح للمستخدمين بربط حساباتهم على خدمتك بحسابهم على Google. ويمنح الرابط الذي تم إنشاؤه Google إمكانية الوصول إلى البيانات التي يوافق المستخدم على مشاركتها.
يحسّن هذا الأسلوب أداء ربط الحسابات من خلال جذب المستخدمين ضمن السياق المألوف لتطبيقك بدلاً من محادثة مع "مساعد Google". ويمكن دمجه في عملية إعداد المستخدمين والإعدادات ومساحات عرض التطبيقات الأخرى، ما يتيح فرصًا لاكتشاف "إجراء Google Assistant" والتفاعل معه. على سبيل المثال، بعد ربط الحساب، يمكنك أن تعرض على المستخدم الانتقال مباشرةً إلى "الإجراء".
تتضمَّن مزايا المستخدمين ما يلي:
- يمكن للمستخدمين بدء عملية ربط الحساب في تطبيقك وإكمالها، وهي بيئة يعرفونها جيدًا.
- لا يطلب المستخدمون بيانات اعتماد تسجيل الدخول لأنه تمت مصادقتها من قبل على الجهاز وفي تطبيقك المتوافق مع الأجهزة الجوَّالة.
تتضمن مزايا مطوّري البرامج ما يلي:
- يمكنك التحكُّم في المكان الذي يتم فيه الترويج لربط الحساب في تطبيقك المتوافق مع الأجهزة الجوّالة وبدئه، على سبيل المثال، في إعدادات المستخدم أو على الإعلانات البينية أو بعد تسجيل دخول المستخدم إلى تطبيقك المتوافق مع الأجهزة الجوّالة. وتؤدي إضافة نقاط إدخال متعددة لبدء ربط الحساب إلى تسهيل اكتشاف الحساب. ، ما يؤدي إلى زيادة التفاعل وعدد الحسابات المرتبطة.
- في معدّل الإحالات الناجحة عندما يتمكّن المستخدمون من إكمال عملية الربط بعدد خطوات أقل من خطوات OAuth العادية المستندة إلى الويب.
- يتطلّب تنفيذ الرابط من نظامك الأساسي (Android) جهدًا هندسيًا منخفضًا لأن هذه العملية تستفيد من تنفيذ OAuth2.0 الحالي، بافتراض أنك نفّذت واحدًا بالفعل.
- معدلات الانقطاع المخفَّضة نظرًا لعدم حاجة المستخدمين إلى إعادة إدخال بيانات اعتماد تسجيل الدخول والتمكن من إكمال العملية بخطوات أقل. يمكن أن تصل معدلات الانسحاب إلى 80% في التدفقات التي يُطلب فيها من المستخدمين إدخال بيانات اعتماد تسجيل الدخول وإدخالها.
آلية العمل
يتم إكمال عملية الربط من منصتك باتّباع الخطوات التالية:
- سينقر المستخدم على عامل تشغيل الربط أو يفعّله في تطبيقك المتوافق مع الأجهزة الجوّالة.
- يختار المستخدم حساب Google الذي يريد ربطه.
- يختار المستخدم حسابًا حاليًا على Google على الجهاز لربطه، أو يسجّل الدخول باستخدام حساب جديد
- تظهر للمستخدم شاشات طلب موافقة تستضيفها Google، وعليه الموافقة للمتابعة أو النقر على "إلغاء" لإيقاف عملية الربط.
- تظهر للمستخدم شاشة طلب الموافقة، وعليه الموافقة للمتابعة أو الإلغاء لإيقاف عملية الربط.
- يتم إنشاء الرابط بين حساب المستخدم على خدمتك وحسابه على Google.
الشكل 1: الربط من Platform Flow
المتطلبات
لتنفيذ Link من منصتك، تحتاج إلى ما يلي:
- تطبيق Android
- امتلاك خادم OAuth 2.0 وإدارته وصيانته، على أن يكون متوافقًا مع مسار رمز التفويض في OAuth 2.0
الإعداد
قبل المتابعة في الخطوات أدناه، يجب إكمال عملية التسجيل لربط الحساب.
إعداد بيئة التطوير
احصل على أحدث إصدار من "خدمات Google Play" على مضيف التطوير:
- افتح Android SDK Manager.
ضِمن أدوات حزمة تطوير البرامج (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:22.0.0' }
إضافة إمكانية الربط من منصتك
سيؤدي مسار "الربط من منصتك" إلى حفظ Google لرمز الدخول الذي توفّره خدمتك. يجب الحصول على الموافقة قبل إرجاع الرمز المميّز للمستخدم.
اتّبِع الخطوات التالية للحصول على موافقة المستخدم وعرض رمز مميّز لرمز المصادقة من خلال حزمة تطوير البرامج (SDK) لخدمات Google Play.
أنشئ PendingIntent يمكنه تشغيل نشاط الموافقة، ويتم تشغيل الموافقة من خلال واجهة برمجة التطبيقات Play Services API. يجب تقديم
PendingIntent(سيُشار إليه باسمconsentPendingIntentلمزيد من الوضوح) عند استدعاء واجهة برمجة التطبيقاتKotlin
// Build a PendingIntent that can launch the consent activity val consentPendingIntent = buildConsentPendingIntent()جافا
// 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() }جافا
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))جافا
// 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.