حزمة تطوير البرامج (SDK) لتفاعلات المستخدمين على الشبكات الاجتماعية: تعليمات الدمج الفني التابع لطرف ثالث

تصمم Google مساحة على الجهاز لتنظيم تطبيقات المستخدمين حسب الفئات وتقديم تجربة غامرة وجديدة تتيح لهم الاطّلاع على محتوى التطبيقات واستكشافه بطريقة مخصصة. وتوفّر تجربة ملء الشاشة هذه للشركاء المطوّرين فرصة لعرض أفضل محتوى وافٍ في قناة مخصّصة خارج تطبيقاتهم.

يحتوي هذا المستند على تعليمات لشركائنا من المطوّرين بدمج المحتوى الاجتماعي الخاص بهم باستخدام حزمة تطوير البرامج Engage SDK لتعبئة مساحة العرض الجديدة هذه.

تفاصيل عملية الدمج

يوضح القسم التالي تفاصيل الدمج.

المصطلحات

تعرض مجموعات الاقتراحات اقتراحات مخصّصة من شريك تطوير فردي.

تأخذ توصياتك البنية التالية:

مجموعة الاقتراحات: عرض واجهة مستخدم تحتوي على مجموعة من الاقتراحات من شريك المطوّر نفسه.

تتكون كل مجموعة توصيات من واحد من النوعين التاليين من الكيانات :

  • صورة بورتريه MediaEntity
  • SocialPostEntity

يجب أن يحتوي portraitMediaEntity على صورة عمودية واحدة للمشاركة. بيانات التعريف ذات الصلة بالملف الشخصي والتفاعل اختيارية.

  • المشاركة

    • الصورة في وضع "بورتريه" والطابع الزمني
    • الصورة في وضع "بورتريه" + محتوى النص والطابع الزمني
  • الملف الشخصي

    • الصورة الرمزية، أو الاسم أو الاسم المعرِّف، أو صورة إضافية
  • التفاعل

    • العدّ والتصنيف فقط، أو
    • العدد والعناصر المرئية (رمز)

يحتوي SocialPostEntity على بيانات وصفية ذات صلة بالملف الشخصي والمشاركات والتفاعل.

  • الملف الشخصي

    • الصورة الرمزية أو الاسم أو الاسم المعرِّف، أو نص إضافي، أو صورة إضافية
  • المشاركة

    • النص والطابع الزمني
    • الوسائط المتعددة التفاعلية (صورة أو عنوان URL منسق) وطابع زمني
    • النصوص والوسائط التفاعلية المتقدمة (صورة أو عنوان URL منسق) والطابع الزمني
  • التفاعلات

    • العدّ والتصنيف فقط، أو
    • العدد والعناصر المرئية (رمز)

ما قبل العمل

الحد الأدنى لمستوى واجهة برمجة التطبيقات: 19

إضافة مكتبة com.google.android.play:engage إلى تطبيقك:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.4.0'
}

ملخّص

ويعتمد التصميم على تنفيذ خدمة مرتبطة.

تخضع البيانات التي يمكن للعميل نشرها للحدود التالية لأنواع المجموعات المختلفة:

نوع المجموعة حدود المجموعة الحدود الدنيا لعدد العناصر في المجموعة الواحدة الحدود القصوى لعدد العناصر في المجموعة الواحدة
مجموعة أو مجموعات الاقتراحات 5 على الأكثر ما لا يقل عن 5 (PortraitMediaEntity أو SocialPostEntity) 25 كحد أقصى (PortraitMediaEntity أو SocialPostEntity)

الخطوة 1: تقديم بيانات الكيان

حدّدت حزمة SDK عناصر مختلفة لتمثيل كل نوع عنصر. تتوافق حزمة تطوير البرامج (SDK) مع الكيانات التالية للفئة الاجتماعية:

  1. PortraitMediaEntity
  2. SocialPostEntity

توضّح الرسوم البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.

PortraitMediaEntity

السمة المتطلب الوصف التنسيق
معرّف الموارد المنتظم (URI) للإجراء مطلوبة

رابط لصفحة معيّنة في تطبيق مقدّم الخدمة

ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق من أجل تحديد المصدر. يمكنك الرجوع إلى هذه الأسئلة الشائعة.

URI
البيانات الوصفية ذات الصلة بالمشاركة (مطلوبة)
صورة (صور) عنصر مطلوب

يجب أن تكون الصور بنسبة عرض إلى ارتفاع عمودية.

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

إذا كانت المشاركة عبارة عن فيديو، على موفّر الخدمة توفير صورة مصغّرة للفيديو لعرضها كصورة.

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
المحتوى النصي اختياري النص الأساسي للمشاركة أو التعديل أو غير ذلك سلسلة (يُفضَّل أن تكون 140 حرفًا بحدّ أقصى)
الطابع الزمني اختياري الوقت الذي تم فيه نشر المشاركة. الطابع الزمني للفترة بالمللي ثانية
البيانات الوصفية ذات الصلة بالملف الشخصي (اختياري)
الاسم عنصر مطلوب اسم الملف الشخصي أو المعرّف أو الاسم المعرِّف، مثل "John Doe" أو "@TeamPixel" سلسلة(يُنصح باستخدام 25 حرفًا كحدّ أقصى)
الصورة الرمزية عنصر مطلوب

صورة الملف الشخصي أو الصورة الرمزية للمستخدم

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
صورة إضافية اختياري

شارة الملف الشخصي، مثل شارة التحقق

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية)
العدد عنصر مطلوب حدد عدد التفاعلات، على سبيل المثال - "3.7 مليون". السلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد + التصنيف معًا)
التصنيف

اختياري

إذا لم يتم توفيرها، يجب تقديم عنصر مرئي.

وضّح الغرض من التفاعل. على سبيل المثال، "عدد المعجبين". السلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد + التصنيف معًا)
محتوى مرئي

اختياري

إذا لم يتم توفيره، يجب تقديم التصنيف.

وضّح الغرض من التفاعل. على سبيل المثال، صورة تعرض رمز الإعجاب والرموز التعبيرية

يمكنها تقديم أكثر من صورة واحدة، ولكن قد لا يتم عرض جميعها على جميع أشكال الأجهزة.

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
DisplayTimeWindow (اختيارية): ضبط فترة زمنية لعرض المحتوى على مساحة العرض
الطابع الزمني للبدء اختياري

الطابع الزمني للفترة التي يجب بعدها عرض المحتوى على مساحة العرض.

وفي حال تركها بدون ضبط، يكون المحتوى مؤهّلاً للظهور على سطح الفيديو.

الطابع الزمني للفترة بالمللي ثانية
الطابع الزمني للانتهاء اختياري

الطابع الزمني للفترة التي لن يظهر بعدها المحتوى على السطح.

وفي حال تركها بدون ضبط، يكون المحتوى مؤهّلاً للظهور على سطح الفيديو.

الطابع الزمني للفترة بالمللي ثانية

SocialPostEntity

السمة المتطلب الوصف التنسيق
معرّف الموارد المنتظم (URI) للإجراء مطلوبة

رابط لصفحة معيّنة في تطبيق مقدّم الخدمة

ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق من أجل تحديد المصدر. يمكنك الرجوع إلى هذه الأسئلة الشائعة.

URI

البيانات الوصفية ذات الصلة بالمشاركة (مطلوبة)

يجب إدخال محتوى نصي أو صورة أو محتوى ويب واحد على الأقل.

صورة (صور) اختياري

يجب أن تكون الصور بنسبة عرض إلى ارتفاع عمودية.

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

إذا كانت المشاركة عبارة عن فيديو، على موفّر الخدمة توفير صورة مصغّرة للفيديو لعرضها كصورة.

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
المحتوى النصي اختياري النص الأساسي للمشاركة أو التعديل أو غير ذلك سلسلة (يُفضَّل أن تكون 140 حرفًا بحدّ أقصى)
معاينة الرابط (اختياري)
معاينة الرابط - العنوان عنصر مطلوب نص للإشارة إلى عنوان محتوى صفحة الويب سلسلة
معاينة الرابط - اسم المضيف عنصر مطلوب نص للإشارة إلى مالك صفحة الويب، مثل "INSIDER" سلسلة
معاينة الرابط - صورة اختياري صورة رئيسية لمحتوى الويب يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
الطابع الزمني اختياري الوقت الذي تم فيه نشر المشاركة. الطابع الزمني للفترة بالمللي ثانية
البيانات الوصفية ذات الصلة بالملف الشخصي (اختياري)
الاسم عنصر مطلوب اسم أو معرّف الملف الشخصي، مثل "John Doe" أو "@TeamPixel" سلسلة(يُنصح باستخدام 25 حرفًا كحدّ أقصى)
نص إضافي اختياري

يمكن استخدامه كمعرّف أو اسم معرِّف أو بيانات وصفية إضافية للملف الشخصي.

على سبيل المثال، "@John-Doe" أو "5 مليون متابع" أو "قد تعجبك" أو "رائجة" أو "5 مشاركات جديدة"

سلسلة(يُنصح باستخدام 40 حرفًا كحدّ أقصى)
الصورة الرمزية عنصر مطلوب

صورة الملف الشخصي أو الصورة الرمزية للمستخدم

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
صورة إضافية اختياري

شارة الملف الشخصي، على سبيل المثال، شارة التحقق

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية)
العدد عنصر مطلوب حدد عدد التفاعلات، على سبيل المثال - "3.7 مليون". السلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد + التصنيف معًا)
التصنيف

اختياري

إذا لم يتم توفيرها، يجب تقديم عنصر مرئي.

وضّح الغرض من التفاعل. على سبيل المثال - "إبداءات الإعجاب". السلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد + التصنيف معًا)
محتوى مرئي

اختياري

إذا لم يتم توفيره، يجب تقديم التصنيف.

وضّح الغرض من التفاعل. على سبيل المثال، صورة تعرض رمز الإعجاب والرموز التعبيرية

يمكنها تقديم أكثر من صورة واحدة، ولكن قد لا يتم عرض جميعها على جميع أشكال الأجهزة.

صورة مربّعة بنسبة عرض إلى ارتفاع 1:1

يمكنك الاطّلاع على مواصفات الصور للحصول على إرشادات.
DisplayTimeWindow (اختيارية): ضبط فترة زمنية لعرض المحتوى على مساحة العرض
الطابع الزمني للبدء اختياري

الطابع الزمني للفترة التي يجب بعدها عرض المحتوى على مساحة العرض.

وفي حال تركها بدون ضبط، يكون المحتوى مؤهّلاً للظهور على سطح الفيديو.

الطابع الزمني للفترة بالمللي ثانية
الطابع الزمني للانتهاء اختياري

الطابع الزمني للفترة التي لن يظهر بعدها المحتوى على السطح.

وفي حال تركها بدون ضبط، يكون المحتوى مؤهّلاً للظهور على سطح الفيديو.

الطابع الزمني للفترة بالمللي ثانية

مواصفات الصور

يجب استضافة الصور على شبكات توصيل المحتوى (CDN) العامة لكي تتمكّن Google من الوصول إليها.

تنسيقات الملفات

PNG أو JPG أو GIF ثابت أو WebP

الحد الأقصى لحجم الملف

5120 كيلوبايت

اقتراحات إضافية

  • المساحة الآمنة للصور: ضَع المحتوى المهم في الوسط بحيث يشغل 80% من الصورة.
  • استخدِم خلفية شفافة حتى يمكن عرض الصورة بشكل صحيح في إعدادات المظهرَين الداكن والفاتح.

الخطوة 2: توفير بيانات المجموعة

ننصح بتنفيذ مهمة نشر المحتوى في الخلفية (على سبيل المثال، باستخدام WorkManager) وتحديد موعدها بشكل منتظم أو على أساس حدث (على سبيل المثال، في كل مرة يفتح فيها المستخدم التطبيق أو عندما يكون المستخدم قد تابع حسابًا جديدًا للتو).

يكون AppEngageSocialClient مسؤولاً عن نشر المجموعات الاجتماعية.

هناك واجهات برمجة التطبيقات التالية لنشر المجموعات في البرنامج:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

تُستخدم واجهة برمجة التطبيقات هذه للتحقق مما إذا كانت الخدمة متاحة للدمج وما إذا كان من الممكن عرض المحتوى على الجهاز.

Kotlin


client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java


client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

يتم استخدام واجهة برمجة التطبيقات هذه لنشر قائمة من عناصر RecommendationCluster.

قد يكون لكائن RecommendationCluster السمات التالية:

السمة المتطلب الوصف
قائمة SocialPostEntity أو portraitMediaEntity مطلوبة تمثّل هذه السمة قائمة بالكيانات التي تشكّل الاقتراحات لمجموعة الاقتراحات هذه. يجب أن تكون الكيانات في المجموعة العنقودية الواحدة من النوع نفسه.
العنوان مطلوبة

عنوان مجموعة الاقتراحات (على سبيل المثال، أحدث التعليقات من أصدقائك).

حجم النص المقترَح: أقل من 25 حرفًا (قد يعرض النص الطويل جدًا علامات حذف)

يوري أدنيش اختياري

الرابط لموضع معيّن يؤدي إلى صفحة في تطبيق الشريك حيث يمكن للمستخدمين الاطّلاع على القائمة الكاملة للاقتراحات.

ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق من أجل تحديد المصدر. يمكنك الرجوع إلى هذه الأسئلة الشائعة.

Kotlin


client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build())

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build());

عندما تتلقى الخدمة الطلب، يتم اتخاذ الإجراءات التالية ضمن معاملة واحدة:

  • تتم إزالة جميع بيانات مجموعة الاقتراحات الحالية.
  • يتم تحليل البيانات الواردة من الطلب وتخزينها في مجموعات الاقتراحات الجديدة.

وفي حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الحفاظ على الحالة الحالية.

publishUserAccountManagementRequest

تُستخدم واجهة برمجة التطبيقات هذه لنشر بطاقة تسجيل الدخول . يوجّه إجراء تسجيل الدخول المستخدمين إلى صفحة تسجيل الدخول في التطبيق حتى يتمكّن التطبيق من نشر المحتوى (أو تقديم محتوى مخصّص أكثر)

تشكّل البيانات الوصفية التالية جزءًا من بطاقة تسجيل الدخول -

السمة المتطلب الوصف
يوري أدنيش عنصر مطلوب رابط لموضع معيّن يؤدي إلى إجراء (أي الانتقال إلى صفحة تسجيل الدخول إلى التطبيق)
صورة اختياري: يجب تقديم العنوان في حال عدم تقديمه.

الصورة التي تظهر على البطاقة

صور بنسبة عرض إلى ارتفاع تبلغ 16x9 بدقة 1264x712

العنوان اختياري - إذا لم يتم توفير الصورة، يجب تقديم الصورة العنوان على البطاقة
نص الإجراء اختياري النص الذي يظهر في عبارة الحث على اتخاذ إجراء (أي تسجيل الدخول)
العنوان الفرعي اختياري عنوان فرعي اختياري على البطاقة

Kotlin


var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

عندما تتلقى الخدمة الطلب، يتم اتخاذ الإجراءات التالية ضمن معاملة واحدة:

  • تمت إزالة بيانات UserAccountManagementCluster الحالية من شريك المطوّرين.
  • ويتم تحليل البيانات من الطلب وتخزينها في مجموعة UserAccountManagementCluster المحدَّثة.

وفي حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الحفاظ على الحالة الحالية.

updatePublishStatus

إذا لم يتم نشر أي من المجموعات لأي سبب داخلي من الأسباب التجارية، ننصحك بشدة بتعديل حالة النشر باستخدام واجهة برمجة التطبيقات updatePublishStatus. وهذا أمر مهم للأسباب التالية :

  • إنّ تقديم الحالة في جميع السيناريوهات، حتى عند نشر المحتوى (الحالة == منشور) أمر بالغ الأهمية لتعبئة لوحات البيانات التي تستخدم هذه الحالة الفاضحة للتعبير عن سلامة عملية الدمج والمقاييس الأخرى.
  • إذا لم يتم نشر أي محتوى ولكن حالة الدمج غير معطّلة (STATUS == NOT_publishED)، يمكن أن تتجنّب Google تشغيل التنبيهات في لوحات بيانات حالة التطبيق. وهي تؤكّد عدم نشر المحتوى بسبب موقف متوقع من وجهة نظر مقدّم الخدمة.
  • تساعد هذه الميزة المطوّرين على تقديم إحصاءات حول الوقت الذي يتم فيه نشر البيانات أو عدم نشرها.
  • قد تستخدم Google رموز الحالة لتحفيز المستخدم على اتخاذ إجراءات معينة داخل التطبيق حتى يتمكن من رؤية محتوى التطبيق أو التغلب عليه.

قائمة رموز حالة النشر المؤهّلة هي :

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

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

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

تُستخدم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعات الاقتراحات.

Kotlin


client.deleteRecommendationClusters()

Java


client.deleteRecommendationClusters();

وعندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعات الاقتراحات. وفي حال حدوث خطأ، يتم رفض الطلب بالكامل مع الاحتفاظ بالحالة الحالية.

deleteUserManagementCluster

وتُستخدم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعة UserAccountManagement.

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

وعندما تتلقى الخدمة الطلب، تزيل البيانات الحالية من مجموعة UserAccountManagement. في حالة حدوث خطأ، يتم رفض الطلب بالكامل ويتم الاحتفاظ بالحالة الحالية.

deleteClusters

وتُستخدم واجهة برمجة التطبيقات هذه لحذف محتوى نوع مجموعة معين.

Kotlin


client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

Java


client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                ...
                .build());

وعندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من جميع المجموعات التي تتطابق مع أنواع المجموعات المحدّدة. يمكن للعملاء اختيار تمرير نوع واحد أو أكثر من المجموعات العنقودية. وفي حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الاحتفاظ بالحالة الحالية.

خطأ أثناء المعالجة

ويُنصح بشدة بالاستماع إلى نتيجة المهمة من واجهات برمجة التطبيقات للنشر، كي يمكن اتخاذ إجراء متابعة لاسترداد مهمة ناجحة وإعادة إرسالها.

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

يتم عرض الخطأ على أنّه AppEngageException مع تضمين السبب كرمز خطأ.

رمز الخطأ ملاحظة
SERVICE_NOT_FOUND لا تتوفر الخدمة على الجهاز المحدد.
SERVICE_NOT_AVAILABLE الخدمة متاحة على الجهاز المحدّد، ولكنّها غير متاحة في وقت المكالمة (على سبيل المثال، تكون غير مفعّلة بشكل صريح).
SERVICE_CALL_EXECUTION_FAILURE تعذّر تنفيذ المهمة بسبب مشاكل في سلاسل المحادثات. وفي هذه الحالة، يمكن إعادة المحاولة.
SERVICE_CALL_PERMISSION_DENIED غير مسموح للمتصل بإجراء مكالمة الخدمة.
SERVICE_CALL_INVALID_ARGUMENT يحتوي الطلب على بيانات غير صالحة (على سبيل المثال، أكثر من عدد المجموعات المسموح به).
SERVICE_CALL_INTERNAL هناك خطأ في جانب الخدمة.
SERVICE_CALL_RESOURCE_EXHAUSTED يتم الاتصال بالخدمة بشكل متكرر جدًا.

الخطوة 3: التعامل مع أهداف البث

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

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

يجب إعداد BroadcastReceiver بالطريقتَين التاليتَين:

  • تسجيل مثيل لفئة BroadcastReceiver ديناميكيًا باستخدام السمة Context.registerReceiver(). يتيح ذلك الاتصال من التطبيقات التي لا تزال موجودة في الذاكرة.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));

}

  • أعلِن بشكل ثابت عن عملية تنفيذ باستخدام علامة <receiver> في ملف AndroidManifest.xml الخاص بك. يتيح ذلك للتطبيق تلقّي أغراض البث عندما لا يكون قيد التشغيل، كما يسمح للتطبيق بنشر المحتوى.
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
   </receiver>
</application>

سترسل الخدمة النية التالية:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION يُنصح ببدء مكالمة publishRecommendationClusters عند تلقّي هذا الهدف.

سير عمل عملية الدمج

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

الأسئلة الشائعة

اطّلِع على الأسئلة الشائعة حول التفاعل مع حزمة تطوير البرامج (SDK) للحصول على الأسئلة الشائعة.

Contact

يُرجى التواصل معنا على engagement-developers@google.com إذا كانت لديك أي أسئلة خلال عملية الدمج. سيرد فريقنا في أقرب وقت ممكن.

الخطوات التالية

بعد إتمام عملية الدمج هذه، ستكون خطواتك التالية على النحو التالي:

  • أرسل رسالة إلكترونية إلى engagement-developers@google.com وإرفاق حزمة APK المدمجة والجاهزة للاختبار من Google.
  • تُجري Google عملية تحقق وتراجعها داخليًا للتأكد من أنّ عملية الدمج تعمل على النحو المتوقّع. وفي حال الحاجة إلى إجراء أي تغييرات، سيتواصل معك فريق Google لإطلاعك على أي تفاصيل ضرورية.
  • عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، تتواصل معك Google لإبلاغك بأنّه يمكنك بدء نشر حِزمة APK المعدّلة والمدمجة على متجر Play.
  • بعد أن تؤكّد Google نشر حزمة APK المُحدّثة على "متجر Play"، سيتم نشر الاقتراحات والمجموعات وستظهر للمستخدمين.