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

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

تفاصيل الدمج

المصطلحات

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

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

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

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

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

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

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

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

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

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

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

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

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

      الشكل 8. واجهة مستخدم تعرض أداة EventBookEntity واحدة ضمن مجموعة متابعة.
  • تعرض مجموعة التطبيقات المميّزة مجموعة من التطبيقات من عدة شركاء مطوّرين في مجموعة واحدة من واجهة المستخدم. سيكون هناك مجموعة واحدة "مميزة" واحدة تظهر بالقرب من أعلى واجهة المستخدم مع موضع ذي أولوية فوق كل مجموعات الاقتراحات. سيتم السماح لكل شريك مطوّر ببث ما يصل إلى 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'
}

ملخّص

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

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

نوع المجموعة حدود المجموعات الحد الأدنى لعدد العناصر في مجموعة الحد الأقصى لعدد العناصر في مجموعة
مجموعات الاقتراحات 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 حرفًا بحد أقصى

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

صورة صغيرة

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

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

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

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

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

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

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

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

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

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

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

PersonEntity

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

رابط لصفحة في التطبيق ينقل إلى الكيان

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

معرّف موارد منتظم (URI)
الملف الشخصي - الاسم مطلوبة اسم الملف الشخصي أو رقم تعريفه أو الاسم المعرِّف، مثل "سعد كمال" أو "‎@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

السمة المتطلب الوصف التنسيق
معرّف الموارد المنتظم (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 مطلوب بشكل مشروط

السعر الحالي للتذكرة أو البطاقة للحدث.

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

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

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

حجم النص المقترَح: أقل من 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

السمة المتطلب الوصف التنسيق
معرّف الموارد المنتظم (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 بكسل في الثانية في أعلى وأسفل الصورة.

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

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

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

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

اسم مقدّم الخدمة

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

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

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

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

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

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

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

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

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

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

ما يصل إلى 3 ترجمات مصاحبة، يكون كلّ منها سطرًا واحدًا من النص

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

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

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

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

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

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

عنوان الشارة

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

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

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

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

صورة صغيرة

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

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

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

السعر الحالي للتذكرة أو البطاقة للحدث.

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

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

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

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

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

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

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

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

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

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

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

عدد التقييمات للحدث

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

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

عدد التقييمات للحدث

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

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

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

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

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

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

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

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

مربّع (1×1)

المفضّل

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

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

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

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

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

5,120 كيلوبايت

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

  • المنطقة الآمنة للصور: ضَع المحتوى المهم في الوسط بحيث يشغل 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_AVERAGES_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 الحالية من حساب الشريك المطوّر.
  • يتم تحليل البيانات الواردة من الطلب وتخزينها في Recommendation Cluster المعدَّلة.

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

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

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

updatePublishStatus

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

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

في ما يلي قائمة برموز حالة النشر المؤهَّلة:

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

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

Kotlin

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

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

Kotlin

client.deleteRecommendationClusters()

Java

client.deleteRecommendationClusters();

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

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

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

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

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

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

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

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

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // 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 للحصول على الأسئلة الشائعة.

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

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

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

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

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