Grow SDK Food: تعليمات الدمج الفني التابعة لجهات خارجية

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

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

تفاصيل الدمج

المصطلحات

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

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

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

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

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

      الشكل: مجموعة سلة تسوّق للطعام من شريك واحد (*UI for illustrative purposes only)
  • تعرض مجموعة قائمة التسوّق للطعام لمحة سريعة عن قوائم التسوّق للبقالة من شركاء مطوّرين متعدّدين في مجموعة واحدة لواجهة المستخدم، ما يحثّ المستخدمين على الرجوع إلى التطبيق المقابل لتعديل قوائمهم وإكمالها. تتوفّر عناقيد قائمة تسوّق طعام واحدة.

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

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

      • صور لعدد X من السلع في طلب المستخدم السابق
      • تصنيفات لـ X سلع في طلب المستخدم السابق
    الشكل: مجموعة طلبات إعادة شراء الطعام من شريك واحد (*واجهة المستخدم لأغراض التوضيح فقط)

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

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

ملخّص

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

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

نوع المجموعة حدود المجموعات الحد الأقصى لعدد العناصر في مجموعة
مجموعات الاقتراحات 5 بحد أقصى 25 عنصرًا بحد أقصى (ProductEntity أو RecipeEntity أو StoreEntity)
مجموعة مميّزة 1 بحد أقصى 10 عناصر كحد أقصى (ProductEntity أو RecipeEntity أو StoreEntity)
مجموعة سلة تسوّق الطعام 1 بحد أقصى ShoppingCartEntity واحدة بحد أقصى
مجموعة قائمة التسوّق للطعام 1 بحد أقصى ShoppingListEntity واحدة بحد أقصى
مجموعة إعادة طلب الطعام 1 بحد أقصى ReorderEntity واحدة بحد أقصى

الخطوة 1: تقديم بيانات العنصر

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

  1. ProductEntity
  2. StoreEntity
  3. RecipeEntity
  4. FoodShoppingCart
  5. FoodShoppingList
  6. FoodReorderCluster

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

ProductEntity

يمثّل عنصر ProductEntity سلعة فردية (مثل سلعة بقالة أو طبق من مطعم أو عرض ترويجي) يريد شركاء المطوّرين أن ينشروها.

الشكل : سمات ProductEntity

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

الرابط المؤدّي إلى الصفحة في التطبيق التي تعرض تفاصيل عن المنتج

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

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

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

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

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

السعر الحالي للمنتج.

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

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

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

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

أحكام العرض الخاصة بوسائل الشرح اختياري نص الأحكام الدقيقة لوسيلة الشرح

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

StoreEntity

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

الشكل : سمات StoreEntity

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

الرابط المؤدي إلى صفحة في التطبيق تعرض تفاصيل عن المتجر

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

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

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

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

الموقع الجغرافي اختياري الموقع الجغرافي للمتجر

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

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

وسيلة الشرح اختياري وسيلة شرح لعرض عرض ترويجي أو حدث أو تعديل للمتجر، إذا كان ذلك ممكنًا

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

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

أحكام العرض الخاصة بوسائل الشرح اختياري نص الأحكام الدقيقة لوسيلة الشرح

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

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

الوصف اختياري وصف للمتجر

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

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

الفئة اختياري

فئة المتجر، في سياق أماكن تناول الطعام، يمكن أن تكون المأكولات مثل "فرنسية" أو "أمريكية جديدة" أو "رامن" أو "مطعم فاخر".

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

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

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

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

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

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

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

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

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

عدد التقييمات للمتجر

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

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

عدد التقييمات للمتجر

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

الصيغة الطويلة

RecipeEntity

يمثّل عنصر RecipeEntity عنصر وصفة يريد شركاء المطوّرين نشره.

الشكل : سمات RecipeEntity

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

الرابط المؤدي إلى صفحة في التطبيق تعرض تفاصيل عن الوصفة

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

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

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

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

المؤلّف اختياري تمثّل هذه السمة مؤلف الوصفة.

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

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

وقت الطهي/التحضير اختياري مدة طهي الوصفة.

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

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

وسيلة الشرح اختياري نص توضيحي لعرض عرض ترويجي أو حدث أو تعديل على الوصفة، إذا كان ذلك متاحًا

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

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

الفئة اختياري فئة الوصفة

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

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

الوصف اختياري وصف الوصفة

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

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

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

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

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

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

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

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

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

عدد تقييمات الوصفة

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

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

عدد تقييمات الوصفة

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

الصيغة الطويلة

FoodShoppingCart

الشكل: سمات مجموعة "سلة التسوّق" للطعام

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

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

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

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

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

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

عدد صحيح >= 1
العنوان اختياري

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

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

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

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

نص الإجراء اختياري

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FoodShoppingList

الشكل: مجموعة "قائمة التسوّق للطعام"

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

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

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

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

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

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

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

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

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

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

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

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

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

FoodReorderCluster

الشكل: مجموعة إعادة طلب الطعام

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

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

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

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

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

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

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

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

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

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

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

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

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

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

اختياري

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

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

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

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

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

صور الملصقات

اختياري

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

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

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

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

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

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

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

مربّع (1×1)

مفضّل

‫300 × 300 1200 × 1200
أفقية (1.91x1) ‫600 × 314 ‫1200×628
عمودي (4×5) ‫480×600 ‫960x1200

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

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

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

5,120 كيلوبايت

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

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

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

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

تتحمّل شركة AppEngageFoodClient مسؤولية نشر مجموعات الطعام.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishFoodShoppingCart
  • publishFoodShoppingList
  • publishReorderCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteFoodShoppingCartCluster
  • deleteFoodShoppingListCluster
  • deleteReorderCluster
  • 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 السمات التالية:

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

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

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

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

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

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

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .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 الحالية من حساب شريك المطوّر.
  • يتم تحليل البيانات الواردة من الطلب وتخزينها في "مجموعة الإعلانات المميّزة" المعدّلة.

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

publishFoodShoppingCart

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

Kotlin

client.publishFoodShoppingCart(
            PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    FoodShoppingCart.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFoodShoppingCart(
            new PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    new FoodShoppingCart.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishFoodShoppingList

تُستخدَم واجهة برمجة التطبيقات هذه لنشر عنصر 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 المعدَّل.

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

publishReorderCluster

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

Kotlin

client.publishReorderCluster(
            PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    FoodReorderCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishReorderCluster(
            new PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    new FoodReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

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 == 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();

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

deleteFoodShoppingCartCluster

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

Kotlin

client.deleteFoodShoppingCartCluster()

Java

client.deleteFoodShoppingCartCluster();

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

deleteFoodShoppingListCluster

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

Kotlin

client.deleteFoodShoppingListCluster()

Java

client.deleteFoodShoppingListCluster();

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

deleteReorderCluster

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

Kotlin

client.deleteReorderCluster()

Java

client.deleteReorderCluster();

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

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

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

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

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

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(). يتيح ذلك التواصل من التطبيقات التي لا تزال نشطة في الذاكرة.
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_FOOD_SHOPPING_CART
// broadcast is received

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

// Trigger reorder cluster publish when PUBLISH_REORDER_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.food.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART));

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

// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.food.service.Intents.ACTION_PUBLISH_REORDER_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.food.PUBLISH_FOOD_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_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.food.PUBLISH_FOOD_SHOPPING_CART ننصح ببدء مكالمة publishFoodShoppingCart عند تلقّي هذه النية.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST ننصح ببدء مكالمة publishFoodShoppingList عند تلقّي هذه النية.
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER ننصح ببدء مكالمة publishReorderCluster عند تلقّي هذا الطلب.

سير عمل الدمج

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

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

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

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

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

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

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

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