زيادة التفاعل مع التطبيق من خلال الوصول إلى المستخدمين في الأماكن التي يتواجدون فيها يمكنك ربط تطبيقك بحزمة Engage SDK لعرض اقتراحات مخصّصة ومحتوى يمكن للمستخدمين مواصلته مباشرةً على مساحات عرض متعددة على الجهاز فقط، مثل المجموعات ومساحة الترفيه و"متجر Google Play". تضيف عملية الدمج أقل من 50 كيلوبايت (مضغوطة) إلى متوسط حجم حزمة APK، وتستغرق معظم التطبيقات حوالي أسبوع من وقت المطوّر. يمكنك الاطّلاع على مزيد من المعلومات على الموقع الإلكتروني الخاص بالأنشطة التجارية.
يحتوي هذا الدليل على تعليمات لشركاء المطوّرين من أجل عرض محتوى الصحة واللياقة البدنية على منصات Engage.
الفئات ومساحات العرض المتوافقة
تستند أهلية مساحة العرض في حزمة Engage SDK إلى فئة محتوى تطبيقك. استخدِم الجدول التالي لتحديد أهليتك للاستفادة من مساحات عرض معيّنة:
| الحالة | فئة المحتوى أو حالة الاستخدام | مساحات العرض المتوافقة |
|---|---|---|
|
متاحة (مؤهَّلة للظهور على جميع مساحات العرض) |
|
|
| غير متاح |
|
مهارات Android
عرض على GitHubدمج حزمة Engage SDK
android skills add engage-sdk-integrationتفاصيل عملية الدمج
المصطلحات
يتضمّن هذا الدمج ثلاثة أنواع من المجموعات: الاقتراحات والمحتوى المميّز والمتابعة.
تعرض مجموعات الاقتراحات اقتراحات مخصّصة للصحة واللياقة البدنية من أحد شركاء المطوّرين. يمكن أن تكون هذه الاقتراحات مخصّصة للمستخدم أو عامة (على سبيل المثال، اللياقة البدنية والصحة الرائجة). استخدِم هذه الفئات لعرض مقالات أو أشخاص مرتبطين بالصحة واللياقة البدنية.
- يمكن أن تتألف مجموعة الاقتراحات من
ArticleEntityأوPersonEntityأوEventEntity، ولكن ليس من مزيج من أنواع العناصر المختلفة.
تتّبع اقتراحاتك البنية التالية:
مجموعة الاقتراحات: هي طريقة عرض في واجهة المستخدم تتضمّن مجموعة من الاقتراحات من شريك المطوّر نفسه.
الكيان: هو عنصر يمثّل عنصرًا واحدًا في مجموعة. يوفّر هذا التكامل بعض الكيانات التي سيتم عرضها باستخدام مجموعة الاقتراحات:
ArticleEntity: يمثّل ArticleEntity اقتراحًا لمحتوى مستند إلى نص ومرتبط بالصحة واللياقة البدنية. ويمكن استخدامه للمقالات ومشاركات المدونات والمحتوى التسويقي ومقتطفات الأخبار وما إلى ذلك.
الشكل 1: واجهة مستخدم تعرض ArticleEntity واحدة ضمن مجموعة "الاقتراحات". PersonEntity: يمثّل PersonEntity شخصًا. قد تتضمّن الاقتراحات تسليط الضوء على مدرب أو أي شخص مرتبط بالصحة واللياقة البدنية وما إلى ذلك.
الشكل 2: واجهة مستخدم تعرض عنصر PersonEntity واحدًا ضمن مجموعة الاقتراحات. EventEntity: يمثّل EventEntity حدثًا سيقع في المستقبل. وقت بدء الحدث هو جزء مهم من المعلومات التي يجب نقلها إلى المستخدمين. ويمكن استخدام هذا العنصر لعرض أحداث مثل معسكر التبرّع بالدم أو الجلسات التدريبية أو دروس الصالة الرياضية أو اليوغا وما إلى ذلك، والتي تتعلّق بالصحة واللياقة البدنية.
الشكل 3: واجهة مستخدم تعرض EventEntity واحدًا ضمن مجموعة "الاقتراحات".
- يمكن أن تتألف مجموعة الاقتراحات من
تعرض حزمة المحتوى المقترَح المحتوى الذي تفاعل معه المستخدمون مؤخرًا من عدة شركاء مطوّرين في مجموعة واحدة ضمن واجهة المستخدم. سيُسمح لكل شريك مطوّر ببث 10 عناصر كحد أقصى في مجموعة "المحتوى المتسلسل".
يمكن أن يتّخذ المحتوى الخاص بك الذي يقدّم معلومات إضافية البنية التالية:
ArticleEntity: يمثّل ArticleEntity اقتراحًا لمحتوى مستند إلى نص ومرتبط بالصحة واللياقة البدنية. يمكن استخدام هذا النوع من الكيانات لتمثيل المقالات الإخبارية غير المكتملة أو المحتوى الآخر الذي يريد المستخدم مواصلة استهلاكه من حيث توقّف. مثال: مقتطف من خبر أو مقتطف من منشور مدونة حول مواضيع متعلقة بالصحة أو اللياقة البدنية
الشكل 6. واجهة مستخدم تعرض ArticleEntity واحدًا ضمن مجموعة Continuation. EventReservationEntity: يمثّل هذا النوع من الكيانات حجزًا لفعالية، ويساعد المستخدمين في تتبُّع حجوزات الفعاليات القادمة أو الجارية المتعلّقة باللياقة البدنية والصحة. مثال: جلسات التدريب
الشكل 8. واجهة مستخدم تعرض عنصر EventReservationEntity واحدًا ضمن مجموعة استمرار.
تعرض المجموعة المميّزة مجموعة من الكيانات من عدة شركاء مطوّرين في مجموعة واحدة ضمن واجهة المستخدم. سيكون هناك مجموعة واحدة من "المحتوى المقترَح"، وسيتم عرضها بالقرب من أعلى واجهة المستخدم مع موضع ذي أولوية أعلى من جميع مجموعات "المحتوى المقترَح". سيُسمح لكل شريك مطوِّر ببث ما يصل إلى 10 عناصر في المجموعة المميزة.
GenericFeaturedEntity: يختلف GenericFeaturedEntity عن عنصر الاقتراح في أنّه يجب استخدام العنصر المميّز لعرض محتوى واحد من أهم المحتويات التي يقدّمها المطوّرون، ويجب أن يمثّل المحتوى الأكثر أهمية الذي سيكون مثيرًا لاهتمام المستخدمين ومناسبًا لهم.
الشكل 12: واجهة مستخدم تعرض بطلًا واحدًا بطاقة GenericFeaturedEntity ضمن مجموعة Featured
العمل التحضيري
الحد الأدنى لمستوى واجهة برمجة التطبيقات: 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.6.0'
}
ملخّص
يعتمد التصميم على تنفيذ خدمة مرتبطة.
تخضع البيانات التي يمكن للعميل نشرها للحدود التالية لأنواع المجموعات المختلفة:
| نوع المجموعة | حدود المجموعات | الحدّ الأدنى لعدد العناصر في المجموعة | الحدّ الأقصى لعدد الكيانات في مجموعة |
|---|---|---|---|
| مجموعات الاقتراحات | 7 على الأكثر | واحد على الأقل | 50 على الأكثر (ArticleEntity أو PersonEntity أو EventEntity) |
| مجموعة المتابعة | شعار واحد كحدّ أقصى | واحد على الأقل | 20 على الأكثر (ArticleEntity أو EventReservationEntity) |
| المجموعة المميزة | شعار واحد كحدّ أقصى | واحد على الأقل | 20 على الأكثر (GenericFeaturedEntity) |
الخطوة 1: تقديم بيانات المؤسسة
حدّدت حزمة تطوير البرامج (SDK) عناصر مختلفة لتمثيل كل نوع من أنواع العناصر. نسمح باستخدام الكيانات التالية لفئة "الصحة واللياقة البدنية":
GenericFeaturedEntityArticleEntityPersonEntityEventEntityEventReservationEntity
توضّح الرسومات البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.
GenericFeaturedEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| Action Uri | مطلوب |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| صور الملصقات | مطلوب | سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في أعلى الصورة وأسفلها. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| العنوان | اختياري | تمثّل هذه السمة عنوان الجهة. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 50 حرفًا |
| الوصف | اختياري | فقرة نصية واحدة لوصف العنصر ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة العناوين الفرعية | اختياري | ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة وشرح: 50 حرفًا كحد أقصى |
| الشارات | اختياري | تتألف كل شارة إما من نص حر (15 حرفًا كحد أقصى) أو صورة صغيرة. معاملة خاصة لتجربة المستخدم في أعلى الصورة أو الفيديو، مثلاً كتراكب شارة على الصورة
|
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معاملة خاصة لتجربة المستخدم، مثلاً كطبقة شارة على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| فئات المحتوى | اختياري | تصف هذه السمة فئة المحتوى في العنصر. | قائمة عمليات التعداد راجِع قسم فئة المحتوى للحصول على إرشادات. |
ArticleEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| Action Uri | مطلوب |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| العنوان | مطلوب | تمثّل هذه السمة عنوان الجهة. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 50 حرفًا كحد أقصى |
| صور الملصقات | اختياري | سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة (dps) في أعلى الصورة وأسفلها. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| المصدر - العنوان | اختياري | تمثّل هذه السمة اسم المؤلف أو المؤسسة أو المراسل. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: أقل من 25 حرفًا |
| المصدر - الصورة | اختياري | صورة المصدر، مثل المؤلف أو المؤسسة أو المراسل | للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| الوصف | اختياري | فقرة نصية واحدة لوصف العنصر ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة العناوين الفرعية | اختياري | ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة وشرح: 50 حرفًا كحد أقصى |
| الشارات | اختياري | تتألف كل شارة إما من نص حر (15 حرفًا كحد أقصى) أو صورة صغيرة. معاملة خاصة لتجربة المستخدم في أعلى الصورة أو الفيديو، مثلاً كتراكب شارة على الصورة
|
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معاملة خاصة لتجربة المستخدم، مثلاً كطبقة شارة على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| وقت نشر المحتوى | اختياري | هذا هو الطابع الزمني للحقبة بالملّي ثانية عند نشر المحتوى أو تعديله في التطبيق. | الطابع الزمني لحقبة Unix بالملّي ثانية |
| آخر وقت للتفاعل | مطلوب بشكل مشروط | الطابع الزمني للحقبة بالمللي ثانية عندما تفاعل المستخدِم مع هذا العنصر آخر مرّة. ملاحظة: هذا الحقل مطلوب إذا كان هذا العنصر جزءًا من مجموعة الاستمرار. |
الطابع الزمني لحقبة Unix بالملّي ثانية |
| النسبة المئوية لمستوى التقدّم | مطلوب بشكل مشروط | تمثّل هذه السمة النسبة المئوية للمحتوى الكامل الذي استهلكه المستخدم حتى الآن. ملاحظة: هذا الحقل مطلوب إذا كان هذا العنصر جزءًا من مجموعة الاستمرار. |
قيمة عدد صحيح تتراوح بين 0 و100 ضِمنًا. |
| فئات المحتوى | اختياري | تصف هذه السمة فئة المحتوى في العنصر. | قائمة عمليات التعداد راجِع قسم فئة المحتوى للحصول على إرشادات. |
PersonEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| Action Uri | مطلوب |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| الملف الشخصي - الاسم | مطلوب | اسم الملف الشخصي أو المعرّف أو الاسم المستعار، مثل "John Doe" أو "@TeamPixel" أو غير ذلك | سلسلة حجم النص المقترَح: 50 حرفًا كحد أقصى |
| الملف الشخصي - الأفاتار | مطلوب |
صورة الملف الشخصي للمستخدم أو صورة الأفاتار ملاحظة:يجب أن تكون الصورة مربّعة بنسبة عرض إلى ارتفاع 1:1. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| الملف الشخصي - نص إضافي | اختياري | نص حرّ مثل اسم الملف الشخصي | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| الملف الشخصي - صورة إضافية | اختياري | صورة صغيرة، مثل شارة التحقّق | للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| صورة العنوان | اختياري | سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة (dps) في أعلى الصورة وأسفلها. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| مدى الرواج - العدد | اختياري |
أدخِل عدد المتابعين أو قيمة الرواج، على سبيل المثال "3.7 مليون". ملاحظة: إذا تم توفير كلّ من "العدد" و"قيمة العدد"، سيتم استخدام "العدد". |
سلسلة حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا |
| مدى الرواج - قيمة العدد | اختياري | تمثّل هذه السمة عدد المتابعين أو قيمة الشهرة. ملاحظة: قدِّم قيمة "العدد" إذا كان تطبيقك لا يريد التعامل مع منطق كيفية تحسين عدد كبير ليتناسب مع أحجام العرض المختلفة. في حال توفير كل من "عدد مرات الظهور" و"قيمة عدد مرات الظهور"، سيتم استخدام "عدد مرات الظهور". |
الصيغة الطويلة |
| مدى الرواج - التصنيف | اختياري | حدِّد نوع تصنيف الرواج، مثلاً "الإعجابات". | سلسلة حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا |
| مدى الرواج - مرئي | اختياري |
حدِّدوا الغرض من التفاعل. على سبيل المثال، صورة تعرض رمز الإعجاب ورموز الإيموجي. يمكن تقديم أكثر من صورة واحدة، ولكن قد لا يتم عرضها كلها على جميع أشكال الأجهزة. ملاحظة: يجب أن تكون الصورة مربّعة بنسبة 1:1 |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| التقييم - الحد الأقصى للقيمة | مطلوب | تمثّل هذه السمة الحد الأقصى لمقياس التقييم. يجب توفيرها إذا تم توفير القيمة الحالية للتقييم أيضًا. |
الرقم >= 0.0 |
| التقييم - القيمة الحالية | مطلوب | القيمة الحالية لمقياس التقييم يجب توفيرها إذا تم توفير القيمة القصوى للتقييم أيضًا. |
الرقم >= 0.0 |
| التقييم - العدد | اختياري | تمثّل هذه السمة عدد التقييمات الخاصة بالكيان. ملاحظة: يجب توفير قيمة لهذا الحقل إذا كان تطبيقك يتحكّم في طريقة عرض العدد للمستخدمين. استخدِم سلسلة موجزة. على سبيل المثال، إذا كان العدد 1,000,000، ننصحك باستخدام اختصار مثل 1 مليون حتى لا يتم اقتطاع العدد على أحجام العرض الأصغر. |
سلسلة |
| التقييم - قيمة العدد | اختياري | تمثّل هذه السمة عدد التقييمات الخاصة بالكيان. ملاحظة: يجب توفير هذا الحقل إذا كنت لا تتعامل مع منطق الاختصار المعروض بنفسك. في حال توفّر كل من Count وCount Value، يتم عرض Count للمستخدمين. |
الصيغة الطويلة |
| الموقع الجغرافي - البلد | اختياري | يشير هذا المقياس إلى البلد الذي يقيم فيه الشخص أو يخدم فيه. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - المدينة | اختياري | المدينة التي يقيم فيها الشخص أو يعمل فيها | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - عرض العنوان | اختياري | سيظهر للمستخدم العنوان الذي يتواجد فيه الشخص أو الذي يقدّم فيه خدماته. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - عنوان الشارع | اختياري | تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) الذي يقيم فيه الشخص أو يعمل فيه. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - الولاية | اختياري | تمثّل هذه السمة الولاية (إن كان ذلك منطبقًا) التي يقيم فيها الشخص أو يخدم فيها. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - الرمز البريدي | اختياري | تمثّل هذه السمة الرمز البريدي (إذا كان ذلك منطبقًا) للمكان الذي يقيم فيه الشخص أو يعمل فيه. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الموقع الجغرافي - الحي | اختياري | تمثّل هذه السمة الحي (إذا كان ذلك منطبقًا) الذي يقيم فيه الشخص أو يعمل فيه. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحد أقصى |
| الشارات | اختياري |
تتألف كل شارة إما من نص حر (15 حرفًا كحد أقصى) أو صورة صغيرة. |
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معاملة خاصة لتجربة المستخدم، مثلاً كطبقة شارة على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| الوصف | اختياري | فقرة نصية واحدة لوصف العنصر ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة العناوين الفرعية | اختياري | ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة وشرح: 50 حرفًا كحد أقصى |
| فئات المحتوى | اختياري | تصف هذه السمة فئة المحتوى في العنصر. | قائمة التعدادات المؤهَّلة
راجِع قسم فئة المحتوى للحصول على إرشادات. |
EventEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| Action Uri | مطلوب |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| العنوان | مطلوب | تمثّل هذه السمة عنوان الجهة. | سلسلة حجم النص المقترَح: 50 حرفًا كحد أقصى |
| وقت البدء | مطلوب |
الطابع الزمني لوقت بدء الحدث المتوقّع. ملاحظة: سيتم تمثيل هذا الوقت بالملّي ثانية. |
الطابع الزمني لحقبة Unix بالملّي ثانية |
| وضع الحدث | مطلوب | حقل لتحديد ما إذا كانت الفعالية ستكون افتراضية أو بالحضور الشخصي أو كليهما |
قيم التعداد: VIRTUAL أو IN_PERSON أو HYBRID |
| صور الملصقات | مطلوب | سنعرض صورة واحدة فقط عند تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. في حال توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة (dps) في أعلى الصورة وأسفلها. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| الموقع الجغرافي - البلد | مطلوب بشكل مشروط | البلد الذي سيُقام فيه الحدث ملاحظة: هذا الحقل مطلوب للأحداث التي تكون 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 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا) |
| فئات المحتوى | اختياري | تصف هذه السمة فئة المحتوى في العنصر. | قائمة التعدادات المؤهَّلة
راجِع قسم فئة المحتوى للحصول على إرشادات. |
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 وحدة بكسل مستقلة الكثافة (dps) في أعلى الصورة وأسفلها. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| وقت الانتهاء | اختياري |
الطابع الزمني لوقت بدء الحقبة الذي من المتوقّع أن ينتهي فيه الحدث ملاحظة: سيتم تمثيل هذا الوقت بالملّي ثانية. |
الطابع الزمني لحقبة Unix بالملّي ثانية |
| مقدّم الخدمة - الاسم | اختياري |
تمثّل هذه السمة اسم مقدّم الخدمة. ملاحظة:يجب توفير نص أو صورة لمزوّد الخدمة. |
نص حر على سبيل المثال، اسم منظّم الفعالية أو الجولة |
| مقدّم الخدمة - صورة | اختياري |
تمثّل هذه السمة شعار مقدّم الخدمة أو صورته. ملاحظة:يجب توفير نص أو صورة لمزوّد الخدمة. |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| الوصف | اختياري | فقرة نصية واحدة لوصف العنصر ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة العناوين الفرعية | اختياري | ما يصل إلى 3 عناوين فرعية، كل عنوان فرعي عبارة عن سطر واحد من النص ملاحظة: سيتم عرض قائمة الأوصاف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة وشرح: 50 حرفًا كحد أقصى |
| الشارات | اختياري |
تتألف كل شارة إما من نص حر (15 حرفًا كحد أقصى) أو صورة صغيرة. |
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معاملة خاصة لتجربة المستخدم، مثلاً كطبقة شارة على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
للحصول على إرشادات، يُرجى الاطّلاع على مواصفات الصور. |
| معرّف الحجز | اختياري | تمثّل هذه السمة رقم تعريف الحجز الخاص بحجز الحدث. | حقل التعبئة النصّية الحرّة |
| السعر - CurrentPrice | مطلوب بشكل مشروط |
تمثّل هذه السمة السعر الحالي للتذكرة أو البطاقة الخاصة بالفعالية. يجب توفيرها إذا تم توفير السعر الأصلي المشطوب. |
حقل التعبئة النصّية الحرّة |
| السعر - StrikethroughPrice | اختياري | تمثّل هذه السمة السعر الأصلي للتذكرة أو البطاقة الخاصة بالفعالية. | حقل التعبئة النصّية الحرّة |
| وسيلة شرح السعر | اختياري | وسيلة شرح السعر لعرض عرض ترويجي أو حدث أو خصم للمشتركين، إذا كان ذلك متاحًا | حقل التعبئة النصّية الحرّة حجم النص المقترَح: أقل من 45 حرفًا (قد تظهر علامات حذف إذا كان النص طويلاً جدًا) |
| التقييم - الحد الأقصى للقيمة | اختياري | تمثّل هذه السمة الحد الأقصى لمقياس التقييم. يجب توفيرها إذا تم توفير القيمة الحالية للتقييم أيضًا. |
الرقم >= 0.0 |
| التقييم - القيمة الحالية | اختياري | القيمة الحالية لمقياس التقييم يجب توفيرها إذا تم توفير القيمة القصوى للتقييم أيضًا. |
الرقم >= 0.0 |
| التقييم - العدد | اختياري | تمثّل هذه السمة عدد التقييمات الخاصة بالحدث. ملاحظة: يجب توفير هذا الحقل إذا كان تطبيقك يريد التحكّم في طريقة عرض هذه المعلومات للمستخدمين. يُرجى تقديم السلسلة الموجزة التي يمكن عرضها للمستخدم. على سبيل المثال، إذا كان العدد 1,000,000، ننصحك باستخدام اختصارات مثل 1 مليون، كي لا يتم اقتطاعه عند عرضها بأحجام أصغر. |
سلسلة |
| التقييم - قيمة العدد | اختياري | تمثّل هذه السمة عدد التقييمات الخاصة بالحدث. ملاحظة: يجب توفير هذه السمة إذا كنت لا تريد التعامل مع منطق الاختصار المعروض بنفسك. في حال توفّر كلّ من "العدد" و"قيمة العدد"، سنستخدم "العدد" لعرضه للمستخدمين. |
الصيغة الطويلة |
| فئات المحتوى | اختياري | تصف هذه السمة فئة المحتوى في العنصر. | قائمة التعدادات المؤهَّلة
راجِع قسم فئة المحتوى للحصول على إرشادات. |
مواصفات الصور
يتم إدراج المواصفات المطلوبة لمواد عرض الصور في هذا الجدول:
| نسبة العرض إلى الارتفاع | الحدّ الأدنى لعدد وحدات البكسل | وحدات البكسل المقترَحة |
|---|---|---|
مربّعة (1x1) الخيارات المفضّلة |
300×300 | 1200x1200 |
| أفقية (1.91x1) | 600x314 | 1200x628 |
| صورة عمودية (4x5) | 480x600 | 960x1200 |
يجب استضافة الصور على شبكات توصيل محتوى (CDN) عامة كي يتمكّن Google من الوصول إليها.
تنسيقات الملفات
PNG أو JPG أو GIF ثابت أو WebP
الحد الأقصى لحجم الملف
5,120 كيلوبايت
اقتراحات إضافية
- مساحة القسم المهم في الصور: ضَع المحتوى المهم في الوسط ليشغل 80% من الصورة.
- استخدِم خلفية شفافة حتى يمكن عرض الصورة بشكل صحيح في إعدادات المظهرَين الداكن والفاتح.
فئة المحتوى
تسمح فئة المحتوى للتطبيقات بنشر محتوى ينتمي إلى فئات متعددة. يتم ربط المحتوى ببعض الفئات المحدّدة مسبقًا، وهي:
TYPE_EDUCATIONTYPE_SPORTSTYPE_MOVIES_AND_TV_SHOWSTYPE_BOOKSTYPE_AUDIOBOOKSTYPE_MUSICTYPE_DIGITAL_GAMESTYPE_TRAVEL_AND_LOCALTYPE_HOME_AND_AUTOTYPE_BUSINESSTYPE_NEWSTYPE_FOOD_AND_DRINKTYPE_SHOPPINGTYPE_HEALTH_AND_FITENESSTYPE_MEDICALTYPE_PARENTINGTYPE_DATING
يجب استضافة الصور على شبكات توصيل محتوى (CDN) عامة كي يتمكّن Google من الوصول إليها.
إرشادات استخدام فئات المحتوى
- بعض الكيانات، مثل ArticleEntity وGenericFeaturedEntity، مؤهَّلة لاستخدام أي من فئات المحتوى. بالنسبة إلى الكيانات الأخرى، مثل EventEntity وEventReservationEntity وPersonEntity، لا تتأهّل سوى مجموعة فرعية من هذه الفئات. راجِع قائمة الفئات المؤهَّلة لنوع كيان قبل ملء القائمة.
استخدِم نوع الكيان المحدّد لبعض فئات المحتوى بدلاً من استخدام مجموعة من الكيانات العامة وContentCategory:
- TYPE_MOVIES_AND_TV_SHOWS - اطّلِع على الكيانات من دليل تكامل "المشاهدة" قبل استخدام الكيانات العامة.
- TYPE_BOOKS - اطّلِع على EbookEntity قبل استخدام الكيانات العامة.
- TYPE_AUDIOBOOKS - اطّلِع على AudiobookEntity قبل استخدام الكيانات العامة.
- TYPE_SHOPPING - Check out ShoppingEntity before using the generic entities.
- TYPE_FOOD_AND_DRINK: راجِع الكيانات من دليل دمج الطعام قبل استخدام الكيانات العامة.
حقل ContentCategory اختياري ويجب تركه فارغًا إذا كان المحتوى لا ينتمي إلى أي من الفئات المذكورة سابقًا.
في حال توفير فئات محتوى متعددة، يجب ترتيبها حسب مدى صلتها بالمحتوى، مع وضع فئة المحتوى الأكثر صلة في بداية القائمة.
الخطوة 2: تقديم بيانات المجموعة
ننصح بتنفيذ مهمة نشر المحتوى في الخلفية (على سبيل المثال، باستخدام WorkManager) وجدولتها بانتظام أو استنادًا إلى حدث معيّن (على سبيل المثال، في كل مرة يفتح فيها المستخدم التطبيق أو عندما يضيف المستخدم عنصرًا إلى سلّة التسوّق).
تتحمّل AppEngagePublishClient مسؤولية نشر المجموعات.
في ما يلي واجهات برمجة التطبيقات لنشر المجموعات في العميل:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishContinuationClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteContinuationClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
تُستخدَم واجهة برمجة التطبيقات هذه للتأكّد من أنّ الخدمة متاحة للدمج وما إذا كان يمكن عرض المحتوى على الجهاز.
بالنسبة إلى الإصدار 1.6.0 من Engage SDK والإصدارات الأحدث (ننصح به)
مهارات Android
عرض على GitHubدمج حزمة Engage SDK
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.يمكنك التحقّق من مدى توفّر الخدمة لكل نوع من أنواع المجموعات التي تريد نشرها. تقبل واجهة برمجة التطبيقات isServiceAvailable عنصر طلب،
ServiceAvailabilityRequest، يحتوي على أنواع المجموعات التي يجب التحقّق من توفّر الخدمة لها. يمكنك العثور على قيم التعداد ClusterType المطلوبة لـ ServiceAvailabilityRequest في الجدول التالي.
| نوع المجموعة | ثابت نوع المجموعة | قيمة العدد الصحيح |
|---|---|---|
| غير معروف | TYPE_UNKNOWN |
0 |
| مجموعة الاقتراحات | TYPE_RECOMMENDATION |
1 |
| المجموعة المميزة | TYPE_FEATURED |
2 |
| مجموعة المتابعة | TYPE_CONTINUATION |
3 |
| مجموعة إدارة المستخدمين | TYPE_ENGAGEMENT |
8 |
| مجموعة الاشتراكات | TYPE_SUBSCRIPTION |
12 |
Kotlin
val request = ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build()
client.isServiceAvailable(request).addOnCompleteListener { task ->
if (task.isSuccessful) {
val availabilityMap = task.result
if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
// Proceed with publishing continuation content
}
if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
ServiceAvailabilityRequest request =
new ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build();
client.isServiceAvailable(request).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Map<Integer, Boolean> availabilityMap = task.getResult();
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
// Proceed with publishing continuation content
}
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
ميزة "توفّر الخدمة بشروط"
تطلب بعض التطبيقات المدمجة إعدادًا خاصًا يتيح تفعيل خدمة Engage وإيقافها بشكل متقطع من أجل خفض تكلفة عرضها. على الرغم من إمكانية استخدام استراتيجية تحليل المحتوى المتقطّع هذه، إلا أنّها تؤثر سلبًا في المستخدم والمنتج، إذ لن يتم عرض المحتوى القديم ولن يتم عرض بعض مساحات العرض على الإطلاق.
بدءًا من الإصدار 1.6.0، تتيح حزمة تطوير البرامج (SDK) الخاصة بمنصة Engage التحقّق من توفّر أنواع معيّنة من المجموعات. ويوفّر ذلك مرونة أكبر، فإذا اعتمد تطبيق معيّن استراتيجية المحتوى المتقطّع، يمكن أن تتّبع بعض أنواع المجموعات هذه الاستراتيجية المتقطّعة، بينما تكون أنواع المجموعات الأخرى مفعّلة دائمًا (أي مجموعات المحتوى المتسلسل).
إذا كان من المفترض ألا تكون خدمة Engage مفعَّلة "باستمرار" على جميع الأجهزة المتوافقة لأي سبب من الأسباب، وتم ضبطها على الاستيعاب المتقطّع لأي مجموعة من الأجهزة، سيظلّ نشر جميع مجموعات استمرار التشغيل (مثل "مواصلة القراءة" و"حجوزات الأحداث") مفعَّلاً من خلال الإعدادات التلقائية، وسيتم تفعيل بقية أنواع المجموعات وإيقافها بشكل متقطّع. إذا كان الاستيعاب المتقطّع ينطبق عليك ولكن هذا الإعداد التلقائي لا يناسب احتياجاتك، يُرجى التواصل مع engage-developers@google.com.
بالنسبة إلى إصدارات حزمة تطوير البرامج (SDK) الأقدم من الإصدار 1.6.0 (سيتم إيقافها نهائيًا)
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>
يتم إرسال intent التالي من خلال الخدمة:
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 إذا كانت لديك أي أسئلة أثناء عملية الدمج.
الخطوات التالية
بعد إكمال عملية الربط هذه، إليك الخطوات التالية:
- أرسِل رسالة إلكترونية إلى
engage-developers@google.comوأرفِق بها حزمة APK المدمَجة الجاهزة للاختبار من قِبل Google. - تُجري Google عملية تحقّق وتراجع داخليًا للتأكّد من أنّ عملية الدمج تعمل على النحو المتوقّع. في حال الحاجة إلى إجراء تغييرات، ستتواصل معك Google لتقديم أي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، ستتواصل معك Google لإعلامك بأنّه يمكنك بدء نشر حزمة APK المعدَّلة والمدمجة على "متجر Google Play".
- بعد أن تؤكّد Google أنّه تم نشر حزمة APK المعدَّلة على "متجر Google Play"، قد يتم نشر المجموعات مقترَحة ومميّزة ومتابعة وإتاحتها للمستخدمين.