يمكنك زيادة التفاعل مع التطبيق من خلال الوصول إلى المستخدمين أينما كانوا. يمكنك دمج حزمة Engage SDK لتقديم اقتراحات مخصَّصة ومحتوى متواصل إلى المستخدِمين مباشرةً على مساحات عرض متعددة على الأجهزة، مثل المجموعات ومساحة الترفيه و"متجر Play". يضيف الدمج أقل من 50 كيلوبايت (مضغوط) إلى متوسط حجم حزمة APK، ويتطلّب دمج معظم التطبيقات أسبوعًا تقريبًا من وقت المطوّر. يمكنك الاطّلاع على مزيد من المعلومات على موقعنا الإلكتروني المخصّص للأنشطة التجارية.
يحتوي هذا الدليل على تعليمات لشركاء المطوّرين لإرسال محتوى صوتي (موسيقى وملفات بودكاست وكتب مسموعة ومحطات إذاعية مباشرة) إلى مساحات عرض المحتوى في Engage.
تفاصيل الدمج
المصطلحات
يتضمّن هذا الدمج أنواع المجموعات الثلاثة التالية: الاقتراح، المتابعة، والعرض.
تعرض مجموعات الاقتراحات اقتراحات مخصّصة للمحتوى الذي يمكنك قراءته من مطوّر فردي شريك.
تتّبع الاقتراحات البنية التالية:
مجموعة الاقتراحات: عرض واجهة مستخدم يحتوي على مجموعة من الاقتراحات من شريك المطوّر نفسه.
الشكل 1. واجهة مستخدم "مساحة الترفيه" تعرض مجموعة اقتراحات من شريك واحد. الكيان: هو عنصر يمثّل عنصرًا واحدًا في مجموعة. يمكن أن يكون العنصر قائمة تشغيل أو كتابًا مسموعًا أو بودكاست وغير ذلك. اطّلِع على قسم تقديم data للعناصر للحصول على قائمة بأنواع العناصر المتوافقة.
الشكل 2. واجهة مستخدم "مساحة الترفيه" تعرض كيانًا واحدًا ضمن مجموعة اقتراحات خاصة بشريك واحد.
تعرِض مجموعة المتابعة المحتوى الصوتي الذي تفاعل معه المستخدمون مؤخرًا من شركاء مطوّرين متعدّدين في مجموعة واحدة لواجهة المستخدم. سيتم السماح لكل شريك مطوِّر ببث 10 عناصر كحدّ أقصى في مجموعة المتابعة.
الشكل 3. واجهة مستخدم "مساحة الترفيه" تعرض مجموعة محتوى متسلسلاً مع اقتراحات غير مكتملة من شركاء عدّة (يظهر اقتراح واحد فقط حاليًا). تعرض مجموعة التطبيقات المميّزة مجموعة من التطبيقات من عدة شركاء مطوّرين في مجموعة واحدة لواجهة المستخدم. ستكون هناك مجموعة واحدة مميّزة ، وستظهر بالقرب من أعلى واجهة المستخدم مع وضع الأولوية فوق كل مجموعات الاقتراحات. سيتم السماح لكل شريك مطوّر ببث ما يصل إلى 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.2'
}
ملخّص
يستند التصميم إلى تنفيذ خدمة مرتبطة.
تخضع البيانات التي يمكن للعميل نشرها للحدود التالية لأنواع المجموعات المختلفة:
نوع المجموعة | حدود المجموعات | الحد الأقصى لعدد العناصر في مجموعة |
---|---|---|
مجموعات الاقتراحات | 7 بحد أقصى | 50 بحد أقصى |
مجموعة المتابعة | 1 بحد أقصى | 20 بحد أقصى |
مجموعة مميّزة | 1 بحد أقصى | 20 بحد أقصى |
الخطوة 1: تقديم بيانات العنصر
حدّدت حزمة تطوير البرامج (SDK) كيانات مختلفة لتمثيل كل نوع من أنواع العناصر. تتوفّر الكيانات التالية لفئة "الاستماع":
MusicAlbumEntity
MusicArtistEntity
MusicTrackEntity
MusicVideoEntity
PlaylistEntity
PodcastSeriesEntity
PodcastEpisodeEntity
LiveRadioStationEntity
AudiobookEntity
توضّح الرسوم البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.
MusicAlbumEntity
يمثّل العنصر MusicAlbumEntity
ألبومًا موسيقيًا (مثل Midnights
لـ Taylor Swift).
السمة | المتطلب | الملاحظات |
---|---|---|
الاسم | مطلوبة | عنوان الألبوم الموسيقي. |
صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
معرّف الموارد المنتظم (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 (Official Music Video)).
السمة | المتطلب | الملاحظات |
---|---|---|
الاسم | مطلوبة | عنوان الفيديو الموسيقي |
صور الملصقات | مطلوبة | يجب تقديم صورة واحدة على الأقل. راجِع مواصفات الصور للحصول على إرشادات. |
معرّف الموارد المنتظم (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 هو أول كتاب مسموع في السلسلة. على سبيل المثال، إذا كان Harry Potter and the Prisoner of Azkaban هو الكتاب الثالث في السلسلة، يجب ضبط هذا الحقل على 3. |
مواصلة نوع الكتاب | اختياري |
TYPE_CONTINUE: استئناف قراءة كتاب غير مكتمل TYPE_NEXT: للمتابعة في سلسلة جديدة. TYPE_NEW: تم إصداره مؤخرًا. |
مدة التفاعل الأخيرة | مطلوبة بشروط | يجب تقديمها عندما يكون العنصر في مجموعة "المتابعة". بالملي ثانية منذ بداية حساب الفترة |
النسبة المئوية للتقدّم | مطلوبة بشروط |
يجب تقديمها عندما يكون العنصر في مجموعة "المتابعة". يمكن أن تكون الكتب المسموعة *المكتسَبة حديثًا* جزءًا من مجموعة "مواصلة القراءة". يجب أن تكون القيمة أكبر من 0 وأقل من 100. |
DisplayTimeWindow: لضبط فترة زمنية لعرض محتوى على المساحة | ||
الطابع الزمني للبدء | اختياري |
الطابع الزمني لبدء حساب الفترة الذي من المفترض أن يظهر المحتوى بعده على سطح الشاشة وفي حال عدم ضبط هذه السياسة، يكون المحتوى مؤهّلاً للعرض على المساحة. بالملي ثانية منذ بداية حساب الفترة |
الطابع الزمني للنهاية | اختياري |
الطابع الزمني لبدء الفترة التي بعد انتهائها لن يتم عرض المحتوى على السطح. وفي حال عدم ضبط هذه السياسة، يكون المحتوى مؤهّلاً للعرض على المساحة. بالملي ثانية منذ بداية حساب الفترة |
مواصفات الصور
في ما يلي المواصفات المطلوبة لمواد عرض الصور:
نسبة العرض إلى الارتفاع | المتطلب | الحدّ الأدنى لعدد وحدات البكسل | وحدات البكسل المقترَحة |
---|---|---|---|
مربّع (1×1) | مطلوبة | 300 × 300 | 1200 × 1200 |
أفقية (1.91x1) | اختياري | 600 × 314 | 1200×628 |
عمودي (4×5) | اختياري | 480×600 | 960x1200 |
تنسيقات الملفات
PNG أو JPG أو GIF ثابت أو WebP
الحد الأقصى لحجم الملف
5,120 كيلوبايت
اقتراحات إضافية
- المساحة الآمنة للصور: ضَع المحتوى المهم في الوسط بحيث يشغل 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
" مسؤولية نشر المجموعات. تتوفّر منصّة برمجة التطبيقات التالية في العميل:
isServiceAvailable
publishRecommendationClusters
publishFeaturedCluster
publishContinuationCluster
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
deleteFeaturedCluster
deleteContinuationCluster
deleteUserManagementCluster
deleteClusters
isServiceAvailable
تُستخدَم واجهة برمجة التطبيقات هذه للتحقّق مما إذا كانت الخدمة متاحة للدمج وما إذا كان يمكن عرض المحتوى على الجهاز.
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content
// publish calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
تُستخدَم واجهة برمجة التطبيقات هذه لنشر قائمة بعناصر RecommendationCluster
.
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("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
الحالية من حساب شريك المطوّر. - يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف "مجموعة المتابعة" المعدَّل.
في حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الحفاظ على الحالة الحالية.
publishUserAccountManagementRequest
تُستخدَم واجهة برمجة التطبيقات هذه لنشر بطاقة "تسجيل الدخول". يوجّه إجراء تسجيل الدخول المستخدمين إلى صفحة تسجيل الدخول في التطبيق حتى يتمكّن التطبيق من نشر المحتوى (أو تقديم محتوى أكثر تخصيصًا).
البيانات الوصفية التالية هي جزء من بطاقة تسجيل الدخول:
السمة | المتطلب | الوصف |
---|---|---|
معرّف الموارد المنتظم (URI) للإجراء | مطلوب | رابط لصفحة في التطبيق (أي الانتقال إلى صفحة تسجيل الدخول إلى التطبيق) |
صورة | اختيارية - يجب تقديم العنوان في حال عدم تقديمه |
الصورة المعروضة على البطاقة صور بنسبة عرض إلى ارتفاع 16×9 بدرجة دقة 1264×712 |
العنوان | اختيارية - يجب تقديم صورة في حال عدم توفّرها | العنوان المعروض على البطاقة |
نص الإجراء | اختياري | النص المعروض في عبارة الحثّ على اتّخاذ إجراء (مثل "تسجيل الدخول") |
العنوان الفرعي | اختياري | ترجمة اختيارية على البطاقة |
Kotlin
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
عندما تتلقّى الخدمة الطلب، يتم تنفيذ الإجراءات التالية في غضون معاملة واحدة:
- تتم إزالة بيانات
UserAccountManagementCluster
الحالية من المطوّر الشريك. - يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف تعريف clustered UserAccountManagementCluster المعدَّل.
في حال حدوث خطأ، يتم رفض الطلب بالكامل ويتم الحفاظ على الحالة الحالية.
updatePublishStatus
إذا لم يتم نشر أيّ من المجموعات لأيّ سبب داخلي متعلق بالنشاط التجاري، ننصح بشدّة بتعديل حالة النشر باستخدام واجهة برمجة التطبيقات updatePublishStatus. هذا أمر مهم للأسباب التالية :
- من المهم تقديم الحالة في جميع السيناريوهات، حتى عند نشر المحتوى (STATUS == PUBLISHED)، وذلك لملء لوحات البيانات التي تستخدِم هذه الحالة الواضحة للتعبير عن حالة الدمج والمقاييس الأخرى.
- إذا لم يتم نشر أي محتوى ولكن حالة الدمج ليست متعطّلة (STATUS == NOT_PUBLISHED)، يمكن أن تتجنب Google تنشيط التنبيهات في لوحات بيانات صحة التطبيق. يؤكد ذلك عدم نشر المحتوى بسبب حالة متوقّعة من وجهة نظر مقدّم الخدمة.
- ويساعد المطوّرين في تقديم إحصاءات عن الحالات التي يتم فيها نشر البيانات مقارنةً بحالات عدم نشرها.
- قد تستخدم Google رموز الحالة لحثّ المستخدم على اتّخاذ إجراءات معيّنة في التطبيق حتى يتمكّن من الاطّلاع على محتوى التطبيق أو حلّ المشكلة.
في ما يلي قائمة برموز حالة النشر المؤهَّلة :
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
إذا لم يتم نشر المحتوى بسبب عدم تسجيل دخول المستخدم، ننصح في Google بنشر بطاقة تسجيل الدخول. إذا لم يتمكّن مقدّمو الخدمة من نشر بطاقة تسجيل الدخول لأي سبب، ننصحك بالاتصال بواجهة برمجة التطبيقات updatePublishStatus مع رمز الحالة NOT_PUBLISHED_REQUIRES_SIGN_IN.
Kotlin
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعات الاقتراحات.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعات الاقتراحات. في حال حدوث خطأ، يتم رفض الطلب بالكامل وتتم الاحتفاظ بالحالة الحالية.
deleteFeaturedCluster
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى "المجموعات المميّزة".
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من المجموعة المميّزة. في حال حدوث خطأ، يتم رفض الطلب بالكامل وتتم الاحتفاظ بالحالة الحالية.
deleteContinuationCluster
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى "مجموعة المتابعة".
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
لتلقّي
طلب نشر المحتوى.
يتمثل الهدف الرئيسي من أذونات البث في إعادة تفعيل التطبيق وفرض مزامنة البيانات. لم يتم تصميم مكوّنات intent للبث لإرسالها بشكل متكرّر جدًا. ولا يتم تفعيله إلا عندما تحدّد "خدمة التفاعل" أنّ المحتوى قد يكون قديمًا (مثلاً، إذا مرّ عليه أسبوع). بهذه الطريقة، يمكن للمستخدم الاستفادة من تجربة محتوى جديدة، حتى إذا لم يتم تنفيذ التطبيق لعدة أشهر.
يجب إعداد BroadcastReceiver
بالطريقتَين التاليتَين:
سجِّل مثيلًا من فئة
BroadcastReceiver
ديناميكيًا باستخدامContext.registerReceiver()
. يتيح ذلك التواصل من التطبيقات التي لا تزال نشطة في الذاكرة.
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
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 developer integration workflow (سير عمل دمج المطوّرين).
الأسئلة الشائعة
يمكنك الاطّلاع على الأسئلة الشائعة حول حزمة Engage SDK للحصول على الأسئلة الشائعة.
معلومات الاتصال
يُرجى التواصل مع engage-developers@google.com إذا كانت لديك أي أسئلة أثناء عملية الدمج. سيردّ عليك فريقنا في أقرب وقت ممكن.
الخطوات التالية
بعد إكمال عملية الدمج هذه، اتّبِع الخطوات التالية:
- أرسِل رسالة إلكترونية إلى عنوان البريد الإلكتروني engage-developers@google.com وأرفق حزمة APK المدمجة الجاهزة لاختبارها من قِبل Google.
- ستُجري Google عملية تحقّق ومراجعة داخلية للتأكّد من أنّ عملية دمج العلامة التجارية تعمل على النحو المتوقّع. إذا لزم إجراء تغييرات، ستتواصل معك Google لإطلاعك على أي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، سيتواصل معك فريق Google لإعلامك بأنّه يمكنك بدء نشر حزمة APK المعدَّلة والمدمجة على "متجر Play".
- بعد أن تؤكد Google أنّه تم نشر حزمة APK المعدَّلة على "متجر Play"، سيتم نشر مجموعات الاقتراحات والمحتوى المميّز والمحتوى الذي يتابعه المستخدمون وستصبح مرئية للمستخدمين.