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

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

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

المصطلحات

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      الشكل 12: واجهة مستخدم تعرض بطاقة عنصر رئيسية واحدة عامة للكيانات المميزة ضمن مجموعة مميزة

المرحلة التمهيدية

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

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

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

الملخّص

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

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

نوع المجموعة حدود المجموعات الحد الأدنى لعدد العناصر في مجموعة الحدود القصوى لعدد العناصر في مجموعة
مجموعات الاقتراحات 5 على الأكثر 5 على الأقل 25 كحدّ أقصى (ArticleEntity أو PersonEntity أو EventEntity)
مجموعة المتابعة 1 على الأكثر 1 على الأقل 10 على الأكثر (ArticleEntity، أو EventReservationEntity)
المجموعة المميزة 1 على الأكثر 1 على الأقل 10 على الأكثر (GenericFeaturedEntity)

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

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

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

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

GenericFeaturedEntity

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

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

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

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

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

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

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

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

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

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

فقرة واحدة من النص لوصف الكيان.

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

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

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

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

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

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

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

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

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

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

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

  • على سبيل المثال: "نشر الخبر"
  • على سبيل المثال: مدة قراءة المقالة

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

عنوان الشارة

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

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

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

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

صورة صغيرة

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

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

راجِع مواصفات الصور للحصول على إرشادات.
فئات المحتوى اختياري قدِّم وصفًا لفئة المحتوى في العنصر.

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

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

ArticleEntity

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

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

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

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

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

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

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

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

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

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

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

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

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

فقرة واحدة من النص لوصف الكيان.

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

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

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

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

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

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

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

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

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

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

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

  • على سبيل المثال: "نشر الخبر"
  • على سبيل المثال: مدة قراءة المقالة

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

عنوان الشارة

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

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

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

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

صورة صغيرة

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

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

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

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

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

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

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

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

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

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

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

PersonEntity

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

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

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

معرّف موارد منتظم (URI)
الملف الشخصي - الاسم مطلوب اسم الملف الشخصي أو رقم تعريفه أو اسم معرِّفه، مثل "سامح رضا" أو "@TeamPixel" وما إلى ذلك

سلسلة

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

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

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

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

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

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

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

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

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

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

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

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

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

سلسلة

حجم النص المقترَح: 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 (على سبيل المثال، لاعب)
  • الكتابة

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

EventEntity

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

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

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

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

سلسلة

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

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

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

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

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

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

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

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

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

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

البلد الذي ستقام فيه الفعالية.

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

الموقع - العنوان المعروض مطلوب بشكل مشروط

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

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

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

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

فقرة واحدة من النص لوصف الكيان.

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

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

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

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

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

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

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

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

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

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

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

عنوان الشارة

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

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

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

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

صورة صغيرة

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

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

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

السعر الحالي للتذكرة/البطاقة الخاصة بالفعالية

يجب تقديمه في حال تقديم سعر مشطوب.

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

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

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

فئات المحتوى اختياري قدِّم وصفًا لفئة المحتوى في العنصر.

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

  • TYPE_AVERAGES_AND_TV_SHOWS (مثل السينما)
  • TYPE_DIGITAL_GAMES (مثل الرياضة الإلكترونية)
  • TYPE_MUSIC (مثل حفلة موسيقية)
  • TYPE_TRAVEL_AND_LOCAL (مثل جولة أو مهرجان)
  • TYPE_HEALTH_AND_FITENESS (مثل صف يوغا)
  • TYPE_EDUCATION (على سبيل المثال، الصف)
  • TYPE_SPORTS (مثل مباراة كرة قدم)
  • TYPE_DATED (على سبيل المثال، لقاء)

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

EventReservationEntity

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

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

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

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

سلسلة

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

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

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

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

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

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

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

البلد الذي ستقام فيه الفعالية.

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

الموقع - العنوان المعروض مطلوب بشكل مشروط

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

ملاحظة: يجب توفير هذه السمة للأحداث التي تكون IN_PERSON أو HYBRID.

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

حجم النص المقترَح: 20 حرفًا تقريبًا

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

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

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

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

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

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

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

اسم مُقدِّم الخدمة.

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

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

شعار/صورة مقدّم الخدمة

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

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

فقرة واحدة من النص لوصف الكيان.

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

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

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

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

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

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

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

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

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

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

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

عنوان الشارة

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

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

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

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

صورة صغيرة

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

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

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

السعر الحالي للتذكرة/البطاقة الخاصة بالفعالية

يجب تقديمه في حال تقديم سعر مشطوب.

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

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

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

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

تمثّل هذه السمة القيمة القصوى لمقياس التقييم.

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

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

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

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

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

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

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

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

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

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

الصيغة الطويلة
فئات المحتوى اختياري قدِّم وصفًا لفئة المحتوى في العنصر.

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

  • TYPE_AVERAGES_AND_TV_SHOWS (مثل السينما)
  • TYPE_DIGITAL_GAMES (مثل الرياضة الإلكترونية)
  • TYPE_MUSIC (مثل حفلة موسيقية)
  • TYPE_TRAVEL_AND_LOCAL (مثل جولة أو مهرجان)
  • TYPE_HEALTH_AND_FITENESS (مثل صف يوغا)
  • TYPE_EDUCATION (على سبيل المثال، الصف)
  • TYPE_SPORTS (مثل مباراة كرة قدم)
  • TYPE_DATED (على سبيل المثال، لقاء)

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

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

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

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

مربّع (1x1)

المفضّل

300 × 300 1200 × 1200
أفقي (1.91×1) 600 × 314 1200 × 628
العمودية (4×5) 480×600 960 × 1200

يجب استضافة الصور على شبكات توصيل محتوى (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 وEventBookEntity وPersonEntity، فقط مجموعة فرعية من هذه الفئات مؤهلة. تحقَّق من قائمة الفئات المؤهَّلة لنوع الكيان قبل تعبئة القائمة.
  2. استخدم نوع الكيان المحدد لبعض فئات المحتوى على مجموعة من الكيانات العامة وContentCategory:

    • TYPE_AVERAGES_AND_TV_SHOWS: يمكنك الاطّلاع على الكيانات من خلال مشاهدة دليل الدمج قبل استخدام العناصر العامة.
    • TYPE_BOOKS - يمكنك الاطلاع على EbookEntity قبل استخدام الكيانات العامة.
    • TYPE_AUDIOBOOKS - راجع AudiobookEntity قبل استخدام الكيانات العامة.
    • TYPE_SHOPPING - يُرجى مراجعة ShoppingEntity قبل استخدام الكيانات العامة.
    • TYPE_FOOD_AND_DRINK - يُرجى الاطّلاع على الكيانات من Food Integration guide قبل استخدام العناصر العامة.
  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 الحالية من الشريك المطوّر.
  • يتم تحليل البيانات من الطلب وتخزينها في مجموعة المتابعة المحدثة.

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

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 الحالية من الشريك المطوّر.
  • يتم تحليل البيانات من الطلب وتخزينها في المجموعة المحدّثة UserAccountManagementCluster.

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

updatePublishStatus

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

  • من المهم توفير الحالة في جميع السيناريوهات، حتى عند نشر المحتوى (الحالة == منشور)، لتعبئة لوحات البيانات التي تستخدم هذه الحالة الفاضحة لنقل البيانات الصحية وغيرها من المقاييس المتعلقة بعملية الدمج.
  • إذا لم يتم نشر أي محتوى ولكن لم يتم تعطُّل حالة الدمج (STATUS == NOT_HOSTED)، يمكن أن تتجنّب 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 API التي تحتوي على رمز الحالة NOT_MANAGEED_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

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

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 مع تضمين السبب كرمز خطأ.

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

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

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

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

يجب إعداد جهاز 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))

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

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

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

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

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

}
  • أعلن بشكل ثابت عن عملية تنفيذ باستخدام العلامة <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.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 SDK للتعرّف على الأسئلة الشائعة.

Contact

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

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

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

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