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

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

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

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

يعرض القسم التالي تفاصيل عملية الدمج.

المصطلحات

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

تتّخذ اقتراحاتك البنية التالية:

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

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

  • PortraitMediaEntity
  • SocialPostEntity

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

  • نشر

    • صورة في الوضع العمودي والطابع الزمني، أو
    • صورة في الوضع الرأسي + محتوى نصي وطابع زمني
  • الملف الشخصي

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

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

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

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

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

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

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

العمل التحضيري

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

أضِف مكتبة com.google.android.engage:engage-core إلى تطبيقك باتّباع الخطوات التالية:

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

ملخّص

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

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

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

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

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

  1. PortraitMediaEntity
  2. SocialPostEntity

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

PortraitMediaEntity

السمة المتطلب الوصف التنسيق
عنوان URI للإجراء مطلوبة لجميع المساحات الإعلانية باستثناء Google TV

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

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

URI
PlatformSpecificPlayback مطلوبة لمنصة Google TV

رابط عميق يؤدي إلى العنصر في تطبيق مقدّم الخدمة على منصات مثل Google TV والأجهزة الجوّالة

قائمة بكائنات PlatformSpecificPlayback
سبب الاقتراح اختياري سبب اقتراح المحتوى على المستخدم كائن RecommendationReason
ملخّص التعليقات اختياري ملخّص التعليقات على المشاركة سلسلة
البيانات الوصفية ذات الصلة بالمنشور (مطلوبة)
صورة (صور) مطلوب

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

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

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

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

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

الصورة المربّعة (1:1)

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

شارة الملف الشخصي، مثل شارة "تم التحقّق منه"

الصورة المربّعة (1:1)

للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور.
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية)
العدد اختياري

يجب الإشارة إلى عدد التفاعلات، على سبيل المثال "3.7 مليون".

ملاحظة: إذا تم توفير كلّ من "العدد" و"قيمة العدد"، سيتم استخدام "العدد".

ملاحظة: على الشركاء استخدام Count أو CountWithOptionalLabel.

سلسلة

CountWithOptionalLabel اختياري

أدرِج عدد التفاعلات مع تصنيف اختياري، مثل "3.7 مليون إعجاب".

ملاحظة: إذا تم توفير كلّ من CountWithOptionalLabel وCount Value، سيتم استخدام أحدهما.

ملاحظة: على الشركاء استخدام Count أو CountWithOptionalLabel.

سلسلة

قيمة العدد اختياري

عدد التفاعلات كقيمة.

ملاحظة: قدِّم قيمة Count Value بدلاً من Count إذا كان تطبيقك لا يتعامل مع منطق كيفية تحسين عدد كبير ليناسب أحجام العرض المختلفة. في حال توفير كل من Count وCount Value، يتم استخدام Count.

الصيغة الطويلة
التصنيف اختياري تحديد الغرض من تصنيف التفاعل على سبيل المثال، "الإعجابات".

سلسلة

إعدادات المرئيات اختياري

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

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

ملاحظة: يجب أن تكون الصورة مربّعة بنسبة 1:1

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

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

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

الطابع الزمني لحقبة Unix بالملي ثانية
الطابع الزمني للنهاية اختياري

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

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

الطابع الزمني لحقبة Unix بالملي ثانية

SocialPostEntity

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

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

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

URI
PlatformSpecificPlayback URIs مطلوبة لمنصة Google TV

رابط عميق يؤدي إلى العنصر في تطبيق مقدّم الخدمة على منصات مثل Google TV والأجهزة الجوّالة

قائمة بكائنات PlatformSpecificPlayback
سبب الاقتراح اختياري سبب اقتراح المحتوى على المستخدم كائن RecommendationReason
ملخّص التعليقات اختياري ملخّص التعليقات على المشاركة سلسلة

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

يجب توفير سمة واحدة على الأقل من TextContent أو Image أو WebContent

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

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

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

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

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

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

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

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

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

الصورة المربّعة (1:1)

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

شارة الملف التجاري، مثل شارة "تم التحقّق منه"

الصورة المربّعة (1:1)

للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور.
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية)
العدد مطلوب

أدخِل عدد التفاعلات، على سبيل المثال "3.7 مليون".

ملاحظة: على الشركاء استخدام Count أو CountWithOptionalLabel.

سلسلة
CountWithOptionalLabel مطلوب

أدرِج عدد التفاعلات مع تصنيف اختياري، مثل "3.7 مليون إعجاب".

ملاحظة: على الشركاء استخدام Count أو CountWithOptionalLabel.

سلسلة
التصنيف

اختياري

في حال عدم توفّرها، يجب توفير التمثيل المرئي.

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

اختياري

في حال عدم توفيرها، يجب توفير التصنيف.

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

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

الصورة المربّعة (1:1)

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

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

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

الطابع الزمني لحقبة Unix بالملي ثانية
الطابع الزمني للنهاية اختياري

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

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

الطابع الزمني لحقبة Unix بالملي ثانية

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

يجب استضافة الصور على شبكات توصيل محتوى (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 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا)

العنوان الفرعي اختياري العنوان الفرعي لمجموعة الاقتراحات
معرّف الموارد المنتظم (URI) للإجراء اختياري

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

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

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

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

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

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

الصورة المعروضة على البطاقة

صور بنسبة عرض إلى ارتفاع 16:9 وبدرجة دقة 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 == PUBLISHED)، وذلك لملء لوحات البيانات التي تستخدم هذه الحالة الواضحة لعرض حالة التكامل والمقاييس الأخرى.
  • إذا لم يتم نشر أي محتوى ولكن حالة الدمج لم تتوقف (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 مع تضمين السبب كرمز خطأ.

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

الخطوة 3: معالجة أغراض البث

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

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

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

  • تسجيل مثيل للفئة BroadcastReceiver بشكل ديناميكي باستخدام Context.registerReceiver() يتيح هذا الإذن التواصل من التطبيقات التي لا تزال نشطة في الذاكرة.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
  // broadcast is received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}

Java

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),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
}
  • عليك تعريف عملية التنفيذ بشكل ثابت باستخدام العلامة <receiver> في ملف AndroidManifest.xml. يسمح هذا الإذن للتطبيق بتلقّي نوايا البث حتى عندما لا يكون قيد التشغيل، كما يسمح للتطبيق بنشر المحتوى.

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      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 عند تلقّي هذه النية.

سير عمل الدمج

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

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

يمكنك الاطّلاع على الأسئلة الشائعة حول Engage SDK.

معلومات الاتصال

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

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

بعد إكمال عملية الربط هذه، إليك الخطوات التالية:

  • أرسِل رسالة إلكترونية إلى engage-developers@google.com وأرفِق بها حِزمة APK المدمَجة الجاهزة للاختبار من قِبل Google.
  • تُجري Google عملية تحقّق ومراجعات داخلية للتأكّد من أنّ عملية الدمج تعمل على النحو المتوقّع. إذا كانت هناك حاجة إلى إجراء تغييرات، ستتواصل معك Google لإعلامك بأي تفاصيل ضرورية.
  • عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، ستتواصل معك Google لإعلامك بأنّه يمكنك بدء نشر حزمة APK المعدَّلة والمدمجة على &quot;متجر Play&quot;.
  • بعد أن تؤكّد Google أنّه تم نشر حِزمة APK المعدَّلة على متجر Play، سيتم نشر الاقتراح والمجموعات وإتاحتها للمستخدمين.