تعزيز التفاعل مع التطبيق من خلال الوصول إلى المستخدمين في الأماكن التي يتواجدون فيها يمكنك دمج حزمة Engage SDK لتقديم اقتراحات مخصّصة ومحتوى مواصلة مباشرةً للمستخدمين على مساحات عرض متعددة على الجهاز فقط، مثل المجموعات ومساحة الترفيه و"متجر Play". تضيف عملية الدمج أقل من 50 كيلوبايت (مضغوطة) إلى متوسط حجم حزمة APK، وتستغرق معظم التطبيقات حوالي أسبوع من وقت المطوّر. يمكنك الاطّلاع على مزيد من المعلومات في الموقع الإلكتروني الخاص بالأنشطة التجارية.
يحتوي هذا الدليل على تعليمات للشركاء المطوّرين من أجل عرض المحتوى الصوتي (الموسيقى وبرامج البودكاست والكتب المسموعة والراديو المباشر) على مساحات عرض المحتوى في Engage.
تفاصيل عملية الدمج
المصطلحات
يشمل هذا الدمج ثلاثة أنواع من المجموعات: الاقتراحات والمتابعة والمحتوى المميّز.
تعرض مجموعات الاقتراحات اقتراحات مخصّصة حول المحتوى الذي يمكنك قراءته من أحد شركاء المطوّرين.
تتّخذ اقتراحاتك البنية التالية:
مجموعة الاقتراحات: هي طريقة عرض في واجهة المستخدم تتضمّن مجموعة من الاقتراحات من شريك مطوّر واحد.
الشكل 1. واجهة مستخدم "مساحة الترفيه" تعرض مجموعة اقتراحات من شريك واحد. العنصر: هو كائن يمثّل عنصرًا واحدًا في مجموعة. يمكن أن يكون العنصر قائمة تشغيل أو كتابًا مسموعًا أو بودكاست أو غير ذلك. راجِع القسم توفير بيانات الكيانات للاطّلاع على قائمة بأنواع الكيانات المتوافقة.
الشكل 2. واجهة مستخدم "مساحة الترفيه" تعرض كيانًا واحدًا ضمن مجموعة اقتراحات خاصة بشريك واحد
تعرض مجموعة المحتوى المقترَح المحتوى الصوتي الذي تفاعل معه المستخدمون مؤخرًا من عدة شركاء مطوّرين في مجموعة واحدة ضمن واجهة المستخدم. سيُسمح لكل شريك من شركاء المطوّرين ببث 10 عناصر كحد أقصى في مجموعة Continuation.
الشكل 3. واجهة مستخدم Entertainment Space تعرض مجموعة مستمرة تتضمّن اقتراحات غير مكتملة من عدّة شركاء (يظهر اقتراح واحد فقط حاليًا). تعرض مجموعة المحتوى المميّز مجموعة مختارة من المحتوى المقدَّم من عدة شركاء مطوّرين في مجموعة واحدة ضمن واجهة المستخدم. ستكون هناك مجموعة واحدة من المجموعات المميزة، وسيتم عرضها بالقرب من أعلى واجهة المستخدم مع تحديد موضعها كأولوية فوق جميع مجموعات الاقتراحات. سيُسمح لكل شريك مطوّر ببث ما يصل إلى 10 عناصر في مجموعة "المحتوى المميّز".
الشكل 4. واجهة مستخدم "مساحة الترفيه" تعرض مجموعة "محتوى مقترَح" تتضمّن اقتراحات من شركاء متعدّدين (يظهر اقتراح واحد فقط حاليًا).
العمل التحضيري
الحد الأدنى لمستوى واجهة برمجة التطبيقات: 19
أضِف مكتبة com.google.android.engage:engage-core إلى تطبيقك باتّباع الخطوات التالية:
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.5.11'
}
ملخّص
ويستند التصميم إلى تنفيذ خدمة مرتبطة.
تخضع البيانات التي يمكن للعميل نشرها للحدود التالية لأنواع المجموعات المختلفة:
| نوع المجموعة | حدود المجموعات | الحدّ الأقصى لعدد العناصر في مجموعة |
|---|---|---|
| مجموعات الاقتراحات | 7 على الأكثر | 50 بحد أقصى |
| مجموعة المتابعة | عملية واحدة بحد أقصى | 20 على الأكثر |
| المجموعة المميزة | عملية واحدة بحد أقصى | 20 على الأكثر |
الخطوة 1: تقديم بيانات الجهة
حدّدت حزمة تطوير البرامج (SDK) عناصر مختلفة لتمثيل كل نوع من أنواع العناصر. نوفّر الكيانات التالية ضمن فئة "الاستماع":
MusicAlbumEntityMusicArtistEntityMusicTrackEntityMusicVideoEntityPlaylistEntityPodcastSeriesEntityPodcastEpisodeEntityLiveRadioStationEntityAudiobookEntity
توضّح الرسوم البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.
MusicAlbumEntity
يمثّل العنصر MusicAlbumEntity ألبومًا موسيقيًا (مثلاً، Midnights
للفنانة "تايلور سويفت").
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | تمثّل هذه السمة عنوان الألبوم الموسيقي. |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | مطلوبة |
الرابط لصفحة معيّنة في تطبيق مقدّم الخدمة يتضمّن تفاصيل حول ألبوم الموسيقى. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| الفنانون | مطلوبة | قائمة بالفنانين في ألبوم الموسيقى |
| معرّف الموارد المنتظم (URI) للتشغيل | اختياري |
رابط لصفحة في التطبيق يبدأ بتشغيل الألبوم في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| عدد الأغاني | اختياري | تمثّل هذه السمة عدد الأغاني في ألبوم الموسيقى. |
| الأنواع الموسيقية | اختياري | قائمة بأنواع الموسيقى في الألبوم الموسيقي |
| تنسيق الألبوم | اختياري |
ألبوم (يشمل الألبوم الطويل والألبوم المزدوج) ألبوم قصير SINGLE شريط الأغاني |
| شركات الإنتاج الموسيقي | اختياري | قائمة بشركات الإنتاج الموسيقي المرتبطة بالألبوم |
| تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا كان ألبوم الموسيقى تم تنزيله على الجهاز. |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| تاريخ الإصدار | اختياري | تاريخ إصدار الألبوم بالملي ثانية منذ بداية حقبة معيّنة |
| المدة | اختياري | تمثّل هذه السمة مدة الألبوم بالملي ثانية. |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". عدد صحيح بين 0 و100 |
MusicArtistEntity
يمثّل العنصر MusicArtistEntity فنانًا موسيقيًا (مثل أديل).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | تمثّل هذه السمة اسم الفنّان الموسيقي. |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | مطلوبة |
تمثّل هذه السمة الرابط لصفحة معيّنة في تطبيق مقدّم الخدمة تتضمّن تفاصيل حول الفنان الموسيقي. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| معرّف الموارد المنتظم (URI) للتشغيل | اختياري |
الرابط لصفحة معيّنة في التطبيق الذي يبدأ بتشغيل أغاني الفنان في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
MusicTrackEntity
يمثّل العنصر MusicTrackEntity مقطعًا موسيقيًا (مثلاً، Yellow لفرقة Coldplay).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | تمثّل هذه السمة عنوان المقطع الموسيقي. |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) للتشغيل | مطلوبة |
تمثّل هذه السمة رابط صفحة في التطبيق يبدأ بتشغيل المقطع الموسيقي في تطبيق مقدّم الخدمة. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| الفنانون | مطلوبة | قائمة بالفنّانين الذين شاركوا في الأغنية |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة يعرض تفاصيل حول المقطع الموسيقي ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| المدة | اختياري | تمثّل هذه السمة مدة المقطع الصوتي بالملي ثانية. |
| ألبوم | اختياري | تمثّل هذه السمة اسم الألبوم الذي تنتمي إليه الأغنية. |
| تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا كان المقطع الموسيقي تم تنزيله على الجهاز. |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". عدد صحيح بين 0 و100 |
MusicVideoEntity
يمثّل العنصر MusicVideoEntity فيديو موسيقيًا (مثلاً،
The Weeknd - Take My Breath (الفيديو الموسيقي الرسمي)).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | تمثّل هذه السمة عنوان الفيديو الموسيقي. |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) للتشغيل | مطلوبة |
رابط لصفحة في التطبيق يبدأ بتشغيل الفيديو الموسيقي في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة يعرض تفاصيل حول الفيديو الموسيقي ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| المدة | اختياري | تمثّل هذه السمة مدة الفيديو بالملي ثانية. |
| عدد المشاهدات | اختياري | تمثّل هذه السمة عدد مشاهدات الفيديو بتنسيق نصّي حر. |
| الفنانون | اختياري | قائمة بالفنانين المشاركين في الفيديو الموسيقي |
| تقييم المحتوى | اختياري | قائمة بتقييمات المحتوى الخاصة بالأغنية |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا كان الفيديو الموسيقي تم تنزيله على الجهاز. |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". عدد صحيح بين 0 و100 |
PlaylistEntity
يمثّل العنصر PlaylistEntity قائمة تشغيل للمحتوى الموسيقي (مثل قائمة التشغيل "أهم 10 أغاني في الولايات المتحدة").
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | تمثّل هذه السمة عنوان قائمة التشغيل. |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) للتشغيل | مطلوبة |
تمثّل هذه السمة رابطًا لصفحة معيّنة يبدأ بتشغيل قائمة تشغيل الموسيقى في تطبيق مقدّم الخدمة. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة يعرض تفاصيل حول قائمة تشغيل الموسيقى ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| المدة | اختياري | تعرض هذه السمة مدة قائمة التشغيل بالمللي ثانية. |
| عدد الأغاني | اختياري | تمثّل هذه السمة عدد الأغاني في قائمة التشغيل الموسيقية. |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل قائمة التشغيل على الجهاز. |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". عدد صحيح بين 0 و100 |
PodcastSeriesEntity
يمثّل العنصر PodcastSeriesEntity سلسلة بودكاست (على سبيل المثال، This
American Life).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | عنوان سلسلة حلقات البودكاست |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | مطلوبة |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة يعرض تفاصيل حول سلسلة البودكاست ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| معرّف الموارد المنتظم (URI) للتشغيل | اختياري |
رابط لصفحة معيّنة يبدأ بتشغيل سلسلة البودكاست في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| عدد الحلقات | اختياري | عدد الحلقات في سلسلة البودكاست |
| اسم الإنتاج | اختياري | تمثّل اسم إنتاج سلسلة البودكاست. |
| المضيفات | اختياري | تمثّل قائمة بمضيفي سلسلة حلقات البودكاست. |
| الأنواع الموسيقية | اختياري | قائمة بأنواع سلسلة حلقات البودكاست |
| تم تنزيلها على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا كان البودكاست قد تم تنزيله على الجهاز. |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
PodcastEpisodeEntity
يمثّل العنصر PodcastEpisodeEntity سلسلة بودكاست (على سبيل المثال،
Spark Bird، الحلقة 754 من This American Life).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | عنوان حلقة البودكاست |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) للتشغيل | مطلوبة |
رابط لصفحة في التطبيق يبدأ بتشغيل حلقة البودكاست في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| عنوان سلسلة حلقات البودكاست | مطلوبة | تمثّل هذه السمة اسم سلسلة البودكاست التي تنتمي إليها الحلقة. |
| المدة | مطلوبة | تمثّل هذه السمة مدة حلقة البودكاست بالمللي ثانية. |
| تاريخ النشر | مطلوبة | تاريخ نشر البودكاست (بالمللي ثانية منذ بدء الحقبة) |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة يعرض تفاصيل حول حلقة البودكاست ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| اسم الإنتاج | اختياري | تمثّل اسم إنتاج سلسلة البودكاست. |
| فهرس الحلقات | اختياري | فهرس الحلقة في المسلسل (الفهرس الأول هو 1) |
| المضيفات | اختياري | قائمة بمقدّمي حلقة البودكاست |
| الأنواع الموسيقية | اختياري | قائمة بأنواع حلقة البودكاست |
| تم تنزيلها على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل حلقة البودكاست على الجهاز. |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| مادة وسائط مرئية | اختياري | قيمة منطقية تشير إلى ما إذا كانت حلقة البودكاست تتضمّن محتوى فيديو |
| لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا يجب ضبط قيمة العناصر التي تتضمّن مواد فاضحة أو تحذيرًا بشأن إشراف الوالدَين على TRUE. تظهر العناصر التي تتضمّن محتوًى فاضحًا مع العلامة "E". |
| نوع "الاستماع إلى محتوى الويب التالي" | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المتابعة" TYPE_CONTINUE - استئناف تشغيل عنصر صوتي غير مكتمل TYPE_NEXT - مواصلة سلسلة من الأغاني TYPE_NEW - تم إصداره حديثًا. |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". عدد صحيح بين 0 و100 |
LiveRadioStationEntity
يمثّل العنصر LiveRadioStationEntity محطة راديو مباشرة (على سبيل المثال، 98.1 The Breeze).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | عنوان محطة الراديو التي تبثّ البث المباشر |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
| معرّف الموارد المنتظم (URI) للتشغيل | مطلوبة |
تمثّل هذه السمة رابطًا لصفحة معيّنة يبدأ بتشغيل محطة الراديو في تطبيق مقدّم الخدمة. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة للاطّلاع على تفاصيل حول محطة الراديو ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| التردد | اختياري | التردد الذي يتم بث محطة الراديو عليه (مثلاً، "98.1 FM"). |
| عنوان العرض | اختياري | البرنامج الحالي الذي يتم تشغيله على محطة الراديو |
| المضيفات | اختياري | قائمة بمضيفي المحطة الإذاعية |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| وقت آخر تفاعل | اختياري |
يُنصح باستخدامها للسلع في مجموعة "المنتجات المشابهة". يمكن استخدامها في الترتيب. بالملي ثانية منذ بدء الفترة |
AudiobookEntity
يمثّل العنصر AudiobookEntity كتابًا مسموعًا (على سبيل المثال، الكتاب المسموع
لكتاب Becoming من تأليف ميشيل أوباما).
| السمة | المتطلب | الملاحظات |
|---|---|---|
| الاسم | مطلوبة | |
| صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. يُرجى الاطّلاع على مواصفات الصور للحصول على إرشادات. |
| مؤلِّف | مطلوبة | يجب تقديم اسم مؤلف واحد على الأقل. |
| معرّف الموارد المنتظم (URI) لرابط اتّخاذ الإجراء | مطلوبة |
تمثّل هذه السمة الرابط لصفحة معيّنة في تطبيق موفِّر المحتوى الخاص بالكتاب الصوتي. ملاحظة: يمكنك استخدام الروابط لصفحات في التطبيق لتحديد مصدر الإحالة. يُرجى الرجوع إلى الأسئلة الشائعة |
| راوٍ | اختياري | يجب تقديم اسم راوٍ واحد على الأقل. |
| تاريخ النشر | اختياري | بالملي ثانية منذ بدء الحقبة إذا تم توفيرها |
| الوصف | اختياري | يجب أن يتألف من 200 حرف كحد أقصى في حال توفّره. |
| السعر | اختياري | حقل التعبئة النصّية الحرّة |
| المدة | اختياري | يجب أن تكون القيمة موجبة إذا تم تقديمها. |
| النوع | اختياري | قائمة بأنواع الكتب المرتبطة بالكتاب |
| اسم السلسلة | اختياري | اسم السلسلة التي ينتمي إليها الكتاب المسموع (على سبيل المثال، هاري بوتر) |
| فهرس وحدة السلسلة | اختياري | تمثّل هذه السمة فهرس الكتاب الصوتي في السلسلة، حيث يشير الرقم 1 إلى الكتاب الصوتي الأول في السلسلة. على سبيل المثال، إذا كان كتاب هاري بوتر وسجين أزكابان هو الكتاب الثالث في السلسلة، يجب ضبط هذه القيمة على 3. |
| نوع الكتاب الذي يمكن مواصلة قراءته | اختياري |
TYPE_CONTINUE - استئناف قراءة كتاب غير مكتمل TYPE_NEXT - مواصلة سلسلة من الأغاني TYPE_NEW - تم إصداره حديثًا. |
| مدة التفاعل الأخيرة | مطلوب بشكل مشروط | يجب تقديمها عندما يكون العنصر في مجموعة "المتابعة". بالملّي ثانية منذ بدء الفترة |
| النسبة المئوية لاكتمال التقدم | مطلوب بشكل مشروط |
يجب تقديمها عندما يكون العنصر في مجموعة "المتابعة". يمكن أن تكون الكتب المسموعة *التي تم شراؤها حديثًا* جزءًا من مجموعة "مواصلة القراءة". يجب أن تكون القيمة أكبر من 0 وأقل من 100. |
| DisplayTimeWindow - ضبط فترة زمنية لعرض المحتوى على السطح | ||
| الطابع الزمني للبدء | اختياري |
الطابع الزمني الخاص بالحقبة الذي يجب أن يظهر بعده المحتوى على مساحة العرض. في حال عدم ضبط هذه السياسة، يكون المحتوى مؤهَّلاً للعرض على المساحة. بالملّي ثانية منذ بدء الفترة |
| الطابع الزمني للنهاية | اختياري |
الطابع الزمني لوقت بدء العصر الذي يتوقف بعده عرض المحتوى على مساحة العرض. في حال عدم ضبط هذه السياسة، يكون المحتوى مؤهَّلاً للعرض على المساحة. بالملّي ثانية منذ بدء الفترة |
مواصفات الصور
في ما يلي المواصفات المطلوبة لمواد عرض الصور:
| نسبة العرض إلى الارتفاع | المتطلب | الحدّ الأدنى لعدد وحدات البكسل | وحدات البكسل المقترَحة |
|---|---|---|---|
| مربّعة (1x1) | مطلوبة | 300x300 | 1200x1200 |
| أفقية (1.91x1) | اختياري | 600x314 | 1200x628 |
| عمودية (4x5) | اختياري | 480x600 | 960x1200 |
تنسيقات الملفات
PNG أو JPG أو GIF ثابت أو WebP
الحد الأقصى لحجم الملف
5120 كيلوبايت
اقتراحات إضافية
- مساحة القسم المهم في الصور: ضَع المحتوى المهم في الوسط ليشغل 80% من الصورة.
أمثلة
MusicAlbumEntity musicAlbumEntity =
new MusicAlbumEntity.Builder()
.setName(NAME)
.addPosterImage(new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.setPlayBackUri("https://play.google/album/play")
.setInfoPageUri("https://play.google/album/info")
.setDescription("A description of this album.")
.addArtist("Artist")
.addGenre("Genre")
.addMusicLabel("Label")
.addContentRating("Rating")
.setSongsCount(960)
.setReleaseDateEpochMillis(1633032895L)
.setDurationMillis(1633L)
.build();
AudiobookEntity audiobookEntity =
new AudiobookEntity.Builder()
.setName("Becoming")
.addPosterImage(new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.addAuthor("Michelle Obama")
.addNarrator("Michelle Obama")
.setActionLinkUri(
Uri.parse("https://play.google/audiobooks/1"))
.setDurationMillis(16335L)
.setPublishDateEpochMillis(1633032895L)
.setDescription("An intimate, powerful, and inspiring memoir")
.setPrice("$16.95")
.addGenre("biography")
.build();
الخطوة 2: تقديم بيانات المجموعة
ننصح بتنفيذ مهمة نشر المحتوى في الخلفية (على سبيل المثال، باستخدام WorkManager) وجدولتها بانتظام أو استنادًا إلى حدث معيّن (على سبيل المثال، في كل مرة يفتح فيها المستخدم التطبيق أو عندما يضيف المستخدم عنصرًا إلى سلة التسوق).
تتحمّل "AppEngagePublishClient" مسؤولية نشر المجموعات. تتوفّر واجهات برمجة التطبيقات التالية في العميل:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishContinuationClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteContinuationClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
تُستخدَم واجهة برمجة التطبيقات هذه للتأكّد من أنّ الخدمة متاحة للدمج وما إذا كان يمكن عرض المحتوى على الجهاز.
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content
// publish calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
تُستخدَم واجهة برمجة التطبيقات هذه لنشر قائمة بعناصر RecommendationCluster.
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Trending music")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Trending music")
.build())
.build());
عندما تتلقّى الخدمة الطلب، يتم تنفيذ الإجراءات التالية ضمن معاملة واحدة:
- تتم إزالة بيانات
RecommendationClusterالحالية من حساب المطوّر الشريك. - يتم تحليل البيانات من الطلب وتخزينها في "مجموعة اقتراحات" المعدَّلة.
في حال حدوث خطأ، يتم رفض الطلب بأكمله ويتم الحفاظ على الحالة الحالية.
publishFeaturedCluster
تُستخدَم واجهة برمجة التطبيقات هذه لنشر قائمة بعناصر FeaturedCluster.
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
عندما تتلقّى الخدمة الطلب، يتم تنفيذ الإجراءات التالية ضمن معاملة واحدة:
- تتم إزالة بيانات
FeaturedClusterالحالية من حساب المطوّر الشريك. - يتم تحليل البيانات من الطلب وتخزينها في "المجموعة المميّزة" المعدَّلة.
في حال حدوث خطأ، يتم رفض الطلب بأكمله ويتم الحفاظ على الحالة الحالية.
publishContinuationCluster
يتم استخدام واجهة برمجة التطبيقات هذه لنشر عنصر ContinuationCluster.
Kotlin
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
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_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من جميع المجموعات المتطابقة مع أنواع المجموعات المحدّدة. يمكن للعملاء اختيار تمرير نوع واحد أو عدة أنواع من المجموعات. في حال حدوث خطأ، يتم رفض الطلب بأكمله ويتم الحفاظ على الحالة الحالية.
معالجة الأخطاء
ننصح بشدة بالاستماع إلى نتيجة المهمة من واجهات برمجة التطبيقات الخاصة بالنشر، حتى يمكن اتخاذ إجراء متابعة لاسترداد مهمة ناجحة وإعادة إرسالها.
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
يتم عرض الخطأ كـ AppEngageException مع تضمين السبب كرمز خطأ.
| رمز الخطأ | اسم الخطأ | ملاحظة |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
الخدمة غير متاحة على الجهاز المحدّد. |
2 |
SERVICE_NOT_AVAILABLE |
تتوفّر الخدمة على الجهاز المحدّد، ولكنّها غير متاحة في وقت المكالمة (على سبيل المثال، تم إيقافها بشكل صريح). |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
تعذّر تنفيذ المهمة بسبب مشاكل في سلاسل التعليمات. في هذه الحالة، يمكن إعادة المحاولة. |
4 |
SERVICE_CALL_PERMISSION_DENIED |
لا يُسمح للمتصل بإجراء مكالمة الخدمة. |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
يحتوي الطلب على بيانات غير صالحة (على سبيل المثال، أكثر من عدد المجموعات المسموح به). |
6 |
SERVICE_CALL_INTERNAL |
حدث خطأ من جهة الخدمة. |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
يتم إجراء طلب الخدمة بشكل متكرّر جدًا. |
الخطوة 3: معالجة أغراض البث
بالإضافة إلى إجراء طلبات البيانات من واجهة برمجة التطبيقات لنشر المحتوى من خلال مهمة، يجب أيضًا إعداد BroadcastReceiver لتلقّي طلب نشر المحتوى.
والهدف من أغراض البث هو بشكل أساسي إعادة تفعيل التطبيق وفرض مزامنة البيانات. لم يتم تصميم مكوّنات البث ليتم إرسالها بشكل متكرر جدًا. لا يتم تفعيلها إلا عندما تحدّد "خدمة التفاعل" أنّ المحتوى قد يكون قديمًا (على سبيل المثال، مضى أسبوع على نشره). بهذه الطريقة، يمكن للمستخدم أن يثق أكثر في الحصول على تجربة محتوى جديدة، حتى إذا لم يتم تنفيذ التطبيق لفترة طويلة من الوقت.
يجب إعداد BroadcastReceiver بإحدى الطريقتَين التاليتَين:
تسجيل مثيل لفئة
BroadcastReceiverبشكل ديناميكي باستخدامContext.registerReceiver()يتيح ذلك التواصل من التطبيقات التي لا تزال نشطة في الذاكرة.
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continuation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
عليك تعريف عملية التنفيذ بشكل ثابت باستخدام العلامة
<receiver>في ملفAndroidManifest.xml. يتيح ذلك للتطبيق تلقّي نوايا البث عندما لا يكون قيد التشغيل، كما يتيح له نشر المحتوى.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
سيتم إرسال الأهداف التالية من خلال الخدمة:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONيُنصح ببدء مكالمةpublishRecommendationClustersعند تلقّي هذه النية.com.google.android.engage.action.PUBLISH_FEATUREDيُنصح ببدء مكالمةpublishFeaturedClusterعند تلقّي هذا الغرض.com.google.android.engage.action.PUBLISH_CONTINUATIONيُنصح ببدء مكالمةpublishContinuationClusterعند تلقّي هذا الغرض.
سير عمل الدمج
للحصول على دليل تفصيلي حول كيفية إثبات صحة عملية الدمج بعد اكتمالها، يُرجى الاطّلاع على سير عمل دمج المطوّرين في Engage.
الأسئلة الشائعة
يمكنك الاطّلاع على الأسئلة الشائعة حول حزمة Engage SDK.
معلومات الاتصال
يُرجى التواصل مع
engage-developers@google.com في حال
كانت لديك أي أسئلة أثناء عملية الدمج. سيردّ عليك فريقنا في أقرب وقت ممكن.
الخطوات التالية
بعد إكمال عملية الربط هذه، إليك الخطوات التالية:
- أرسِل رسالة إلكترونية إلى
engage-developers@google.comوأرفِق بها حِزمة APK المدمَجة الجاهزة للاختبار من قِبل Google. - ستُجري Google عملية تحقّق ومراجعة داخليًا للتأكّد من أنّ عملية الدمج تعمل على النحو المتوقّع. إذا كانت هناك حاجة إلى إجراء تغييرات، ستتواصل معك Google لإطلاعك على أي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، ستتواصل معك Google لإعلامك بأنّه يمكنك بدء نشر حزمة APK المعدَّلة والمدمجة على "متجر Play".
- بعد أن يؤكّد Google أنّه تم نشر حِزمة APK المعدَّلة على "متجر Play"، سيتم نشر المجموعات مقترَحة ومميّزة ومتابعة وستكون مرئية للمستخدمين.