الاستماع إلى حزمة تطوير البرامج (SDK) للتفاعل مع التطبيقات: تعليمات الدمج الفني التابعة لجهات خارجية

تنشئ 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 كيانات مختلفة لتمثيل كل نوع من أنواع العناصر. نحن ندعم الكيانات التالية لفئة الاستماع:

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. 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" والاقتراح والمحتوى المميّز والمتابعة سوف تُنشَر المجموعات العنقودية وستكون مرئية للمستخدمين.