Engage SDK للصحة واللياقة: تعليمات الدمج الفني التابعة لجهات خارجية

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

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

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

المصطلحات

يتضمّن هذا الدمج ثلاثة أنواع من المجموعات: اقتراح ومميّز ومتابعة.

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

    • يمكن أن تتألف مجموعة الاقتراحات من ArticleEntity أو PersonEntity أو EventEntity، ولكن ليس من مزيج من أنواع الكيانات المختلفة.

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

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

    • العنصر: هو كائن يمثّل عنصرًا واحدًا في مجموعة. يوفّر هذا التكامل بعض الكيانات التي سيتم عرضها باستخدام "مجموعة الاقتراحات":

      • ArticleEntity: يمثّل ArticleEntity اقتراحًا لمحتوى مستند إلى نص ومرتبط بالصحة واللياقة البدنية. ويمكن استخدامها في المقالات ومشاركات المدونات والمحتوى التسويقي ومقتطفات الأخبار وما إلى ذلك.

        الشكل 1: واجهة مستخدم تعرض ArticleEntity واحدًا ضمن مجموعة "الاقتراحات".
      • PersonEntity: يمثّل PersonEntity شخصًا. قد تتضمّن الاقتراحات تسليط الضوء على مدرّب أو أي شخص مرتبط بالصحة واللياقة البدنية وما إلى ذلك.

        الشكل 2: واجهة مستخدم تعرض عنصر PersonEntity واحدًا ضمن مجموعة Recommendations.
      • EventEntity: يمثّل EventEntity حدثًا سيقع في المستقبل. وقت بدء الفعالية هو جزء مهم من المعلومات التي يجب نقلها إلى المستخدمين، ويمكن استخدام هذا العنصر لعرض فعاليات مثل حملة التبرّع بالدم أو الجلسات التدريبية أو دروس الرياضة أو اليوغا وما إلى ذلك، والتي تتعلّق بالصحة واللياقة البدنية.

        الشكل 3: واجهة مستخدم تعرض EventEntity واحدًا ضمن مجموعة الاقتراحات.
  • تعرض مجموعة المحتوى المقترَح المحتوى الذي تفاعل معه المستخدمون مؤخرًا من عدة شركاء مطوّرين في مجموعة واحدة ضمن واجهة المستخدم. سيُسمح لكل شريك مطوّر ببث 10 كيانات كحد أقصى في مجموعة Continuation.

    يمكن أن يتّخذ المحتوى الخاص بك البنية التالية:

    • ArticleEntity: يمثّل ArticleEntity اقتراحًا لمحتوى مستند إلى نص ومرتبط بالصحة واللياقة البدنية. يمكن استخدام هذا النوع لتمثيل المقالات الإخبارية غير المكتملة أو المحتوى الآخر الذي يريد المستخدم مواصلة قراءته من حيث توقّف. مثال: مقتطف من الأخبار أو مقتطف من مشاركة في مدونة حول مواضيع متعلقة بالصحة أو اللياقة البدنية

      الشكل 6. واجهة مستخدم تعرض ArticleEntity واحدًا ضمن مجموعة Continuation.
    • EventReservationEntity: يمثّل EventReservationEntity حجزًا لحدث ويساعد المستخدمين في تتبُّع حجوزات الأحداث القادمة أو الجارية المتعلّقة باللياقة البدنية والصحة. مثال: جلسات تدريب

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

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

      الشكل 12: واجهة مستخدم تعرض بطلًا واحدًا ضمن بطاقة GenericFeaturedEntity في مجموعة "مميّزة"

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

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

ملخّص

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

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

نوع المجموعة حدود المجموعات الحدود الدنيا للكيانات في المجموعة الحدّ الأقصى لعدد العناصر في مجموعة
مجموعات الاقتراحات 7 على الأكثر واحد على الأقل 50 على الأكثر (ArticleEntity أو PersonEntity أو EventEntity)
مجموعة المتابعة عملية واحدة بحد أقصى واحد على الأقل 20 على الأكثر (ArticleEntity أو EventReservationEntity)
المجموعة المميزة عملية واحدة بحد أقصى واحد على الأقل 20 على الأكثر (GenericFeaturedEntity)

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

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

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

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

GenericFeaturedEntity

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

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

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

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

سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9

ملاحظة: في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها.

راجِع مواصفات الصور للحصول على إرشادات.
العنوان اختياري تمثّل هذه السمة عنوان الكيان.

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

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

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

فقرة نصية واحدة لوصف العنصر

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

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

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

قائمة العناوين الفرعية اختياري

ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص

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

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

حجم النص المقترَح لكل عنوان فرعي: 50 حرفًا كحد أقصى

الشارات اختياري

تكون كل شارة إما نصًا حرًا (15 حرفًا كحد أقصى) أو صورة صغيرة.

معاملة خاصة لتجربة المستخدم في أعلى الصورة أو الفيديو، مثلاً كتراكب شارة على الصورة

  • "تحديث مباشر"
  • مدة قراءة المقالة
شارة - نص اختياري

عنوان الشارة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

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

شارة - صورة اختياري

صورة صغيرة

معاملة خاصة لتجربة المستخدم، مثلاً كشارة متراكبة على الصورة المصغّرة للفيديو أو الصورة

ملاحظة: يجب إدخال نص أو صورة للشارة.

راجِع مواصفات الصور للحصول على إرشادات.
فئات المحتوى اختياري تصف هذه السمة فئة المحتوى في العنصر.

قائمة عمليات التعداد

راجِع قسم فئة المحتوى للحصول على إرشادات.

ArticleEntity

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

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

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

معرّف موارد منتظم (URI)
العنوان مطلوبة تمثّل هذه السمة عنوان الكيان.

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

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

صور الملصقات اختياري

سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9

ملاحظة: يُنصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها.

راجِع مواصفات الصور للحصول على إرشادات.
المصدر - العنوان اختياري اسم المؤلف أو المؤسسة أو المراسل

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

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

المصدر - الصورة اختياري صورة للمصدر، مثل المؤلف أو المؤسسة أو المراسل راجِع مواصفات الصور للحصول على إرشادات.
الوصف اختياري

فقرة نصية واحدة لوصف العنصر

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

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

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

قائمة العناوين الفرعية اختياري

ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص

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

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

حجم النص المقترَح لكل عنوان فرعي: 50 حرفًا كحد أقصى

الشارات اختياري

تكون كل شارة إما نصًا حرًا (15 حرفًا كحد أقصى) أو صورة صغيرة.

معاملة خاصة لتجربة المستخدم في أعلى الصورة أو الفيديو، مثلاً كتراكب شارة على الصورة

  • "تحديث مباشر"
  • مدة قراءة المقالة
شارة - نص اختياري

عنوان الشارة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

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

شارة - صورة اختياري

صورة صغيرة

معاملة خاصة لتجربة المستخدم، مثلاً كشارة متراكبة على الصورة المصغّرة للفيديو أو الصورة

ملاحظة: يجب إدخال نص أو صورة للشارة.

راجِع مواصفات الصور للحصول على إرشادات.
وقت نشر المحتوى اختياري هذا هو الطابع الزمني للحقبة بالملي ثانية عند نشر المحتوى أو تعديله في التطبيق. الطابع الزمني لحقبة Unix بالملي ثانية
مدة التفاعل الأخيرة مطلوب بشكل مشروط

الطابع الزمني للحقبة بالمللي ثانية عندما تفاعل المستخدِم مع هذا العنصر آخر مرة.

ملاحظة: هذا الحقل مطلوب إذا كان هذا العنصر جزءًا من مجموعة استمرار.

الطابع الزمني لحقبة Unix بالملي ثانية
النسبة المئوية للتقدّم مطلوب بشكل مشروط

النسبة المئوية للمحتوى الكامل الذي استهلكه المستخدم حتى الآن.

ملاحظة: هذا الحقل مطلوب إذا كان هذا العنصر جزءًا من مجموعة استمرار.

قيمة عدد صحيح تتراوح بين 0 و100 ضِمنًا.
فئات المحتوى اختياري تصف هذه السمة فئة المحتوى في العنصر.

قائمة عمليات التعداد

راجِع قسم فئة المحتوى للحصول على إرشادات.

PersonEntity

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

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

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

معرّف موارد منتظم (URI)
الملف الشخصي - الاسم مطلوبة اسم الملف الشخصي أو معرّفه أو اسمه المعرِّف، مثل "John Doe" أو "@TeamPixel" أو غير ذلك

سلسلة

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

الملف الشخصي - صورة الأفاتار مطلوبة

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

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

راجِع مواصفات الصور للحصول على إرشادات.
الملف الشخصي - نص إضافي اختياري نص حر مثل اسم الملف الشخصي

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

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

الملف الشخصي - صورة إضافية اختياري صورة صغيرة، مثل شارة التحقّق راجِع مواصفات الصور للحصول على إرشادات.
صورة العنوان اختياري

سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9

ملاحظة: يُنصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها.

راجِع مواصفات الصور للحصول على إرشادات.
الرواج - العدد اختياري

أدخِل عدد المتابعين أو قيمة الرواج، مثلاً "3.7 مليون".

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

سلسلة

حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا

مدى الرواج - قيمة العدد اختياري

عدد المتابعين أو قيمة الشهرة

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

طويل
الرواج - التصنيف اختياري حدِّد تصنيف الرواج، مثلاً "الإعجابات".

سلسلة

حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا

الرواج - مرئي اختياري

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

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

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

راجِع مواصفات الصور للحصول على إرشادات.
التقييم - الحد الأقصى للقيمة مطلوب

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

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

عدد >= 0.0
التقييم - القيمة الحالية مطلوب

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

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

عدد >= 0.0
التقييم - العدد اختياري

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

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

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

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

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

طويل
الموقع الجغرافي - البلد اختياري البلد الذي يقيم فيه الشخص أو يخدم فيه

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

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

الموقع الجغرافي - المدينة اختياري المدينة التي يقيم فيها الشخص أو يعمل فيها

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

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

الموقع الجغرافي - عرض العنوان اختياري سيتم عرض العنوان الذي يقيم فيه الشخص أو الذي يعمل فيه للمستخدم.

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

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

الموقع الجغرافي - عنوان الشارع اختياري تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) الذي يقيم فيه الشخص أو يعمل فيه.

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

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

الموقع الجغرافي - الولاية اختياري تمثّل هذه السمة الولاية (إنْ وُجدت) التي يقيم فيها الشخص أو يخدم فيها.

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

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

الموقع الجغرافي - الرمز البريدي اختياري تمثّل هذه السمة الرمز البريدي (إن أمكن) للمكان الذي يقيم فيه الشخص أو يعمل فيه.

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

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

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

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

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

الشارات اختياري

تكون كل شارة إما نصًا حرًا (15 حرفًا كحد أقصى) أو صورة صغيرة.

شارة - نص اختياري

عنوان الشارة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

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

شارة - صورة اختياري

صورة صغيرة

معاملة خاصة لتجربة المستخدم، مثلاً كشارة متراكبة على الصورة المصغّرة للفيديو أو الصورة

ملاحظة: يجب إدخال نص أو صورة للشارة.

راجِع مواصفات الصور للحصول على إرشادات.
الوصف اختياري

فقرة نصية واحدة لوصف العنصر

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

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

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

قائمة العناوين الفرعية اختياري

ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص

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

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

حجم النص المقترَح لكل عنوان فرعي: 50 حرفًا كحد أقصى

فئات المحتوى اختياري تصف هذه السمة فئة المحتوى في العنصر.

قائمة التعدادات المؤهَّلة

  • ‫TYPE_HEALTH_AND_FITENESS (مثال: مدرّب يوغا/لياقة بدنية)
  • ‫TYPE_HOME_AND_AUTO (مثال: سبّاك)
  • ‫TYPE_SPORTS (مثال - لاعب)
  • TYPE_DATING

راجِع قسم فئة المحتوى للحصول على إرشادات.

EventEntity

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

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

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

معرّف موارد منتظم (URI)
العنوان مطلوبة تمثّل هذه السمة عنوان الكيان.

سلسلة

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

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

الطابع الزمني لوقت بدء الحدث المتوقّع.

ملاحظة:سيتم تمثيل ذلك بالملي ثانية.

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

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

قيم التعداد: VIRTUAL أو IN_PERSON أو HYBRID
صور الملصقات مطلوبة

سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9

ملاحظة: يُنصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها.

راجِع مواصفات الصور للحصول على إرشادات.
الموقع الجغرافي - البلد مطلوب بشكل مشروط

البلد الذي سيُقام فيه الحدث

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - المدينة مطلوب بشكل مشروط

المدينة التي تقام فيها الفعالية

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - عرض العنوان مطلوب بشكل مشروط

تمثّل هذه السمة عنوان المكان أو اسم الموقع الجغرافي الذي ستقام فيه الفعالية، ويجب عرضه للمستخدم.

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - عنوان الشارع اختياري تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) للموقع الجغرافي الذي تقام فيه الفعالية.

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

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

الموقع الجغرافي - الولاية اختياري تمثّل هذه السمة الولاية أو المقاطعة (إنْ وجدت) التي تستضيف الفعالية.

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

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

الموقع الجغرافي - الرمز البريدي اختياري تمثّل هذه السمة الرمز البريدي (إذا كان ذلك منطبقًا) للموقع الجغرافي الذي تقام فيه الفعالية.

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

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

الموقع الجغرافي - الحي اختياري تمثّل هذه السمة الحي الذي يتم فيه استضافة الفعالية (إن أمكن).

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

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

وقت الانتهاء اختياري

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

ملاحظة:سيتم تمثيل ذلك بالملي ثانية.

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

فقرة نصية واحدة لوصف العنصر

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

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

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

قائمة العناوين الفرعية اختياري

ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص

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

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

حجم النص المقترَح لكل عنوان فرعي: 50 حرفًا كحد أقصى

الشارات اختياري

تكون كل شارة إما نصًا حرًا (15 حرفًا كحد أقصى) أو صورة صغيرة.

شارة - نص اختياري

عنوان الشارة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

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

شارة - صورة اختياري

صورة صغيرة

معاملة خاصة لتجربة المستخدم، مثلاً كشارة متراكبة على الصورة المصغّرة للفيديو أو الصورة

ملاحظة: يجب إدخال نص أو صورة للشارة.

راجِع مواصفات الصور للحصول على إرشادات.
السعر - CurrentPrice مطلوب بشكل مشروط

تمثّل هذه السمة السعر الحالي للتذكرة أو بطاقة الدخول إلى الحدث.

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

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

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

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

فئات المحتوى اختياري تصف هذه السمة فئة المحتوى في العنصر.

قائمة التعدادات المؤهَّلة

  • ‫TYPE_MOVIES_AND_TV_SHOWS (مثال - سينما)
  • ‫TYPE_DIGITAL_GAMES (مثال: الرياضات الإلكترونية)
  • TYPE_MUSIC (مثال: حفلة موسيقية)
  • ‫TYPE_TRAVEL_AND_LOCAL (مثال: جولة، مهرجان)
  • ‫TYPE_HEALTH_AND_FITENESS (مثال: صف يوغا)
  • TYPE_EDUCATION (مثال - صف)
  • ‫TYPE_SPORTS (مثال: مباراة كرة قدم)
  • ‫TYPE_DATING (مثال: لقاء)

راجِع قسم فئة المحتوى للحصول على إرشادات.

EventReservationEntity

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

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

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

معرّف موارد منتظم (URI)
العنوان مطلوبة تمثّل هذه السمة عنوان الكيان.

سلسلة

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

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

الطابع الزمني لوقت بدء الحدث المتوقّع.

ملاحظة:سيتم تمثيل ذلك بالملي ثانية.

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

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

قيم التعداد: VIRTUAL أو IN_PERSON أو HYBRID
الموقع الجغرافي - البلد مطلوب بشكل مشروط

البلد الذي سيُقام فيه الحدث

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - المدينة مطلوب بشكل مشروط

المدينة التي تقام فيها الفعالية

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - عرض العنوان مطلوب بشكل مشروط

تمثّل هذه السمة عنوان المكان أو اسم الموقع الجغرافي الذي ستقام فيه الفعالية، ويجب عرضه للمستخدم.

ملاحظة: هذا الحقل مطلوب للأحداث التي تكون IN_PERSON أو HYBRID

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

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

الموقع الجغرافي - عنوان الشارع اختياري تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) للموقع الجغرافي الذي تقام فيه الفعالية.

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

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

الموقع الجغرافي - الولاية اختياري تمثّل هذه السمة الولاية أو المقاطعة (إنْ وجدت) التي تستضيف الفعالية.

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

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

الموقع الجغرافي - الرمز البريدي اختياري تمثّل هذه السمة الرمز البريدي (إذا كان ذلك منطبقًا) للموقع الجغرافي الذي تقام فيه الفعالية.

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

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

الموقع الجغرافي - الحي اختياري تمثّل هذه السمة الحي الذي يتم فيه استضافة الفعالية (إن أمكن).

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

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

صور الملصقات اختياري

سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9

ملاحظة: يُنصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها.

راجِع مواصفات الصور للحصول على إرشادات.
وقت الانتهاء اختياري

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

ملاحظة:سيتم تمثيل ذلك بالملي ثانية.

الطابع الزمني لحقبة Unix بالملي ثانية
مقدّم الخدمة - الاسم اختياري

تمثّل هذه السمة اسم مقدّم الخدمة.

ملاحظة:يجب توفير نص أو صورة لمقدّم الخدمة.

نص حر على سبيل المثال، اسم منظّم الحدث أو الجولة
مقدّم الخدمة - صورة اختياري

تمثّل هذه السمة شعار أو صورة مقدّم الخدمة.

ملاحظة:يجب توفير نص أو صورة لمقدّم الخدمة.

راجِع مواصفات الصور للحصول على إرشادات.
الوصف اختياري

فقرة نصية واحدة لوصف العنصر

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

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

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

قائمة العناوين الفرعية اختياري

ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص

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

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

حجم النص المقترَح لكل عنوان فرعي: 50 حرفًا كحد أقصى

الشارات اختياري

تكون كل شارة إما نصًا حرًا (15 حرفًا كحد أقصى) أو صورة صغيرة.

شارة - نص اختياري

عنوان الشارة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

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

شارة - صورة اختياري

صورة صغيرة

معاملة خاصة لتجربة المستخدم، مثلاً كشارة متراكبة على الصورة المصغّرة للفيديو أو الصورة

ملاحظة: يجب إدخال نص أو صورة للشارة.

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

تمثّل هذه السمة السعر الحالي للتذكرة أو بطاقة الدخول إلى الحدث.

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

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

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

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

التقييم - الحد الأقصى للقيمة اختياري

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

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

عدد >= 0.0
التقييم - القيمة الحالية اختياري

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

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

عدد >= 0.0
التقييم - العدد اختياري

تمثّل هذه السمة عدد التقييمات الخاصة بالحدث.

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

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

تمثّل هذه السمة عدد التقييمات الخاصة بالحدث.

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

طويل
فئات المحتوى اختياري تصف هذه السمة فئة المحتوى في العنصر.

قائمة التعدادات المؤهَّلة

  • ‫TYPE_MOVIES_AND_TV_SHOWS (مثال - سينما)
  • ‫TYPE_DIGITAL_GAMES (مثال: الرياضات الإلكترونية)
  • TYPE_MUSIC (مثال: حفلة موسيقية)
  • ‫TYPE_TRAVEL_AND_LOCAL (مثال: جولة، مهرجان)
  • ‫TYPE_HEALTH_AND_FITENESS (مثال: صف يوغا)
  • TYPE_EDUCATION (مثال - صف)
  • ‫TYPE_SPORTS (مثال: مباراة كرة قدم)
  • ‫TYPE_DATING (مثال: لقاء)

راجِع قسم فئة المحتوى للحصول على إرشادات.

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

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

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

مربّعة (1x1)

الشبكة المفضّلة

300x300 1200x1200
أفقية (1.91x1) 600x314 1200x628
عمودية (4x5) ‫480x600 960x1200

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

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

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

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

5120 كيلوبايت

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

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

فئة المحتوى

تتيح فئة المحتوى للتطبيقات نشر محتوى ينتمي إلى فئات متعددة. يتم ربط المحتوى ببعض الفئات المحدّدة مسبقًا، وهي:

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

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

إرشادات استخدام فئات المحتوى

  1. تكون بعض الكيانات، مثل ArticleEntity وGenericFeaturedEntity، مؤهَّلة لاستخدام أي من فئات المحتوى. بالنسبة إلى الكيانات الأخرى، مثل EventEntity وEventReservationEntity وPersonEntity، يتأهّل جزء فقط من هذه الفئات. راجِع قائمة الفئات المؤهَّلة لنوع كيان قبل ملء القائمة.
  2. استخدِم نوع الكيان المحدّد لبعض فئات المحتوى بدلاً من استخدام مجموعة من الكيانات العامة وContentCategory:

    • ‫TYPE_MOVIES_AND_TV_SHOWS: اطّلِع على الكيانات من دليل دمج "المشاهدة" قبل استخدام الكيانات العامة.
    • ‫TYPE_BOOKS: اطّلِع على EbookEntity قبل استخدام الكيانات العامة.
    • ‫TYPE_AUDIOBOOKS - اطّلِع على AudiobookEntity قبل استخدام الكيانات العامة.
    • ‫TYPE_SHOPPING - اطّلِع على ShoppingEntity قبل استخدام الكيانات العامة.
    • ‫TYPE_FOOD_AND_DRINK: اطّلِع على الكيانات من دليل دمج الطعام قبل استخدام الكيانات العامة.
  3. حقل ContentCategory اختياري ويجب تركه فارغًا إذا كان المحتوى لا ينتمي إلى أي من الفئات المذكورة سابقًا.

  4. في حال توفير فئات محتوى متعددة، يجب توفيرها بترتيب مدى صلتها بالمحتوى، مع وضع فئة المحتوى الأكثر صلة في بداية القائمة.

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

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

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

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • 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.

Kotlin

client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

Kotlin

client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java

client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

publishContinuationCluster

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

Kotlin

client.publishContinuationCluster(
    PublishContinuationClusterRequest.Builder()
      .setContinuationCluster(
        ContinuationCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

Java

client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

publishUserAccountManagementRequest

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

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

السمة المتطلب الوصف
Action 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();

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin

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

Java

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_CONTINUATION)
                .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: معالجة أغراض البث

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

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

يجب إعداد 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 continuation cluster publish when PUBLISH_CONTINUATION 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)

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

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
                           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

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION 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);

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
                         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>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </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.PUBLISH_CONTINUATION يُنصح ببدء مكالمة publishContinuationCluster عند تلقّي هذا الغرض.

سير عمل الدمج

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

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

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

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

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

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

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

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