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

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

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

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

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

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

  • يمكنك التحكُّم في المكان الذي يتم فيه الترويج لربط الحساب في تطبيقك المتوافق مع الأجهزة الجوّالة وبدئه، على سبيل المثال، في إعدادات المستخدم أو على الإعلانات البينية أو بعد تسجيل دخول المستخدم إلى تطبيقك المتوافق مع الأجهزة الجوّالة. وتؤدي إضافة نقاط إدخال متعددة لبدء ربط الحساب إلى تسهيل اكتشاف الحساب. ، ما يؤدي إلى زيادة التفاعل وعدد الحسابات المرتبطة.
  • في معدّل الإحالات الناجحة عندما يتمكّن المستخدمون من إكمال عملية الربط بعدد خطوات أقل من خطوات 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. أضِف الاعتماديات الخاصة بواجهة برمجة التطبيقات "الربط بحساب Google" إلى ملف Gradle على مستوى التطبيق الخاص بالوحدة، والذي يكون عادةً app/build.gradle:

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

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

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

  1. إنشاء PendingIntent يمكنه تشغيل نشاط الموافقة: يتم تشغيل الموافقة من خلال واجهة برمجة التطبيقات في "خدمات Play". عليك تقديم 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();
    
  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()
      }
    

    جافا

      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))
    

    جافا

      // 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