يمكنك بدء ربط حسابات Google مباشرةً من المنصّة التي تستخدمها.

يمكن إكمال ربط الحساب مباشرةً في تطبيقك المتوافق مع الأجهزة الجوّالة، ما يسمح للمستخدمين بربط حساباتهم على خدمتك بحسابهم على Google. ويمنح الرابط الذي تم إنشاؤه Google إمكانية الوصول إلى البيانات التي يوافق المستخدم على مشاركتها.

ويعمل هذا النهج على تحسين أداء ربط الحسابات من خلال جذب المستخدمين ضمن السياق المعتاد لتطبيقك بدلاً من إجراء محادثة مع "مساعد Google". يمكن دمج هذه الواجهة في إعدادات المستخدم وإعداداته ومساحات العرض الأخرى للتطبيقات، ما يوفّر فرصًا لاكتشاف إجراءات "مساعد Google" والتفاعل معها. على سبيل المثال، بعد الربط، يمكنك أن تعرض توجيه المستخدم إلى الإجراء مباشرةً.

تتضمَّن مزايا المستخدمين ما يلي:

  • يمكن للمستخدمين بدء عملية ربط الحساب في تطبيقك وإكمالها، وهي بيئة يعرفونها جيدًا.
  • لا يطلب المستخدمون بيانات اعتماد تسجيل الدخول لأنه تمت مصادقتها من قبل على الجهاز وفي تطبيقك المتوافق مع الأجهزة الجوَّالة.

تتضمن مزايا مطوّري البرامج ما يلي:

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

آلية العمل

يتم إكمال عملية الربط من المنصّة في الخطوات التالية:

  1. سينقر المستخدم على مشغِّل الربط أو يفعِّله على تطبيق الأجهزة الجوّالة.
  2. يختار المستخدم حساب Google لربطه.
    1. اختيار المستخدم لحساب Google حالي على الجهاز لربطه أو تسجيل الدخول باستخدام حساب جديد
  3. تظهر للمستخدم شاشات طلب موافقة تستضيفها Google، وعليه الموافقة على المتابعة أو الإلغاء لإيقاف عملية الربط.
  4. تظهر شاشة طلب الموافقة للمستخدم، ويجب أن يوافق على المتابعة أو الإلغاء لإيقاف عملية الربط.
  5. يتم إنشاء الرابط بين حساب المستخدم وعلى خدمتك وحسابه على Google.

الشكل 1. الربط من مسار المنصة

المتطلّبات

لتنفيذ "الرابط" من منصتك، ستحتاج إلى ما يلي:

  • تطبيق Android
  • امتلاك خادم OAuth 2.0 وإدارته والمحافظة عليه يتوافق مع تدفق رمز التفويض في OAuth 2.0.

ضبط إعدادات الجهاز

قبل البدء باتّباع الخطوات أدناه، يجب أن تكون قد أكملت عملية التسجيل في ما يخص "ربط الحساب".

إعداد بيئة التطوير

احصل على أحدث "خدمات Google Play" على مضيف التطوير الذي تستخدمه:

  1. افتح مدير حزمة تطوير البرامج (SDK) لنظام التشغيل Android.
  1. ضمن أدوات SDK، ابحث عن خدمات Google Play.

  2. إذا لم تكن حالة هاتين الحزمتَين "مثبّتة"، اختَرهما معًا وانقر على تثبيت الحزم.

ضبط إعدادات تطبيقك

  1. في ملف build.gradle على مستوى المشروع، أدرِج مستودع Maven من Google في كل من القسمَين buildscript وallprojects.

    buildscript {
        repositories {
            google()
        }
    }
    
    allprojects {
        repositories {
            google()
        }
    }
    
  2. أضِف العناصر الاعتمادية لواجهة برمجة التطبيقات "Link with Google" إلى ملف Gradle على مستوى التطبيق في وحدتك، والذي يكون عادةً app/build.gradle:

    dependencies {
      implementation 'com.google.android.gms:play-services-auth:21.0.0'
    }
    

سيؤدي مسار "الرابط" من مسار المنصة إلى حفظ رمز دخول توفّره Google. يجب الحصول على الموافقة قبل عرض الرمز المميّز للمستخدم.

اتَّبِع الخطوات أدناه للحصول على موافقة من المستخدم وعرض رمز مميّز لرمز المصادقة من خلال "SDK لخدمات Google Play".

  1. إنشاء رمز PendingIntent يمكنه بدء نشاط الموافقة، علمًا بأنّه يتم إطلاق الموافقة بواسطة واجهة برمجة تطبيقات خدمات Play عليك تقديم السمة 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();
    
  2. إنشاء نشاط مطابق للتعامل مع نية الموافقة

    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() إذا قبل المستخدم موافقتك أو رفضها أو إلغاؤها على التوالي.

  3. أنشئ طلبًا لحفظ الرمز المميّز، وتمرير 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