تنشئ Google سطحًا على الجهاز ينظم بيانات المستخدمين التطبيقات حسب المجالات وتوفّر تجربة غامرة جديدة لاستهلاك محتوى التطبيق المخصَّص والاكتشاف. توفِّر تجربة ملء الشاشة هذه للشركاء من المطوّرين فرصة لعرض أفضل المحتوى الوافي في قناة مخصصة خارج تطبيقها.
يتضمّن هذا الدليل تعليمات للشركاء من المطوّرين حول كيفية دمج تسجيلاتهم الصوتية. باستخدام حزمة Engage SDK لتعبئة كل من مساحة السطح الجديدة هذه مساحات عرض Google الحالية.
تفاصيل عملية الدمج
المصطلحات
تشمل عملية الدمج هذه أنواع المجموعات الثلاثة التالية: الاقتراح متابعة ومميزة.
تعرض مجموعات الاقتراحات اقتراحات مخصصة للمحتوى المتوفر للقراءة. من شريك مطور فردي.
تأخذ توصياتك البنية التالية:
مجموعة الاقتراحات: طريقة عرض لواجهة مستخدم تحتوي على مجموعة من الاقتراحات من شريك المطوّرين نفسه
الشكل 1. واجهة المستخدم في "مساحة الترفيه" تعرض مجموعة اقتراحات من شريك واحد الكيان: هو كائن يمثّل عنصرًا واحدًا في مجموعة. كيان يمكن أن تكون قائمة تشغيل أو كتابًا مسموعًا أو بودكاست أو غير ذلك راجِع قسم تقديم قسم بيانات الكيان للاطّلاع على قائمة بالكيانات المتوافقة الأنواع.
الشكل 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'
}
ملخّص
ويستند التصميم إلى تنفيذ معيار الخدمة.
تخضع البيانات التي يمكن للعميل نشرها للحدود التالية للحدود التالية أنواع المجموعات العنقودية:
نوع المجموعة | حدود المجموعات | الحدود القصوى لعدد العناصر في مجموعة |
---|---|---|
مجموعات الاقتراحات | 5 على الأكثر | 50 على الأكثر |
مجموعة المتابعة | 1 على الأكثر | 10 على الأكثر |
المجموعة المميزة | 1 على الأكثر | 10 على الأكثر |
الخطوة 1: تقديم بيانات الكيان
حدّدت حزمة SDK كيانات مختلفة لتمثيل كل نوع من أنواع العناصر. نحن ندعم الكيانات التالية لفئة الاستماع:
MusicAlbumEntity
MusicArtistEntity
MusicTrackEntity
MusicVideoEntity
PlaylistEntity
PodcastSeriesEntity
PodcastEpisodeEntity
LiveRadioStationEntity
AudiobookEntity
توضّح الرسوم البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.
MusicAlbumEntity
يمثل الكائن MusicAlbumEntity
ألبومًا موسيقيًا (على سبيل المثال، Midnights
تايلور سويفت).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | عنوان الألبوم الموسيقي |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | مطلوب |
الرابط المؤدي لصفحة معيّنة في تطبيق مقدّم الخدمة للحصول على تفاصيل حول الألبوم الموسيقي. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
الفنانون | مطلوب | قائمة الفنانين في الألبوم الموسيقي |
معرّف الموارد المنتظم (URI) للتشغيل | اختياري |
رابط لصفحة في التطبيق يبدأ تشغيل الألبوم في تطبيق مقدّم الخدمة ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
عدد الأغاني | اختياري | عدد الأغاني في الألبوم الموسيقي |
الأنواع الموسيقية | اختياري | قائمة الأنواع في الألبوم الموسيقي. |
تنسيق الألبوم | اختياري |
الألبوم (بما في ذلك LP وLP) أسطوانة مطوَلة أغنية منفردة شريط أغانٍ |
شركات الإنتاج | اختياري | قائمة بشركات الإنتاج المرتبطة بالألبوم. |
تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل الألبوم الموسيقي على الجهاز |
لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا مواد تحتوي على مواد فاضحة أو خاضعة لتنبيه من الأهل التحذير على TRUE. تظهر العناصر الفاضحة مع الحرف "E". . |
تاريخ الإصدار | اختياري | تاريخ إصدار الألبوم بالمللي ثانية من الحقبة |
المدة | اختياري | مدة الألبوم بالمللي ثانية. |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
نسبة التقدم | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. عدد صحيح بين 0 و100 |
MusicArtistEntity
يمثّل العنصر MusicArtistEntity
عازفًا موسيقيًا (مثل أديل).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | اسم الفنّان الموسيقي |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | مطلوب |
الرابط المؤدي لصفحة معيّنة في تطبيق مقدّم الخدمة للحصول على تفاصيل حول الموسيقى الفنان. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
معرّف الموارد المنتظم (URI) للتشغيل | اختياري |
الرابط لصفحة في التطبيق والذي يبدأ تشغيل أغاني الفنّان في مقدّم الخدمة التطبيق. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
MusicTrackEntity
يمثّل العنصر MusicTrackEntity
مقطعًا موسيقيًا (على سبيل المثال، أَصفر بواسطة
Coldplay).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | عنوان المقطع الموسيقي. |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) للتشغيل | مطلوب |
رابط لصفحة في التطبيق يبدأ تشغيل المقطع الموسيقي في مقدّم الخدمة التطبيق. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لصفحة معيّنة في تطبيق مقدّم الخدمة للحصول على تفاصيل حول المقطع الموسيقي ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
المدة | اختياري | مدة المسار بالمللي ثانية. |
ألبوم | اختياري | اسم الألبوم الذي تنتمي إليه الأغنية |
الفنانون | مطلوب | تمثّل هذه السمة قائمة الفنّانين المشاركين في المقطع الموسيقي. |
تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل المقطع الموسيقي على الجهاز. |
لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا مواد تحتوي على مواد فاضحة أو خاضعة لتنبيه من الأهل التحذير على TRUE. تظهر العناصر الفاضحة مع الحرف "E". . |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
نسبة التقدم | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. عدد صحيح بين 0 و100 |
MusicVideoEntity
يمثّل العنصر MusicVideoEntity
فيديو موسيقيًا (على سبيل المثال،
The Weeknd - Take My Selfath (الفيديو الموسيقي الرسمي)).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | عنوان الفيديو الموسيقي |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) للتشغيل | مطلوب |
رابط لصفحة في التطبيق يبدأ تشغيل الفيديو الموسيقي في مقدّم الخدمة التطبيق. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لموضع معيّن ينقل إلى تطبيق مقدّم الخدمة للحصول على تفاصيل حول الفيديو الموسيقي. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
المدة | اختياري | مدة الفيديو بالمللي ثانية. |
عدد مرّات المشاهدة | اختياري | عدد مشاهدات الفيديو بتنسيق النص الحر. |
الفنانون | اختياري | قائمة الفنّانين الذين أنشأوا الفيديو الموسيقي |
تقييم المحتوى | اختياري | تمثّل هذه السمة قائمة بتقييمات المحتوى للمقطع الصوتي. |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل الفيديو الموسيقي على الجهاز |
لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا مواد تحتوي على مواد فاضحة أو خاضعة لتنبيه من الأهل التحذير على TRUE. تظهر العناصر الفاضحة مع الحرف "E". . |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
نسبة التقدم | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. عدد صحيح بين 0 و100 |
PlaylistEntity
يمثّل العنصر PlaylistEntity
قائمة تشغيل موسيقية (على سبيل المثال، أفضل قائمة موسيقى في الولايات المتحدة.
10 قائمة تشغيل).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | عنوان قائمة التشغيل |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) للتشغيل | مطلوب |
رابط لصفحة في التطبيق يبدأ تشغيل قائمة تشغيل الموسيقى في مقدّم الخدمة التطبيق. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لموضع معيّن ينقل إلى تطبيق مقدّم الخدمة للحصول على تفاصيل حول قائمة تشغيل الموسيقى. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
المدة | اختياري | مدة قائمة التشغيل بالمللي ثانية. |
عدد الأغاني | اختياري | عدد الأغاني في قائمة تشغيل الموسيقى |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
تم التنزيل على الجهاز | اختياري | قيمة منطقية تشير إلى ما إذا تم تنزيل قائمة التشغيل على الجهاز |
لغة فاضحة | اختياري |
قيمة منطقية تشير إلى ما إذا كان المحتوى فاضحًا أم لا مواد تحتوي على مواد فاضحة أو خاضعة لتنبيه من الأهل التحذير على TRUE. تظهر العناصر الفاضحة مع الحرف "E". . |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
نسبة التقدم | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. عدد صحيح بين 0 و100 |
PodcastSeriesEntity
يمثل الكائن PodcastSeriesEntity
سلسلة بودكاست (على سبيل المثال، هذه
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 Brieze).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | عنوان محطة الراديو المباشر |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. عرض يُرجى الاطّلاع على مواصفات الصور للإرشادات. |
معرّف الموارد المنتظم (URI) للتشغيل | مطلوب |
رابط لصفحة في التطبيق يبدأ تشغيل محطة الراديو في مقدّم الخدمة التطبيق. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
معرّف الموارد المنتظم (URI) لصفحة المعلومات | اختياري |
رابط لموضع معيّن يؤدي إلى تطبيق مقدّم الخدمة للاطّلاع على تفاصيل حول محطة الراديو. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
التردد | اختياري | التردد الذي يتم به بث المحطة الإذاعية (على سبيل المثال، "98.1 FM"). |
عنوان العرض | اختياري | البرنامج الحالي الذي يتم تشغيله على محطة الراديو |
المضيفات | اختياري | قائمة بمضيفي المحطة الإذاعية |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
مدّة التفاعل الأخيرة | اختياري |
يُوصى به للعناصر الموجودة في مجموعة المتابعة. يمكن استخدامها الترتيب. بالمللي ثانية من الحقبة |
AudiobookEntity
يمثّل العنصر AudiobookEntity
كتابًا مسموعًا (مثل الكتاب المسموع.
عن الانضمام إلى ميشيل أوباما).
السمة | المتطلب | ملاحظات |
---|---|---|
الاسم | مطلوب | |
صور الملصق | مطلوب | يجب توفير صورة واحدة على الأقل. انظر الصورة المواصفات للإرشادات. |
المؤلّف | مطلوب | يجب توفير اسم مؤلف واحد على الأقل. |
الراوي | مطلوب | يجب إدخال اسم راوٍ واحد على الأقل. |
معرّف الموارد المنتظم (URI) لرابط الإجراء | مطلوب |
الرابط المؤدي لصفحة معيّنة في تطبيق مقدّم الخدمة للكتاب المسموع. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
تاريخ النشر | اختياري | بالمللي ثانية من الحقبة إذا تم توفيرها |
الوصف | اختياري | يجب ألا يزيد طوله عن 200 حرف، إذا تم تقديمه. |
السعر | اختياري | حقل التعبئة النصّية الحرّة |
المدة | اختياري | يجب أن تكون القيمة موجبة إذا تم توفيرها. |
النوع | اختياري | تمثّل هذه السمة قائمة الأنواع المرتبطة بالكتاب. |
اسم السلسلة | اختياري | اسم السلسلة التي ينتمي إليها الكتاب المسموع (مثل هاري بوتر |
فهرس وحدة السلسلة | اختياري | فهرس الكتاب المسموع في السلسلة، حيث يشكّل الرقم 1 أول كتاب مسموع في السلسلة. على سبيل المثال، إذا كان هاري بوتر وسجن Azkaban هي ثالث كتاب في السلسلة، ويجب ضبط القيمة على 3. |
متابعة نوع الكتاب | اختياري |
TYPE_Continue - الاستئناف على كتاب غير مكتمل TYPE_NEXT - المتابعة على نسخة جديدة من سلسلة. TYPE_NEW - تم إصداره مؤخرًا. |
وقت التفاعل الأخير | مطلوب بشكل مشروط | يجب توفيره عندما يكون العنصر في مجموعة المتابعة. بالمللي ثانية من الحقبة |
اكتمال نسبة التقدم | مطلوب بشكل مشروط |
يجب توفيره عندما يكون العنصر في مجموعة المتابعة. يمكن أن تشكّل الكتب المسموعة التي تم الحصول عليها *حديثًا* جزءًا من مواصلة القراءة. تجميع. يجب أن تكون القيمة أكبر من 0 وأقل من 100. |
DisplayTimeWindow - تحديد فترة زمنية للمحتوى لعرضها في مساحات العرض | ||
الطابع الزمني للبدء | اختياري |
الطابع الزمني للحقبة الذي يجب أن يظهر المحتوى بعده على السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور على مساحات العرض. بالمللي ثانية من الحقبة |
الطابع الزمني للانتهاء | اختياري |
الطابع الزمني للحقبة الذي لن يظهر المحتوى بعده السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور على مساحات العرض. بالمللي ثانية من الحقبة |
مواصفات الصور
في ما يلي المواصفات المطلوبة لمواد عرض الصور:
نسبة العرض إلى الارتفاع | المتطلب | الحد الأدنى لعدد وحدات البكسل | وحدات البكسل المقترَحة |
---|---|---|---|
مربّع (1x1) | مطلوب | 300 × 300 | 1200 × 1200 |
أفقي (1.91×1) | اختياري | 600 × 314 | 1200 × 628 |
العمودية (4×5) | اختياري | 480×600 | 960 × 1200 |
تنسيقات الملفات
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
مسؤولية نشر المجموعات. تتم متابعته حاليًا
تتوفّر واجهات برمجة التطبيقات في البرنامج:
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
الحالية من الشريك المطوّر. - يتم تحليل البيانات من الطلب وتخزينها في تقرير Continuation المعدّل المجموعة.
في حالة حدوث خطأ، يتم رفض الطلب بأكمله وتكون الحالة الحالية هي وصيانته.
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
الحالية من الشريك المطوّر هي تمت إزالته. - يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف المجموعة UserAccountManagementCluster.
في حالة حدوث خطأ، يتم رفض الطلب بأكمله وتكون الحالة الحالية هي وصيانته.
updatePublishStatus
إذا لم يتم نشر أي من المجموعات لأي سبب داخلي لنشاطك التجاري، ننصحك بشدة بتعديل حالة النشر باستخدام updatePublishStatus في واجهة برمجة التطبيقات. وهذا أمر مهم للأسباب التالية :
- توفير حالة المحتوى في جميع الحالات، حتى عند نشر المحتوى (الحالة == تم النشر)، أمر بالغ الأهمية لتعبئة لوحات البيانات التي تستخدم هذه والحالة الصريحة لتوضيح حالة الدمج والمقاييس الأخرى.
- إذا لم يتم نشر أي محتوى ولكن لم تكن حالة الدمج معطّلة (STATUS == NOT_HOSTED)، يمكن أن تتجنب 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_MANAGEED_REQUIRES_SIGN_IN
Kotlin
client.updatePublishStatus( PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build())
Java
client.updatePublishStatus( new PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build());
deleteRecommendationClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعات الاقتراحات.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعات الاقتراحات: في حال حدوث خطأ، يتم رفض الطلب بأكمله. ويتم الحفاظ على الحالة الحالية.
deleteFeaturedCluster
يتم استخدام واجهة برمجة التطبيقات هذه لحذف محتوى "المجموعة المميزة".
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من المجموعة المميزة. في حال حدوث خطأ، يتم رفض الطلب بأكمله. ويتم الحفاظ على الحالة الحالية.
deleteContinuationCluster
يتم استخدام واجهة برمجة التطبيقات هذه لحذف محتوى مجموعة Continuation Cluster.
Kotlin
client.deleteContinuationCluster()
Java
client.deleteContinuationCluster();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعة المتابعة في حال حدوث خطأ، يتم رفض الطلب بأكمله. ويتم الحفاظ على الحالة الحالية.
deleteUserManagementCluster
يتم استخدام واجهة برمجة التطبيقات هذه لحذف محتوى مجموعة UserAccountManagement.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من المجموعة UserAccountManagement. في حالة حدوث خطأ، يتم التعامل مع الطلب بأكمله الرفض والحفاظ على الحالة الحالية.
deleteClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى نوع مجموعة معيّن.
Kotlin
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_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
مع تضمين السبب
رمز الخطأ.
رمز الخطأ | ملاحظة |
---|---|
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()
ويتيح ذلك التواصل من خلال التطبيقات. التي لا تزال حية في الذاكرة.
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION));
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));
}
- الإعلان بشكل ثابت عن عملية تنفيذ باستخدام العلامة
<receiver>
في ملفAndroidManifest.xml
. يتيح هذا الإجراء للتطبيق تلقّي البث. عندما لا يكون قيد التشغيل، ويسمح أيضًا للتطبيق بالنشر المحتوى.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
سيتم إرسال الأهداف التالية من خلال الخدمة:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
يُنصَح ببدء مكالمةpublishRecommendationClusters
عندما تلقي هذا النية.com.google.android.engage.action.PUBLISH_FEATURED
من المستحسن بدء مكالمةpublishFeaturedCluster
عند تلقّي هذا والنية.com.google.android.engage.action.PUBLISH_CONTINUATION
يوصى ببدء مكالمةpublishContinuationCluster
عند الاستلام هذا النية.
سير عمل عملية الدمج
للحصول على دليل مفصّل حول التحقّق من الدمج بعد اكتماله، يُرجى مراجعة التفاعل مع سير عمل دمج المطوّرين
الأسئلة الشائعة
يُرجى الاطّلاع على الأسئلة الشائعة حول Engage SDK لمعرفة الأسئلة الشائعة
Contact
معلومات التواصل Engage-developers@google.com إذا كانت هناك لأي أسئلة أثناء عملية الدمج. سيردّ فريقنا عليك في أقرب وقت ممكن. ممكن.
الخطوات التالية
بعد إكمال عملية الدمج هذه، ستكون خطواتك التالية هي التالية:
- إرسال رسالة إلكترونية إلى engagement-developers@google.com وإرفاق حِزمة APK المدمجة والجاهزة للاختبار من قِبل Google.
- ستُجري Google عملية تحقّق وتراجع داخليًا للتأكد من أنّ والتكامل كما هو متوقع. إذا لزم الأمر، ستتواصل معك Google. بأي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، ستتواصل معك Google من أجل يمكنك بدء نشر حزمة APK المعدّلة والمتكاملة على "متجر Play".
- بعد أن تتأكد Google من نشر ملف APK المُعدَّل على "متجر Play" والاقتراح والمحتوى المميّز والمتابعة سوف تُنشَر المجموعات العنقودية وستكون مرئية للمستخدمين.