Shopping عبر حِزم تطوير البرامج (SDK) لتفاعلات المستخدمين: تعليمات الدمج الفني التابعة لجهات خارجية

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

يتضمّن هذا الدليل تعليمات للشركاء المطوّرين لدمج محتوى التسوّق باستخدام حزمة تطوير البرامج (SDK) Engage لتعبئة كلّ من هذه المساحة الجديدة ومساحات Google الحالية، مثل "مساحة الترفيه".

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

المصطلحات

يتضمّن هذا الدمج أنواع المجموعات الخمسة التالية: الاقتراحات، المنتجات المميّزة، سلة التسوّق، قائمة التسوّق، إعادة الطلب و تتبُّع طلبات التسوّق.

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

    تتّبع الاقتراحات البنية التالية:

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

    • ShoppingEntity: كائن يمثل عنصرًا واحدًا في مجموعة.

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

  • تعرض مجموعة سلة التسوّق لمحة سريعة عن سلات التسوّق من العديد من الشركاء المطوّرين في مجموعة واحدة لواجهة المستخدم، ما يدفع المستخدمين إلى إكمال سلات التسوّق البارزة. هناك مجموعة واحدة من "سلة التسوّق" يتم عرضها بالقرب من أعلى واجهة المستخدم، مع موضع أولوية أعلى من كل مجموعات الاقتراحات. يُسمح لكل شريك مطوِّر ببث ما يصل إلى 3 حالات ShoppingCart في مجموعة سلة التسوّق.

    تتّبع سلة التسوّق البنية التالية:

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

    • ShoppingCart: عنصر يمثّل معاينة سلة التسوّق لشريك مطوّر واحد، ليتم عرضه في عناقيد ShoppingCart يجب أن يعرض الرمز ShoppingCart إجمالي عدد السلع في سلة التسوّق، وقد يتضمّن أيضًا صورًا لبعض السلع في سلة التسوّق الخاصة بالمستخدم.

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

  • تعرِض مجموعة إعادة الطلب نظرة سريعة على الطلبات السابقة من شركاء مطوّرين متعدّدين في مجموعة واحدة من واجهة المستخدم، ما يحثّ المستخدمين على إعادة الطلب. تتوفّر مجموعة واحدة من طلبات إعادة الترتيب.

    • يجب أن تعرض مجموعة إعادة الطلب إجمالي عدد السلع في طلب المستخدم السابق، ويجب أن تتضمّن أيضًا أحد العناصر التالية:

      • صور لسلع X في طلب المستخدم السابق
      • تصنيفات العناصر X بترتيب المستخدم السابق.
  • تعرض مجموعة تتبُّع طلبات التسوّق لمحة سريعة عن طلبات التسوّق التي لم تكتمل بعد أو التي اكتملت مؤخرًا من العديد من شركاء المطوّرين في مجموعة واحدة من مجموعات واجهة المستخدم، ما يتيح للمستخدمين تتبُّع طلباتهم.

    هناك مجموعة واحدة من ShoppingOrderTracking يتم عرضها بالقرب من أعلى واجهة المستخدم، مع موضع أولوية أعلى من جميع مجموعات Recommendation. يُسمح لكل شريك مطوّر ببث عناصر ShoppingOrderTrackingEntity متعددة في مجموعة تتبُّع طلبات Shopping.

    • تتّبع ShoppingOrderTrackingCluster البنية التالية:

      • مجموعة ShoppingOrderTracking: واجهة مستخدم تحتوي على مجموعة من معاينات تتبُّع الطلبات من العديد من شركاء المطوّرين
      • ShoppingOrderTrackingEntity: عنصر يمثّل معاينة تتبُّع طلب تسوّق لشريك مطوّر واحد، ليتم عرضها في عناقيد تتبُّع طلبات التسوّق. يجب أن يعرض ShoppingOrderTrackingEntity حالة الطلب ووقت الطلب. ننصحك بشدة بملء وقت التسليم المتوقّع لسمة ShoppingOrderTrackingEntity، لأنّه يتم عرضه للمستخدمين عند تقديمه.

العمل التمهيدي

الحد الأدنى لمستوى واجهة برمجة التطبيقات: 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.2'
}

لمزيد من المعلومات، يمكنك الاطّلاع على مستوى رؤية الحِزم في Android 11.

ملخّص

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

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

نوع المجموعة حدود المجموعات الحدود القصوى لعدد العناصر في مجموعة
مجموعات الاقتراحات 5 بحد أقصى 25 ShoppingEntity بحد أقصى
المجموعة المميزة 1 على الأكثر ShoppingEntity 10 كحدّ أقصى
مجموعة سلة التسوّق 1 بحد أقصى 3 ShoppingCart بحد أقصى

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

مجموعة قوائم التسوّق 1 بحد أقصى ShoppingListEntity واحد كحدّ أقصى
مجموعة إعادة ترتيب التسوّق 1 بحد أقصى ReorderEntity واحدة بحد أقصى
مجموعة تتبُّع طلبات التسوّق 3 بحد أقصى 3 ShoppingOrderTrackingEntity بحد أقصى

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

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

  1. ShoppingEntity
  2. ShoppingCart
  3. ShoppingList
  4. Reorder
  5. ShoppingOrderTracking

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

ShoppingEntity

يمثّل العنصر ShoppingEntity منتجًا أو عرضًا ترويجيًا أو صفقة أو اشتراكًا أو حدثًا يرغب شركاء المطوّرين في نشره.

ShoppingEntity
السمة المتطلب الوصف التنسيق
صور الملصقات مطلوب يجب تقديم صورة واحدة على الأقل. اطّلِع على مواصفات الصور للحصول على إرشادات.
معرّف الموارد المنتظم (URI) للإجراء مطلوب

الرابط لصفحة في التطبيق تعرض تفاصيل عن الكيان

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

معرّف موارد منتظم (URI)
العنوان اختياري اسم الكيان

حقل التعبئة النصّية الحرّة

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

السعر - الحالي مطلوبة بشروط

السعر الحالي للعنصر.

يجب تقديمها إذا تم تقديم سعر مشطوب.

حقل التعبئة النصّية الحرّة
السعر - مُمَحَّى اختياري السعر الأصلي للكيان، والذي يتم شطبه في واجهة المستخدِم حقل التعبئة النصّية الحرّة
وسيلة الشرح اختياري وسيلة شرح لعرض عرض ترويجي أو حدث أو تعديل على الكيان، إذا كان ذلك ممكنًا

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: أقل من 45 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا)

النص المكتوب بأحرف صغيرة في وسيلة الشرح اختياري النص المكتوب بخط دقيق لوسيلة الشرح

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: أقل من 45 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا)

التقييم (اختياري) - ملاحظة: يتم عرض كل التقييمات باستخدام نظام التقييم العادي بالنجوم.
التقييم - الحد الأقصى للقيمة اختياري

الحد الأقصى لقيمة مقياس التقييم

يجب تقديم هذه السمة إذا تم أيضًا توفير القيمة الحالية للتقييم.

عدد أكبر من أو يساوي 0.0
التقييم - القيمة الحالية اختياري

القيمة الحالية لمقياس التقييم

يجب تقديمه إذا تم أيضًا تقديم أقصى قيمة للتقييم.

عدد أكبر من أو يساوي 0.0
التقييم - العدد اختياري

تمثّل هذه السمة عدد تقييمات العنصر.

ملاحظة: قدِّم هذا الحقل إذا كان تطبيقك يتحكّم في طريقة عرض العدد للمستخدمين. استخدِم سلسلة موجزة. على سبيل المثال، إذا كان العدد 1,000,000، ننصحك باستخدام اختصار مثل 1M لكي لا يتم اقتطاع العدد على أحجام الشاشة الأصغر.

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

عدد تقييمات الكيان

ملاحظة: قدِّم هذا الحقل إذا لم تكن تتعامل بنفسك مع منطق الاختصار المعروض. إذا كانت كلّ من السمتَين "العدد" و"قيمة العدد" متوفرتين، يتم عرض السمة "العدد" للمستخدمين.

الصيغة الطويلة
DisplayTimeWindow (اختياري) - يمكنك ضبط فترة زمنية لعرض المحتوى على المساحة
الطابع الزمني للبدء اختياري

الطابع الزمني لبدء حساب الفترة الذي من المفترض أن يظهر المحتوى بعده على سطح الشاشة

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

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

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

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

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

ShoppingCart

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

الرابط لموضع معيّن الذي ينقل إلى سلة التسوّق في تطبيق الشريك.

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

معرّف موارد منتظم (URI)
عدد العناصر مطلوب

عدد السلع (وليس فقط عدد المنتجات) في سلّة التسوّق

على سبيل المثال: إذا كانت هناك 3 قمصان متطابقة وقبعة واحدة في سلة التسوّق، يجب أن يكون هذا الرقم 4.

عدد صحيح >= 1
نص الإجراء اختياري

نص عبارة الحث على اتخاذ إجراء للزر في "سلة التسوّق" (على سبيل المثال، حقيبة التسوّق)

إذا لم يقدّم المطوّر نص الإجراء، عرض سلة التسوّق هو الإجراء التلقائي.

تتوفّر هذه السمة في الإصدار 1.1.0 والإصدارات الأحدث.

سلسلة
العنوان اختياري

عنوان سلة التسوّق (مثلاً، حقيبة التسوّق)

إذا لم يقدّم المطوّر عنوانًا، يكون سلة التسوّق هو العنوان التلقائي.

إذا كان شريك المطوّر ينشر سلة تسوّق منفصلة لكل تاجر، يُرجى تضمين اسم التاجر في العنوان.

حقل التعبئة النصّية الحرّة

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

صور سلة التسوّق اختياري

صور لكل منتج في سلة التسوّق.

يمكن تقديم ما يصل إلى 10 صور بترتيب الأولوية، ويعتمد العدد الفعلي للصور المعروضة على شكل الجهاز.

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

قائمة تصنيفات السلع في قائمة التسوّق

يعتمد العدد الفعلي للتسميات المعروضة على شكل الجهاز.

قائمة تصنيفات النصوص الحرة

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

الطابع الزمني لآخر تفاعل للمستخدِم اختياري عدد المللي ثانية التي انقضت منذ بدء حساب الفترة الزمنية، ما يحدِّد المرة الأخيرة التي تفاعل فيها المستخدِم مع سلة التسوّق.

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

الطابع الزمني لحقبة Unix بالملي ثانية
DisplayTimeWindow (اختياري): يمكنك ضبط فترة زمنية لعرض المحتوى على سطح الصفحة
الطابع الزمني للبدء اختياري

الطابع الزمني لبدء حساب الفترة الذي من المفترض أن يظهر المحتوى بعده على سطح الشاشة

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

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

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

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

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

ShoppingList

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

الرابط لصفحة في تطبيق الشريك يؤدي إلى قائمة التسوّق

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

معرّف موارد منتظم (URI)
عدد العناصر مطلوبة عدد السلع في قائمة التسوّق عدد صحيح >= 1
العنوان اختياري

عنوان القائمة (على سبيل المثال، قائمة البقالة).

إذا لم يقدّم المطوّر عنوانًا، قائمة التسوّق هي العنوان التلقائي.

حقل التعبئة النصّية الحرّة

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

تصنيفات السلع مطلوبة

قائمة تصنيفات السلع في قائمة التسوّق

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

قائمة تصنيفات النصوص الحرة

حجم النص المقترَح: أقل من 20 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا)

ShoppingReorderCluster

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

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

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

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

نص عبارة الحث على اتخاذ إجراء للزرّ في إعادة الترتيب (على سبيل المثال، الطلب مرة أخرى).

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

تتوفّر هذه السمة في الإصدار 1.1.0 والإصدارات الأحدث.

سلسلة
عدد العناصر مطلوبة

عدد السلع (وليس فقط عدد المنتجات) بالترتيب السابق

على سبيل المثال: إذا كان هناك 3 فناجين قهوة صغيرة وكروissant واحد في الطلب السابق، يجب أن يكون هذا الرقم 4.

عدد صحيح >= 1
العنوان مطلوبة عنوان السلعة المطلوب إعادة طلبها.

حقل التعبئة النصّية الحرّة

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

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

اختياري

(يجب تقديم صور الملصقات في حال عدم توفّرها)

قائمة تصنيفات السلع للطلب السابق

يمكن تقديم ما يصل إلى 10 تصنيفات بترتيب الأولوية، ويعتمد العدد الفعلي للتصنيفات المعروضة على عامل شكل الجهاز .

قائمة النصوص الحرة

حجم النص المقترَح لكل تصنيف: أقل من 20 حرفًا (قد تظهر علامات الحذف إذا كان النص طويلاً جدًا)

صور الملصقات

اختياري

(يجب تقديم تصنيفات السلع في حال عدم توفّرها)

صور السلع في الطلب السابق

يمكن تقديم ما يصل إلى 10 صور بترتيب الأولوية، ويعتمد العدد الفعلي للصور المعروضة على شكل الجهاز.

اطّلِع على مواصفات الصور للحصول على إرشادات.

ShoppingOrderTrackingCluster

السمة المتطلب الوصف التنسيق
العنوان مطلوبة

عنوان مختصر للحزمة/العناصر التي يتم تتبُّعها أو رقم التتبُّع

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: 50 حرفًا (سيظهر علامات حذف في حال كان النص طويلاً جدًا)

نوع الطلب مطلوب

تمثّل هذه السمة عنوانًا قصيرًا للطرد/العناصر التي يتمّ تتبّعها أو رقم التتبّع.

قيم التعداد: IN_STORE_PICKUP وSAME_DAY_DELIVERY وMULTI_DAY_DELIVERY

الحالة مطلوب

الحالة الحالية للطلب

على سبيل المثال: "تأخّر الطلب"، "جارٍ النقل"، "تأخّر الطلب"، "تم الشحن"، "تم التسليم"، "غير متوفّر"، "الطلب جاهز"

حقل التعبئة النصّية الحرّة

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

وقت الطلب مطلوبة

الطابع الزمني للحقبة بالمللي ثانية التي تمّ فيها تقديم الطلب

سيتم عرض وقت الطلب إذا لم يكن هناك نافذة زمن التسليم المتوقّع

الطابع الزمني لحقبة Unix بالملي ثانية
معرّف الموارد المنتظم (URI) للإجراء مطلوبة

رابط لصفحة معيّنة في تطبيق الشريك يتيح تتبُّع الطلب

معرّف موارد منتظم (URI)
OrderDeliveryTimeWindow (اختيارية) - يمكنك ضبط مهلة للطلب الذي يتم تتبُّعه من وقت تقديمه إلى وقت التسليم المتوقّع/الحالي.
OrderdeliveryyTimeWindow - وقت البدء اختياري

الطابع الزمني لبدء الحقبة بالملي ثانية الذي سيتم فيه توصيل الطلب أو يصبح جاهزًا للاستلام

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

الطابع الزمني لبدء الحقبة بالملي ثانية الذي سيتم فيه توصيل الطلب أو يصبح جاهزًا للاستلام

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

صورة لسلعة أو منتجات واحدة تشكّل جزءًا من الطلب

نسبة العرض إلى الارتفاع المقترَحة هي 1:1

اطّلِع على مواصفات الصور للحصول على إرشادات.
عدد العناصر اختياري عدد السلع في الطلب. عدد صحيح >= 1
الوصف اختياري

فقرة واحدة من النص لوصف السلع في الطلب

ملاحظة: سيتم عرض إما قائمة الوصف أو الترجمة للمستخدم، وليس لكلتا الخدمتين.

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: 180 حرفًا

قائمة الترجمة اختياري

ما يصل إلى 3 ترجمات، مع كل عنوان فرعي يحتوي على سطر واحد من النص.

ملاحظة: سيتم إما عرض الوصف أو قائمة الترجمة والشرح للمستخدم، وليس كليهما.

حقل التعبئة النصّية الحرّة

حجم النص المقترَح لكل ترجمة: 50 حرفًا بحدٍ أقصى

قيمة طلب الشراء - السعر الحالي اختياري القيمة الحالية للطلب. حقل التعبئة النصّية الحرّة
رقم الطلب اختياري رقم/معرّف الطلب الذي يمكن استخدامه لتحديد الطلب بشكل فريد.

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: 25 حرفًا بحد أقصى

رقم التتبع اختياري رقم تتبُّع تسليم الطلب/الطرد في حال كان الطلب يتطلّب تسليمًا.

حقل التعبئة النصّية الحرّة

حجم النص المقترَح: 25 حرفًا كحد أقصى

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

في ما يلي المواصفات المطلوبة لمواد عرض الصور:

نسبة العرض إلى الارتفاع الحدّ الأدنى لعدد وحدات البكسل وحدات البكسل المقترَحة

مربّع (1x1)

الخيار المفضّل للمجموعات غير المميّزة

‫300 × 300 1200 × 1200

أفقية (1.91x1)

الإعداد المفضّل للمجموعات المميّزة

‫600 × 314 ‫1200×628
عمودي (4×5) ‫480×600 ‫960x1200

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

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

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

5,120 كيلوبايت

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

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

الخطوة 2: تقديم بيانات المجموعة

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

تتحمّل "AppEngageShoppingClient" مسؤولية نشر مجموعات التسوّق.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishShoppingCart
  • publishShoppingCarts
  • publishShoppingList
  • publishShoppingReorderCluster
  • publishShoppingOrderTrackingCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteShoppingCartCluster
  • deleteShoppingListCluster
  • deleteShoppingReorderCluster
  • deleteShoppingOrderTrackingCluster
  • 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 السمات التالية:

السمة المتطلب الوصف
قائمة ShoppingEntity مطلوبة قائمة بعناصر ShoppingEntity التي تشكّل الاقتراحات الخاصة بمجموعة الاقتراحات هذه
العنوان مطلوبة

عنوان مجموعة الاقتراحات

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

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

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

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

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

Kotlin

client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingCart

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

Kotlin

client.publishShoppingCart(
            PublishShoppingCartRequest.Builder()
                .setShoppingCart(
                    ShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingCart(
            new PublishShoppingCartRequest.Builder()
                .setShoppingCart(
                    new ShoppingCart.Builder()
                        ...
                        .build())
                .build())

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

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

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

publishShoppingCarts

تُستخدَم واجهة برمجة التطبيقات هذه لنشر عناصر ShoppingCart متعدّدة. وينطبق ذلك على شريك المطوّر الذي ينشر سلال تسوّق منفصلة لكل تاجر. أدرِج اسم التاجر في العنوان عند استخدام واجهة برمجة التطبيقات هذه.

Kotlin

client.publishShoppingCarts(
            PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    ShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingCarts(
            new PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    new ShoppingCart.Builder()
                        ...
                        .build())
                .build())

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

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

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

publishShoppingList

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

Kotlin

client.publishFoodShoppingList(
            PublishFoodShoppingListRequest.Builder()
                .setFoodShoppingList(
                    FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFoodShoppingList(
            new PublishFoodShoppingListRequest.Builder()
                .setFoodShoppingList(
                    new FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build());

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

  • تتم إزالة بيانات FoodShoppingList الحالية من حساب الشريك المطوّر.
  • يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف Shopping List Cluster المعدَّل.

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

publishShoppingReorderCluster

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

Kotlin

client.publishShoppingReorderCluster(
            PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingReorderCluster(
            new PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    new ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingOrderTrackingCluster

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

Kotlin

client.publishShoppingOrderTrackingCluster(
            PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishShoppingOrderTrackingCluster(
            new PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    new ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishUserAccountManagementRequest

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

البيانات الوصفية التالية هي جزء من بطاقة تسجيل الدخول:

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

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

صور بنسبة عرض إلى ارتفاع 16×9 بدرجة دقة 1264×712

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

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 الحالية من المطوِّر الشريك .
  • يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف تعريف clustered 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();

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

deleteShoppingCartCluster

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

Kotlin

client.deleteShoppingCartCluster()

Java

client.deleteShoppingCartCluster();

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

deleteShoppingListCluster

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

Kotlin

client.deleteShoppingListCluster()

Java

client.deleteShoppingListCluster();

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

deleteShoppingReorderCluster

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

Kotlin

client.deleteShoppingReorderCluster()

Java

client.deleteShoppingReorderCluster();

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

deleteShoppingOrderTrackingCluster

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

Kotlin

client.deleteShoppingOrderTrackingCluster()

Java

client.deleteShoppingOrderTrackingCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin

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

Java

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

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

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

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

Kotlin

client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

Java

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: معالجة نوايا البث

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

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

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

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

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
  // broadcast is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is
  // received
  // Trigger shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast
  // is received
  // Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
  // received
  // Trigger shopping order tracking cluster publish when
  // PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER 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))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_CART))

// Register Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_LIST))

// Register Reorder Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER))

// Register Shopping Order Tracking Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER))
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast is
// received

// Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast is
// received

// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received

// Trigger reorder cluster publish when PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER
// 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));

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

// Register Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_CART));

// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_LIST));

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

// Register Shopping Order Tracking Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER));

}
  • حدِّد التنفيذ بشكلٍ ثابت باستخدام علامة <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>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER" />
      </intent-filter>
   </receiver>
</application>

تُرسِل ال خدمةالطلبات التالية:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION يُنصح ببدء مكالمة publishRecommendationClusters عند تلقّي هذه النية.
  • com.google.android.engage.action.PUBLISH_FEATURED ننصح ببدء مكالمة publishFeaturedCluster عند تلقّي هذا الطلب.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_CART يُنصح ببدء مكالمة publishShoppingCart عند تلقّي هذا الغرض.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST ننصح ببدء مكالمة publishShoppingList عند تلقّي هذا الطلب.
  • com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER ننصح ببدء مكالمة publishReorderCluster عند تلقّي هذا الطلب.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER ننصح ببدء مكالمة publishShoppingOrderTrackingCluster عندتلقّي هذه النية.

سير عمل الدمج

للحصول على دليل مفصّل حول التحقّق من عملية الدمج بعد اكتمالها، يُرجى الاطّلاع على Engage developer integration workflow (سير عمل دمج المطوّرين).

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

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

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

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

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

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

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