تعمل Google على إنشاء مساحة على الجهاز فقط تنظّم تطبيقات المستخدمين حسب الفئات وتتيح تجربة غامرة جديدة لاستهلاك محتوى التطبيقات المخصّصة واكتشافها. توفّر هذه التجربة بملء الشاشة لشركائنا من المطوّرين فرصة لعرض أفضل محتوى وافٍ لديهم في قناة مخصّصة خارج تطبيقاتهم.يتضمّن هذا الدليل تعليمات لشركائنا من المطوّرين لدمج محتوى المواعدة الخاص بهم، وذلك باستخدام حزمة Engage SDK لتعبئة مساحة العرض الجديدة هذه.
تفاصيل عملية الدمج
يوضّح هذا القسم الخطوات ونماذج البيانات والمصطلحات المطلوبة للدمج مع حزمة Engage SDK لمحتوى المواعدة.
المصطلحات
تتضمّن عملية الدمج هذه أنواع المجموعات الثلاثة التالية: اقتراح ومميّز ومتابعة.
تعرض مجموعات الاقتراحات اقتراحات مخصّصة للمواعدة من شريك مطوّر فردي. ويمكن تخصيص هذه الاقتراحات للمستخدم.
- يمكن أن تتكوّن مجموعة الاقتراحات من
ArticleEntityأوPersonEntityأوEventEntity، ولكن لا يمكن أن تتضمّن مزيجًا من أنواع العناصر المختلفة.
تتّبع الاقتراحات البنية التالية:
مجموعة الاقتراحات: هي طريقة عرض في واجهة المستخدم تحتوي على مجموعة من الاقتراحات من الشريك المطوّر نفسه.
الكيان: عنصر يمثّل عنصرًا واحدًا في مجموعة. يوفّر هذا الدمج بعض العناصر التي ستظهر باستخدام مجموعة الاقتراحات:
ArticleEntity: يمثّل هذا الكيان اقتراحًا لمحتوى نصي مرتبط بالمواعدة. يتيح عنصر ArticleEntity للمطوّرين تقديم مجموعة متنوعة من النصوص والصور مع المزيد من البيانات الوصفية لتوضيح المعلومات للمستخدمين.
الشكل 1: واجهة مستخدم تعرض ArticleEntity واحدة ضمن مجموعة "اقتراحات". PersonEntity: يمثّل PersonEntity شخصًا. قد تكون التوصيات لتسليط الضوء على شخص ما في آفاق المواعدة.
الشكل 2: واجهة مستخدم تعرض PersonEntity واحدًا ضمن مجموعة الاقتراحات EventEntity: يمثّل EventEntity حدثًا سيحدث في المستقبل. يعد وقت بدء الحدث جزءًا مهمًا من المعلومات التي يجب نقلها إلى المستخدمين.
الشكل 3: واجهة مستخدم تعرض EventEntity واحدًا ضمن مجموعة الاقتراحات
- يمكن أن تتكوّن مجموعة الاقتراحات من
تعرض مجموعة المتابعة المحتوى الذي تفاعل معه المستخدمون مؤخرًا من شركاء مطوّرين متعدّدين في مجموعة واحدة ضمن واجهة المستخدم. سيُسمح لكل شريك مطوّر ببث 10 كيانات كحد أقصى في مجموعة "المتابعة".
يمكن أن يتّخذ محتوى المتابعة البنية التالية:
ArticleEntity: يمثّل هذا الكيان اقتراحًا لمحتوى نصي مرتبط بالمواعدة. يمكن استخدام هذا الكيان لتمثيل المقالات الإخبارية غير المكتملة أو أي محتوى آخر يريد المستخدم مواصلة قراءته من حيث توقف.
الشكل 6. واجهة مستخدم تعرض ArticleEntity واحدة ضمن مجموعة "متابعة القراءة" EventReservationEntity: يمثّل EventReservationEntity حجزًا لحدث ويساعد المستخدمين في تتبُّع الحجوزات القادمة أو الجارية لأحداث المواعدة واللقاءات.
الشكل 8 واجهة مستخدم تعرض EventReservationEntity واحدًا ضمن مجموعة "متابعة".
مجموعة المحتوى المميّز هي طريقة عرض في واجهة المستخدم تعرض المحتوى الرئيسي المختار
GenericFeaturedEntityمن العديد من الشركاء المطوّرين في مجموعة واحدة في واجهة المستخدم. هناك مجموعة واحدة مميّزة تظهر بالقرب من أعلى واجهة المستخدم، مع موضع ذي أولوية فوق جميع مجموعات الاقتراحات. يُسمح لكل شريك مطوّر ببث عنصر واحد من نوع متوافق في قسم "مميّز"، مع العديد من العناصر (من أنواع مختلفة على الأرجح) من مطوّري تطبيقات متعددين في مجموعة "مميّز".GenericFeaturedEntity: يختلف GenericFeaturedEntity عن عنصر الاقتراح في أنّه يجب استخدام العنصر المميّز لمحتوى واحد رئيسي من المطوّرين ويجب أن يمثّل المحتوى الأكثر أهمية الذي سيكون مثيرًا للاهتمام وملائمًا للمستخدمين.
الشكل 12: واجهة مستخدم تعرض FeaturedCluster مع قائمة 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.6.0'
}
ملخّص
يستند التصميم إلى تنفيذ خدمة ربط.
تخضع البيانات التي يمكن للعميل نشرها للحدود التالية لأنواع المجموعات المختلفة:
| نوع المجموعة | حدود المجموعة العنقودية | الحدّ الأدنى لعدد الكيانات في المجموعة العنقودية | الحدود القصوى للكيانات في مجموعة عنقودية |
|---|---|---|---|
| مجموعات الاقتراحات | 5 على الأكثر | 5 على الأقل | 25 على الأكثر (ArticleEntity أو PersonEntity أو
EventEntity) |
| مجموعة المتابعة | 1 كحدّ أقصى | 1 على الأقل | 10 كحدّ أقصى (ArticleEntity أو EventReservationEntity) |
| مجموعة "المحتوى المميّز" | 1 كحدّ أقصى | 1 على الأقل | 10 على الأكثر (GenericFeaturedEntity) |
الخطوة 1: تقديم بيانات الكيان
حدّدت حزمة تطوير البرامج (SDK) كيانات مختلفة لتمثيل كل نوع عنصر. نوفّر الكيانات التالية لفئة "التعارف":
GenericFeaturedEntityArticleEntityPersonEntityEventEntityEventReservationEntity
توضّح الرسوم البيانية التالية السمات والمتطلبات المتاحة لكل نوع.
GenericFeaturedEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| معرّف الموارد المنتظم (URI) للإجراء | مطلوبة |
رابط عميق للكيان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط العميقة لتحديد المصدر. يُرجى الرجوع إلى هذه الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| صور الملصقات | مطلوبة | سنعرض صورة واحدة فقط في حال تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: في حال توفير شارة، تأكَّد من توفير مساحة آمنة تبلغ 24 بكسل مستقل الكثافة في كلّ من أعلى الصورة وأسفلها. |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| العنوان | اختياري | عنوان الكيان | حقل التعبئة النصّية الحرّة Recommended text size: 50 chars |
| الوصف | اختياري | فقرة نصية واحدة لوصف الكيان ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة الترجمات | اختياري | ما يصل إلى 3 عناوين فرعية، يتألف كل منها من سطر واحد من النص ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة: 50 حرفًا كحدّ أقصى |
| الشارات | اختياري | تكون كل شارة إما نصًا حرًا (بحد أقصى 15 حرفًا) أو صورة صغيرة. معالجة خاصة لتجربة المستخدم فوق الصورة أو الفيديو، على سبيل المثال، تراكب الشارة على الصورة
|
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معالجة خاصة لتجربة المستخدم، على سبيل المثال، كشارة تظهر على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| فئات المحتوى | اختياري | يصف فئة المحتوى في الكيان. | قائمة عمليات التعداد يُرجى الاطّلاع على قسم "فئة المحتوى" للحصول على إرشادات. |
ArticleEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| معرّف الموارد المنتظم (URI) للإجراء | مطلوبة |
رابط عميق للكيان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط العميقة لتحديد المصدر. يُرجى الرجوع إلى هذه الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| العنوان | مطلوبة | عنوان الكيان | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 50 حرفًا كحدّ أقصى |
| صور الملصقات | اختياري | سنعرض صورة واحدة فقط في حال تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. إذا تم تقديم شارة، تأكَّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في كل من أعلى الصورة وأسفلها |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| المصدر - العنوان | اختياري | اسم المؤلف أو المؤسسة أو المراسل | حقل التعبئة النصّية الحرّة حجم النص المقترَح: أقل من 25 حرفًا |
| المصدر - صورة | اختياري | صورة للمصدر، مثل المؤلف أو المؤسسة أو المراسل | يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| الوصف | اختياري | فقرة نصية واحدة لوصف الكيان ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة الترجمات | اختياري | ما يصل إلى 3 عناوين فرعية، يتألف كل منها من سطر واحد من النص ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة: 50 حرفًا كحدّ أقصى |
| الشارات | اختياري | تكون كل شارة إما نصًا حرًا (بحد أقصى 15 حرفًا) أو صورة صغيرة. معالجة خاصة لتجربة المستخدم فوق الصورة أو الفيديو، على سبيل المثال، تراكب الشارة على الصورة
|
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معالجة خاصة لتجربة المستخدم، على سبيل المثال، كشارة تظهر على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| وقت نشر المحتوى | اختياري | هذا هو الطابع الزمني للحقبة بالملي ثانية الذي يوضّح وقت نشر المحتوى أو تعديله في التطبيق. | الطابع الزمني للحقبة بالملي ثانية |
| وقت آخر تفاعل | مطلوب بشروط | الطابع الزمني للحقبة بالمللي ثانية عندما تفاعل المستخدم مع هذا الكيان في المرة الأخيرة. ملاحظة: هذا الحقل مطلوب إذا كان هذا الكيان جزءًا من مجموعة المحتوى المتواصل. |
الطابع الزمني للحقبة بالملي ثانية |
| النسبة المئوية للتقدّم | مطلوب بشروط | النسبة المئوية للمحتوى الكامل الذي استهلكه المستخدم حتى الآن ملاحظة: هذا الحقل مطلوب إذا كان هذا الكيان جزءًا من مجموعة المحتوى المتواصل. |
قيمة عدد صحيح تتراوح بين 0 و100 ضمنًا. |
| فئات المحتوى | اختياري | يصف فئة المحتوى في الكيان. | قائمة عمليات التعداد يُرجى الاطّلاع على قسم "فئة المحتوى" للحصول على إرشادات. |
PersonEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| معرّف الموارد المنتظم (URI) للإجراء | مطلوبة |
رابط عميق للكيان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط العميقة لتحديد المصدر. يُرجى الرجوع إلى هذه الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| الملف الشخصي - الاسم | مطلوبة | اسم الملف الشخصي أو معرّفه أو الاسم المعرِّف، مثل "John Doe" أو "@TeamPixel" وما إلى ذلك | سلسلة حجم النص المقترَح: 50 حرفًا كحدّ أقصى |
| الملف الشخصي - الأفاتار | مطلوبة |
صورة الملف الشخصي أو الصورة الرمزية للمستخدم ملاحظة: يجب أن تكون الصورة مربّعة بنسبة عرض إلى ارتفاع 1:1. |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| الملف الشخصي - نص إضافي | اختياري | نص حر مثل الاسم المعرِّف للملف الشخصي | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| الملف الشخصي - صورة إضافية | اختياري | صورة صغيرة مثل شارة إثبات الهوية | يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| صورة العنوان | اختياري |
تمثّل صورة العنوان. يجب أن تكون مختلفة عن صورة الملف الشخصي. يمكن استخدام هذه السمة إذا كانت هناك صورة إضافية تساعد في تسليط الضوء على الشخص، مثل عمله. ملاحظة: يجب أن تكون الصورة بنسبة عرض إلى ارتفاع 16:9. إذا تم توفير شارة، يُرجى التأكّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في كل من أعلى الصورة وأسفلها |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| مدى الرواج - العدد | اختياري |
تشير هذه السمة إلى عدد المتابعين أو قيمة الرواج، على سبيل المثال "3.7 مليون". ملاحظة: إذا تم تقديم كل من "العدد" و"قيمة العدد"، سيتم استخدام "العدد". |
سلسلة حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا |
| مدى الرواج - قيمة العدد | اختياري | عدد المتابعين أو قيمة الشعبية ملاحظة: يجب تقديم قيمة العدد إذا كان تطبيقك لا يريد التعامل مع المنطق المتعلّق بكيفية تحسين عدد كبير من أجل أحجام العرض المختلفة. في حال توفير كل من "العدد" و"قيمة العدد"، يتم عرض "العدد" للمستخدمين. |
الصيغة الطويلة |
| مدى الرواج - التصنيف | اختياري | يجب الإشارة إلى تصنيف الرواج، مثل "المعجبون". | سلسلة حجم النص المقترَح: 20 حرفًا كحد أقصى للعدد والتصنيف معًا |
| مدى الرواج - مرئي | اختياري |
أشِر إلى الغرض من التفاعل. على سبيل المثال، صورة تعرض رمز الإعجاب ورمز الإيموجي. يمكنك تقديم أكثر من صورة واحدة، ولكن قد لا يتم عرضها جميعًا على جميع أشكال الأجهزة. ملاحظة: يجب أن تكون الصورة مربّعة بنسبة عرض إلى ارتفاع 1:1 |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| التقييم - الحدّ الأقصى للقيمة | مطلوب | الحد الأقصى لقيمة مقياس التقييم يجب تقديم هذه السمة في حال تقديم القيمة الحالية للتقييم أيضًا. |
رقم >= 0.0 |
| التقييم - القيمة الحالية | مطلوب | القيمة الحالية لمقياس التقييم يجب تقديم هذه السمة في حال تقديم القيمة القصوى للتقييم أيضًا. |
رقم >= 0.0 |
| التقييم - العدد | اختياري | عدد تقييمات الكيان ملاحظة: يجب تقديم هذا الحقل إذا كان تطبيقك يريد التحكّم في كيفية عرض ذلك للمستخدمين. يُرجى تقديم السلسلة الموجزة التي يمكن عرضها للمستخدم. على سبيل المثال، إذا كان العدد 1,000,000، ننصحك باستخدام اختصارات مثل 1M، حتى لا يتم اقتطاعه على أحجام الشاشات الأصغر. |
سلسلة |
| التقييم - قيمة العدد | اختياري | عدد تقييمات الكيان ملاحظة: يجب تقديم هذا الحقل إذا كنت لا تريد معالجة منطق اختصار العرض بنفسك. في حال توفّر كل من Count وCount Value، سنستخدم Count لعرضها للمستخدمين. |
الصيغة الطويلة |
| الموقع الجغرافي - البلد | اختياري | البلد الذي يقيم فيه الشخص أو يخدم فيه | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - المدينة | اختياري | المدينة التي يقيم فيها الشخص أو يقدّم خدماته فيها | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - العنوان المعروض | اختياري | سيتم عرض العنوان الذي يتواجد فيه الشخص أو يقدّم خدماته فيه للمستخدم. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - عنوان الشارع | اختياري | عنوان الشارع (إن توفّر) حيث يقيم الشخص أو يقدّم خدماته | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الولاية | اختياري | الولاية (إذا كان ذلك منطبقًا) التي يقيم فيها الشخص أو يخدم فيها | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الرمز البريدي | اختياري | الرمز البريدي (إن وُجد) للمكان الذي يقيم فيه الشخص أو يقدّم خدماته فيه | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الحي | اختياري | الحي (إذا كان ذلك منطبقًا) الذي يقيم فيه الشخص أو يقدّم خدماته فيه | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الشارات | اختياري |
تكون كل شارة إما نصًا حرًا (بحد أقصى 15 حرفًا) أو صورة صغيرة. |
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معالجة خاصة لتجربة المستخدم، على سبيل المثال، كشارة تظهر على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| الوصف | اختياري | فقرة نصية واحدة لوصف الكيان ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة الترجمات | اختياري | ما يصل إلى 3 عناوين فرعية، يتألف كل منها من سطر واحد من النص ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة: 50 حرفًا كحدّ أقصى |
| فئات المحتوى | اختياري | يصف فئة المحتوى في الكيان. | قائمة التعدادات المؤهَّلة
يُرجى الاطّلاع على قسم "فئة المحتوى" للحصول على إرشادات. |
EventEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| معرّف الموارد المنتظم (URI) للإجراء | مطلوبة |
رابط عميق للكيان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط العميقة لتحديد المصدر. يُرجى الرجوع إلى هذه الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| العنوان | مطلوبة | عنوان الكيان | سلسلة حجم النص المقترَح: 50 حرفًا كحدّ أقصى |
| وقت البدء | مطلوبة |
الطابع الزمني للحقبة الذي من المتوقّع أن يبدأ فيه الحدث ملاحظة: سيتم تمثيل ذلك بالملي ثانية. |
الطابع الزمني للحقبة بالملي ثانية |
| وضع الحدث | مطلوبة | حقل لتوضيح ما إذا كانت الفعالية افتراضية أو بالحضور الشخصي أو كليهما |
قيم التعداد: VIRTUAL أو IN_PERSON أو HYBRID |
| صور الملصقات | مطلوبة | سنعرض صورة واحدة فقط في حال تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. إذا تم تقديم شارة، تأكَّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في كل من أعلى الصورة وأسفلها |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| الموقع الجغرافي - البلد | مطلوب بشروط | البلد الذي تتم فيه الفعالية ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - المدينة | مطلوب بشروط | المدينة التي ستقام فيها الفعالية ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - العنوان المعروض | مطلوب بشروط | تمثّل هذه السمة العنوان أو اسم المكان الذي ستقام فيه الفعالية والذي يجب عرضه للمستخدم. ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - عنوان الشارع | اختياري | تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) للمكان الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الولاية | اختياري | الولاية أو المقاطعة (إذا كان ذلك منطبقًا) التي تتم استضافة الفعالية فيها | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الرمز البريدي | اختياري | تمثّل هذه السمة الرمز البريدي (إذا كان منطبقًا) للموقع الجغرافي الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الحي | اختياري | تمثّل هذه السمة الحيّ (إن أمكن) الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| وقت الانتهاء | اختياري |
الطابع الزمني للحقبة عند توقُّع انتهاء الحدث ملاحظة: سيتم تمثيل ذلك بالملي ثانية. |
الطابع الزمني للحقبة بالملي ثانية |
| الوصف | اختياري | فقرة نصية واحدة لوصف الكيان ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة الترجمات | اختياري | ما يصل إلى 3 عناوين فرعية، يتألف كل منها من سطر واحد من النص ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة: 50 حرفًا كحدّ أقصى |
| الشارات | اختياري |
تكون كل شارة إما نصًا حرًا (بحد أقصى 15 حرفًا) أو صورة صغيرة. |
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معالجة خاصة لتجربة المستخدم، على سبيل المثال، كشارة تظهر على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| Price - CurrentPrice | مطلوب بشروط |
السعر الحالي للتذكرة/البطاقة الخاصة بالفعالية يجب تقديم هذه السمة في حال تقديم السعر الأصلي المشطوب. |
حقل التعبئة النصّية الحرّة |
| Price - StrikethroughPrice | اختياري | السعر الأصلي للتذكرة/البطاقة لحضور الفعالية | حقل التعبئة النصّية الحرّة |
| وسيلة شرح السعر | اختياري | إضافة وسيلة شرح للسعر من أجل إبراز عرض ترويجي أو حدث أو خصم للمشتركين، إذا كان ذلك متاحًا | حقل التعبئة النصّية الحرّة حجم النص المقترَح: أقل من 45 حرفًا (قد يظهر النص الطويل جدًا بعلامات حذف) |
| فئات المحتوى | اختياري | يصف فئة المحتوى في الكيان. | قائمة التعدادات المؤهَّلة
يُرجى الاطّلاع على قسم "فئة المحتوى" للحصول على إرشادات. |
EventReservationEntity
| السمة | المتطلبات | الوصف | التنسيق |
|---|---|---|---|
| معرّف الموارد المنتظم (URI) للإجراء | مطلوبة |
رابط عميق للكيان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط العميقة لتحديد المصدر. يُرجى الرجوع إلى هذه الأسئلة الشائعة |
معرّف موارد منتظم (URI) |
| العنوان | مطلوبة | عنوان الكيان | سلسلة حجم النص المقترَح: 50 حرفًا كحدّ أقصى |
| وقت البدء | مطلوبة |
الطابع الزمني للحقبة الذي من المتوقّع أن يبدأ فيه الحدث ملاحظة: سيتم تمثيل ذلك بالملي ثانية. |
الطابع الزمني للحقبة بالملي ثانية |
| وضع الحدث | مطلوبة | حقل لتوضيح ما إذا كانت الفعالية افتراضية أو بالحضور الشخصي أو كليهما |
قيم التعداد: VIRTUAL أو IN_PERSON أو HYBRID |
| الموقع الجغرافي - البلد | مطلوب بشروط | البلد الذي تتم فيه الفعالية ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - المدينة | مطلوب بشروط | المدينة التي ستقام فيها الفعالية ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - العنوان المعروض | مطلوب بشروط | تمثّل هذه السمة العنوان أو اسم المكان الذي ستقام فيه الفعالية والذي يجب عرضه للمستخدم. ملاحظة: هذا الحقل مطلوب للفعاليات التي تكون IN_PERSON أو HYBRID |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - عنوان الشارع | اختياري | تمثّل هذه السمة عنوان الشارع (إذا كان ذلك منطبقًا) للمكان الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الولاية | اختياري | الولاية أو المقاطعة (إذا كان ذلك منطبقًا) التي تتم استضافة الفعالية فيها | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الرمز البريدي | اختياري | تمثّل هذه السمة الرمز البريدي (إذا كان منطبقًا) للموقع الجغرافي الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| الموقع الجغرافي - الحي | اختياري | تمثّل هذه السمة الحيّ (إن أمكن) الذي تتم فيه استضافة الفعالية. | حقل التعبئة النصّية الحرّة حجم النص المقترَح: 20 حرفًا كحدّ أقصى |
| صور الملصقات | اختياري | سنعرض صورة واحدة فقط في حال تقديم صور متعددة. نسبة العرض إلى الارتفاع المقترَحة هي 16:9 ملاحظة: ننصح بشدة بإضافة صورة. إذا تم تقديم شارة، تأكَّد من توفير مساحة آمنة تبلغ 24 وحدة بكسل مستقلة الكثافة في كل من أعلى الصورة وأسفلها |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| وقت الانتهاء | اختياري |
الطابع الزمني للحقبة عند توقُّع انتهاء الحدث ملاحظة: سيتم تمثيل ذلك بالملي ثانية. |
الطابع الزمني للحقبة بالملي ثانية |
| مقدّم الخدمة - الاسم | اختياري |
اسم مقدّم الخدمة ملاحظة:يجب توفير نص أو صورة لمقدّم الخدمة. |
نص حر على سبيل المثال، اسم منظّم الفعالية أو الجولة |
| مقدّم الخدمة - صورة | اختياري |
شعار/صورة مقدّم الخدمة ملاحظة:يجب توفير نص أو صورة لمقدّم الخدمة. |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| الوصف | اختياري | فقرة نصية واحدة لوصف الكيان ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 180 حرفًا |
| قائمة الترجمات | اختياري | ما يصل إلى 3 عناوين فرعية، يتألف كل منها من سطر واحد من النص ملاحظة: سيتم عرض الوصف أو قائمة العناوين الفرعية للمستخدم، وليس كليهما. |
حقل التعبئة النصّية الحرّة حجم النص المقترَح لكل ترجمة: 50 حرفًا كحدّ أقصى |
| الشارات | اختياري |
تكون كل شارة إما نصًا حرًا (بحد أقصى 15 حرفًا) أو صورة صغيرة. |
|
| شارة - نص | اختياري | عنوان الشارة ملاحظة: يجب إدخال نص أو صورة للشارة |
حقل التعبئة النصّية الحرّة حجم النص المقترَح: 15 حرفًا كحدّ أقصى |
| شارة - صورة | اختياري | صورة صغيرة معالجة خاصة لتجربة المستخدم، على سبيل المثال، كشارة تظهر على الصورة المصغّرة للصورة أو الفيديو ملاحظة: يجب إدخال نص أو صورة للشارة |
يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| رقم تعريف الحجز | اختياري | رقم تعريف الحجز الخاص بالحدث | حقل التعبئة النصّية الحرّة |
| Price - CurrentPrice | مطلوب بشروط |
السعر الحالي للتذكرة/البطاقة الخاصة بالفعالية يجب تقديم هذه السمة في حال تقديم السعر الأصلي المشطوب. |
حقل التعبئة النصّية الحرّة |
| Price - StrikethroughPrice | اختياري | السعر الأصلي للتذكرة/البطاقة لحضور الفعالية | حقل التعبئة النصّية الحرّة |
| وسيلة شرح السعر | اختياري | إضافة وسيلة شرح للسعر من أجل إبراز عرض ترويجي أو حدث أو خصم للمشتركين، إذا كان ذلك متاحًا | حقل التعبئة النصّية الحرّة حجم النص المقترَح: أقل من 45 حرفًا (قد يظهر النص الطويل جدًا بعلامات حذف) |
| التقييم - الحدّ الأقصى للقيمة | اختياري | الحد الأقصى لقيمة مقياس التقييم يجب تقديم هذه السمة في حال تقديم القيمة الحالية للتقييم أيضًا. |
رقم >= 0.0 |
| التقييم - القيمة الحالية | اختياري | القيمة الحالية لمقياس التقييم يجب تقديم هذه السمة في حال تقديم القيمة القصوى للتقييم أيضًا. |
رقم >= 0.0 |
| التقييم - العدد | اختياري | عدد التقييمات للحدث ملاحظة: يجب تقديم هذا الحقل إذا كان تطبيقك يريد التحكّم في كيفية عرض ذلك للمستخدمين. يُرجى تقديم السلسلة الموجزة التي يمكن عرضها للمستخدم. على سبيل المثال، إذا كان العدد 1,000,000، ننصحك باستخدام اختصارات مثل 1M، حتى لا يتم اقتطاعه على أحجام الشاشات الأصغر. |
سلسلة |
| التقييم - قيمة العدد | اختياري | عدد التقييمات للحدث ملاحظة: يجب تقديم هذا الحقل إذا كنت لا تريد معالجة منطق اختصار العرض بنفسك. في حال توفّر كل من Count وCount Value، سنستخدم Count لعرضها للمستخدمين. |
الصيغة الطويلة |
| فئات المحتوى | اختياري | يصف فئة المحتوى في الكيان. | قائمة التعدادات المؤهَّلة
يُرجى الاطّلاع على قسم "فئة المحتوى" للحصول على إرشادات. |
مواصفات الصور
يتم إدراج المواصفات المطلوبة لمواد عرض الصور في هذا الجدول:
| نسبة العرض إلى الارتفاع | الحدّ الأدنى لعدد وحدات البكسل | وحدات البكسل المقترَحة |
|---|---|---|
مربّعة (1 × 1) المفضّلة |
300 × 300 | 1200 × 1200 |
| أفقية (1.91x1) | 600 × 314 | 1200 × 628 |
| عمودية (4x5) | 480×600 | 960 × 1200 |
يجب استضافة الصور على شبكات توصيل محتوى (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: يُرجى الاطّلاع على ShoppingEntity قبل استخدام الكيانات العامة.
- 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، تتيح حزمة Engage SDK التحقّق من مدى توفّر أنواع معيّنة من المجموعات. إذا كان تطبيقك يستخدم ميزة "الاستيعاب المتقطّع":
- مجموعات المتابعة (مثل "مواصلة القراءة" و"حجوزات الفعاليات") تظل مفعَّلة تلقائيًا على جميع الأجهزة المتوافقة.
- يتم تفعيل أنواع المجموعات الأخرى (مثل الاقتراحات) وإيقافها بشكل متقطّع.
إذا لم تكن هذه الإعدادات التلقائية مناسبة لاحتياجاتك، يُرجى التواصل مع 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 PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
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) للإجراء | مطلوب | رابط لصفحة معيّنة يؤدي إلى إجراء (أي ينقل المستخدم إلى صفحة تسجيل الدخول إلى التطبيق) |
| صورة | اختيارية: إذا لم يتم تقديمها، يجب تقديم سمة "العنوان" (Title) |
الصورة المعروضة على البطاقة صور بنسبة عرض إلى ارتفاع 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());
deleteRecommendationsClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعات الاقتراحات.
Kotlin
client.deleteRecommendationsClusters()
Java
client.deleteRecommendationsClusters();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعات الاقتراحات. في حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الاحتفاظ بالحالة الحالية.
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 مع تضمين السبب كرمز خطأ.
| رمز الخطأ | ملاحظة |
|---|---|
SERVICE_NOT_FOUND |
الخدمة غير متاحة على الجهاز المحدّد. |
SERVICE_NOT_AVAILABLE |
تتوفّر الخدمة على الجهاز المحدّد، ولكنّها غير متاحة في وقت المكالمة (على سبيل المثال، تم إيقافها صراحةً). |
SERVICE_CALL_EXECUTION_FAILURE |
تعذّر تنفيذ المهمة بسبب مشاكل في سلاسل المحادثات. وفي هذه الحالة، يمكن إعادة المحاولة. |
SERVICE_CALL_PERMISSION_DENIED |
لا يُسمح للمتصل بإجراء مكالمة الخدمة. |
SERVICE_CALL_INVALID_ARGUMENT |
يحتوي الطلب على بيانات غير صالحة (على سبيل المثال، أكثر من العدد المسموح به من المجموعات). |
SERVICE_CALL_INTERNAL |
حدث خطأ في الخدمة. |
SERVICE_CALL_RESOURCE_EXHAUSTED |
يتم إجراء طلب الخدمة بشكل متكرر جدًا. |
الخطوة 3: التعامل مع الأهداف التي يتم بثها
بالإضافة إلى إجراء طلبات بيانات من واجهة برمجة التطبيقات لنشر المحتوى من خلال مهمة، يجب أيضًا إعداد
BroadcastReceiver لتلقّي
طلب نشر المحتوى.
الهدف من عمليات البث هو إعادة تفعيل التطبيق وفرض مزامنة البيانات. لم يتم تصميم أهداف البث ليتم إرسالها بشكل متكرر. ولا يتم تشغيلها إلا عندما تحدّد خدمة Engage أنّ المحتوى قد يكون قديمًا (على سبيل المثال، عمره أسبوع). بهذه الطريقة، يمكننا أن نضمن بشكل أكبر حصول المستخدم على تجربة محتوى جديدة، حتى إذا لم يتم تشغيل التطبيق لفترة طويلة.
يجب إعداد BroadcastReceiver بالطريقتَين التاليتَين:
يمكنك تسجيل مثيل لفئة
BroadcastReceiverديناميكيًا باستخدامContext.registerReceiver(). يتيح ذلك الاتصال من التطبيقات التي لا تزال نشطة في الذاكرة.
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continuation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
يجب الإعلان بشكل ثابت عن عملية التنفيذ باستخدام علامة
<receiver>في ملفAndroidManifest.xml. يسمح هذا للتطبيق بتلقي أهداف البث عندما لا يكون قيد التشغيل، كما يسمح للتطبيق بنشر المحتوى.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
يتم إرسال الطلبات التالية من خلال الخدمة:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONننصحك ببدء مكالمةpublishRecommendationClustersعند تلقّي هذا الغرض.com.google.android.engage.action.PUBLISH_FEATUREDننصحك ببدء مكالمةpublishFeaturedClusterعند تلقّي هذا الغرض.com.google.android.engage.action.PUBLISH_CONTINUATIONننصحك ببدء مكالمةpublishContinuationClusterعند تلقّي هذا الغرض.
سير عمل الدمج
للحصول على دليل مفصّل حول التحقّق من عملية الدمج بعد اكتمالها، يُرجى الاطّلاع على سير عمل دمج المطوّرين في Engage.
الأسئلة الشائعة
يمكنك الاطّلاع على الأسئلة الشائعة حول Engage SDK لمعرفة المزيد.
معلومات الاتصال
يُرجى التواصل مع engage-developers@google.com إذا كانت لديك أي أسئلة أثناء عملية الدمج.
الخطوات التالية
بعد إكمال عملية الدمج هذه، تكون خطواتك التالية كما يلي:
- أرسِل رسالة إلكترونية إلى
engage-developers@google.comوأرفِق حزمة APK المدمجة والجاهزة للاختبار من قِبل Google. - تُجري Google عملية تحقّق ومراجعات داخلية للتأكّد من أنّ عملية الدمج تعمل على النحو المتوقّع. إذا كانت هناك تغييرات مطلوبة، ستتواصل معك Google لإطلاعك على أي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، ستتواصل معك Google لإعلامك بأنّه يمكنك البدء في نشر حزمة APK المحدَّثة والمدمجة على "متجر Play".
- بعد أن تؤكّد Google نشر حزمة APK المعدَّلة على "متجر Google Play"، قد يتم نشر مجموعات الاقتراحات والمحتوى المميّز والمتابعة وإظهارها للمستخدمين.