Engage SDK Listen: دستورالعمل‌های یکپارچه‌سازی فنی شخص ثالث

با دسترسی به کاربران خود در هر کجا که هستند، تعامل با برنامه را افزایش دهید. Engage SDK را ادغام کنید تا توصیه‌های شخصی‌سازی‌شده و محتوای مداوم را مستقیماً به کاربران در سطوح مختلف روی دستگاه، مانند Collections ، Entertainment Space و Play Store ارائه دهید. این ادغام کمتر از ۵۰ کیلوبایت (فشرده‌شده) به میانگین APK اضافه می‌کند و برای اکثر برنامه‌ها حدود یک هفته از زمان توسعه‌دهنده را می‌گیرد. برای اطلاعات بیشتر به سایت تجاری ما مراجعه کنید.

این راهنما شامل دستورالعمل‌هایی برای شرکای توسعه‌دهنده است تا محتوای صوتی (موسیقی، پادکست، کتاب صوتی، رادیو زنده) را به سطوح محتوای Engage ارائه دهند.

جزئیات ادغام

اصطلاحات

این ادغام شامل سه نوع خوشه زیر است: توصیه ، ادامه و ویژه .

  • خوشه‌های توصیه ، پیشنهادهای شخصی‌سازی‌شده‌ای را برای خواندن محتوا از یک شریک توسعه‌دهنده‌ی خاص نشان می‌دهند.

    توصیه‌های شما ساختار زیر را دارند:

    • خوشه توصیه: یک نمای رابط کاربری که شامل گروهی از توصیه‌ها از یک شریک توسعه‌دهنده است.

      شکل ۱. رابط کاربری Entertainment Space که خوشه توصیه‌ها را از یک شریک واحد نشان می‌دهد.
    • موجودیت: یک شیء که یک آیتم واحد را در یک خوشه نشان می‌دهد. یک موجودیت می‌تواند یک لیست پخش، یک کتاب صوتی، یک پادکست و موارد دیگر باشد. برای مشاهده لیستی از انواع موجودیت‌های پشتیبانی شده، به بخش « ارائه داده‌های موجودیت» مراجعه کنید.

      شکل ۲. رابط کاربری Entertainment Space که یک موجودیت واحد را در خوشه توصیه یک شریک واحد نشان می‌دهد.
  • خوشه Continuation محتوای صوتی که اخیراً توسط کاربران از چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری واحد پخش شده است را نشان می‌دهد. هر شریک توسعه‌دهنده مجاز به پخش حداکثر ۱۰ موجودیت در خوشه Continuation خواهد بود.

    شکل ۳. رابط کاربری Entertainment Space که یک خوشه Continuation را با توصیه‌های ناتمام از چندین شریک نشان می‌دهد (در حال حاضر فقط یک توصیه قابل مشاهده است).
  • خوشه ویژه ، مجموعه‌ای از موارد را از چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری واحد نمایش می‌دهد. یک خوشه ویژه وجود خواهد داشت که در نزدیکی بالای رابط کاربری با اولویت بالاتر از همه خوشه‌های توصیه نمایش داده می‌شود. هر شریک توسعه‌دهنده مجاز به پخش حداکثر 10 موجودیت در خوشه ویژه خواهد بود.

    شکل ۴. رابط کاربری Entertainment Space که یک خوشه ویژه با توصیه‌هایی از چندین شریک را نشان می‌دهد (در حال حاضر فقط یک توصیه قابل مشاهده است).

پیش کار

حداقل سطح API: ۱۹

کتابخانه com.google.android.engage:engage-core به برنامه خود اضافه کنید:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.6.0'
}

خلاصه

طراحی بر اساس پیاده‌سازی یک سرویس محدود (bound service) است.

داده‌هایی که یک کلاینت می‌تواند منتشر کند، برای انواع مختلف خوشه‌ها مشمول محدودیت‌های زیر است:

نوع خوشه محدودیت‌های خوشه حداکثر محدودیت‌های موجودیت در یک خوشه
خوشه(های) پیشنهادی حداکثر ۷ عدد حداکثر ۵۰
خوشه ادامه حداکثر ۱ حداکثر 20
خوشه ویژه حداکثر ۱ حداکثر 20

مرحله ۱: ارائه داده‌های موجودیت

SDK برای نمایش هر نوع آیتم، موجودیت‌های مختلفی تعریف کرده است. ما از موجودیت‌های زیر برای دسته Listen پشتیبانی می‌کنیم:

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. AudiobookEntity

نمودارهای زیر ویژگی‌ها و الزامات موجود برای هر نوع را شرح می‌دهند.

MusicAlbumEntity

شیء MusicAlbumEntity یک آلبوم موسیقی (مثلاً Midnights از Taylor Swift) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان آلبوم موسیقی.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
آدرس صفحه اطلاعات مورد نیاز

لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد آلبوم موسیقی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

هنرمندان مورد نیاز فهرست هنرمندان حاضر در آلبوم موسیقی.
پخش از طریق url اختیاری

یک لینک عمیق که پخش آلبوم را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
تعداد آهنگ‌ها اختیاری تعداد آهنگ‌های موجود در آلبوم موسیقی.
ژانرها اختیاری فهرست ژانرهای موجود در آلبوم موسیقی.
قالب آلبوم اختیاری

آلبوم (شامل یک صفحه ال‌پی و یک صفحه ال‌پی دوبل)

ای‌پی

تک نفره

میکس‌تیپ

برچسب‌های موسیقی اختیاری فهرست ناشران موسیقی مرتبط با این آلبوم.
دانلود شده روی دستگاه اختیاری مقداری بولی که نشان می‌دهد آیا آلبوم موسیقی روی دستگاه دانلود شده است یا خیر.
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

تاریخ انتشار اختیاری تاریخ انتشار آلبوم بر حسب میلی‌ثانیه.
مدت زمان اختیاری مدت زمان آلبوم بر حسب میلی ثانیه.
آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

درصد پیشرفت تکمیل شد اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود.

عدد صحیح بین ۰ تا ۱۰۰

MusicArtistEntity

شیء MusicArtistEntity یک هنرمند موسیقی (مثلاً ادل) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز نام هنرمند موسیقی.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
آدرس صفحه اطلاعات مورد نیاز

لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد هنرمند موسیقی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

پخش از طریق url اختیاری

لینک عمیقی که پخش آهنگ‌های هنرمند را در برنامه‌ی ارائه‌دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

MusicTrackEntity

شیء MusicTrackEntity یک آهنگ موسیقی (مثلاً آهنگ Yellow از Coldplay) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان قطعه موسیقی.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پخش از طریق url مورد نیاز

یک لینک عمیق که پخش آهنگ را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

هنرمندان مورد نیاز فهرست هنرمندان برای آهنگ موسیقی.
آدرس صفحه اطلاعات اختیاری

یک لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد آهنگ موسیقی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
مدت زمان اختیاری مدت زمان آهنگ بر حسب میلی ثانیه.
آلبوم اختیاری نام آلبومی که آهنگ به آن تعلق دارد.
دانلود شده روی دستگاه اختیاری مقداری بولی که نشان می‌دهد آیا آهنگ موسیقی روی دستگاه دانلود شده است یا خیر.
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

درصد پیشرفت تکمیل شد اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود.

عدد صحیح بین ۰ تا ۱۰۰

MusicVideoEntity

شیء MusicVideoEntity یک موزیک ویدیو را نشان می‌دهد (برای مثال، The Weeknd - Take My Breath (Official Music Video) ).

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان موزیک ویدیو.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پخش از طریق url مورد نیاز

یک لینک عمیق که پخش موزیک ویدیو را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

آدرس صفحه اطلاعات اختیاری

یک لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد موزیک ویدیو.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

مدت زمان اختیاری مدت زمان ویدیو بر حسب میلی ثانیه.
تعداد مشاهده اختیاری تعداد بازدیدهای ویدیو در قالب متن آزاد.
هنرمندان اختیاری فهرست هنرمندان موزیک ویدیو.
رتبه‌بندی محتوا اختیاری فهرست رتبه‌بندی محتوای آهنگ.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
دانلود شده روی دستگاه اختیاری مقدار بولی که نشان می‌دهد آیا موزیک ویدیو روی دستگاه دانلود شده است یا خیر.
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

درصد پیشرفت تکمیل شد اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود.

عدد صحیح بین ۰ تا ۱۰۰

PlaylistEntity

شیء PlaylistEntity یک لیست پخش موسیقی (مثلاً لیست پخش 10 آهنگ برتر ایالات متحده) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان لیست پخش.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پخش از طریق url مورد نیاز

یک لینک عمیق که پخش لیست پخش موسیقی را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

آدرس صفحه اطلاعات اختیاری

یک لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد لیست پخش موسیقی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

مدت زمان اختیاری مدت زمان پخش لیست پخش بر حسب میلی ثانیه.
تعداد آهنگ‌ها اختیاری تعداد آهنگ‌های موجود در لیست پخش موسیقی.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
دانلود شده روی دستگاه اختیاری مقدار بولی که نشان می‌دهد آیا لیست پخش روی دستگاه دانلود شده است یا خیر.
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

درصد پیشرفت تکمیل شد اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود.

عدد صحیح بین ۰ تا ۱۰۰

PodcastSeriesEntity

شیء PodcastSeriesEntity یک مجموعه پادکست (مثلاً This American Life ) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان مجموعه پادکست
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
آدرس صفحه اطلاعات مورد نیاز

یک لینک عمیق به اپلیکیشن ارائه دهنده برای جزئیات بیشتر در مورد مجموعه پادکست‌ها.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

پخش از طریق url اختیاری

یک لینک عمیق که پخش مجموعه پادکست را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

تعداد قسمت‌ها اختیاری تعداد قسمت‌های مجموعه پادکست.
نام تولید اختیاری نام تولید مجموعه پادکست.
میزبان‌ها اختیاری فهرست میزبانان مجموعه پادکست.
ژانرها اختیاری فهرست ژانرهای مجموعه پادکست.
دانلود شده روی دستگاه اختیاری مقدار بولی که نشان می‌دهد آیا پادکست روی دستگاه دانلود شده است یا خیر.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

PodcastEpisodeEntity

شیء PodcastEpisodeEntity نشان‌دهنده‌ی یک مجموعه پادکست است (برای مثال، Spark Bird، قسمت ۷۵۴: This American Life ).

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان قسمت پادکست.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پخش از طریق url مورد نیاز

یک لینک عمیق که پخش قسمت پادکست را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

عنوان مجموعه پادکست مورد نیاز نام مجموعه پادکستی که این قسمت به آن تعلق دارد.
مدت زمان مورد نیاز مدت زمان هر قسمت پادکست بر حسب میلی‌ثانیه.
تاریخ انتشار مورد نیاز تاریخ انتشار پادکست (به میلی‌ثانیه)
آدرس صفحه اطلاعات اختیاری

یک لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد قسمت پادکست.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

نام تولید اختیاری نام تولید مجموعه پادکست.
فهرست قسمت‌ها اختیاری شاخص قسمت در سریال (شاخص اول ۱ است).
میزبان‌ها اختیاری فهرست میزبانان این قسمت پادکست.
ژانرها اختیاری فهرست ژانرهای قسمت پادکست.
دانلود شده روی دستگاه اختیاری مقدار بولی که نشان می‌دهد آیا قسمت پادکست روی دستگاه دانلود شده است یا خیر.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
پادکست ویدیویی اختیاری مقدار بولی که نشان می‌دهد آیا قسمت پادکست محتوای ویدیویی دارد یا خیر
صریح اختیاری

یک مقدار بولی که نشان می‌دهد محتوا صریح است یا خیر

مواردی که حاوی مطالب صریح هستند یا هشدار والدین دارند باید روی TRUE تنظیم شوند. موارد صریح با برچسب "E" ظاهر می‌شوند.

گوش دادن نوع بعدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود

TYPE_CONTINUE - ادامه‌ی پخش یک فایل صوتی ناتمام.

TYPE_NEXT - ادامه دادن به بخش جدیدی از یک مجموعه.

TYPE_NEW - تازه منتشر شده.

آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

درصد پیشرفت تکمیل شد اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود.

عدد صحیح بین ۰ تا ۱۰۰

LiveRadioStationEntity

شیء LiveRadioStationEntity یک ایستگاه رادیویی زنده (برای مثال، 98.1 The Breeze) را نشان می‌دهد.

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز عنوان ایستگاه رادیویی زنده.
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پخش از طریق url مورد نیاز

یک لینک عمیق که پخش ایستگاه رادیویی را در برنامه ارائه دهنده شروع می‌کند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

آدرس صفحه اطلاعات اختیاری

یک لینک عمیق به برنامه ارائه دهنده برای جزئیات بیشتر در مورد ایستگاه رادیویی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

فرکانس اختیاری فرکانسی که ایستگاه رادیویی با آن پخش می‌شود (برای مثال، "98.1 FM").
نمایش عنوان اختیاری برنامه‌ای که همین الان از رادیو جوان در حال پخش است.
میزبان‌ها اختیاری فهرست مجریان ایستگاه رادیویی.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
آخرین زمان نامزدی اختیاری

برای موارد موجود در خوشه ادامه توصیه می‌شود. ممکن است برای رتبه‌بندی استفاده شود.

در واحد میلی‌ثانیه

AudiobookEntity

شیء AudiobookEntity یک کتاب صوتی را نشان می‌دهد (برای مثال، کتاب صوتی Becoming نوشته‌ی میشل اوباما).

ویژگی مورد نیاز یادداشت‌ها
نام مورد نیاز
تصاویر پوستر مورد نیاز حداقل یک تصویر باید ارائه شود. برای راهنمایی به مشخصات تصویر مراجعه کنید.
نویسنده مورد نیاز حداقل نام یک نویسنده باید ذکر شود.
آدرس لینک اکشن مورد نیاز

لینک عمیق به اپلیکیشن ارائه دهنده کتاب صوتی.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

راوی اختیاری حداقل نام یکی از راویان باید ذکر شود.
تاریخ انتشار اختیاری در صورت ارائه، بر حسب میلی‌ثانیه در هر دوره.
توضیحات اختیاری در صورت ارائه، باید حداکثر ۲۰۰ کاراکتر باشد.
قیمت اختیاری متن رایگان
مدت زمان اختیاری در صورت ارائه، باید یک مقدار مثبت باشد.
ژانر اختیاری فهرست ژانرهای مرتبط با کتاب.
نام سریال اختیاری نام مجموعه ای که کتاب صوتی به آن تعلق دارد (برای مثال، هری پاتر .
شاخص واحد سری اختیاری فهرست کتاب صوتی در مجموعه، که در آن ۱ اولین کتاب صوتی در مجموعه است. برای مثال، اگر هری پاتر و زندانی آزکابان سومین کتاب در مجموعه است، باید روی ۳ تنظیم شود.
ادامه نوع کتاب اختیاری

TYPE_CONTINUE - ادامه‌ی کار روی یک کتاب ناتمام.

TYPE_NEXT - ادامه دادن به بخش جدیدی از یک مجموعه.

TYPE_NEW - تازه منتشر شده.

آخرین زمان نامزدی مشروط مورد نیاز

باید زمانی که آیتم در خوشه Continuation قرار دارد، ارائه شود.

در واحد میلی ثانیه.

درصد پیشرفت تکمیل شده مشروط مورد نیاز

باید زمانی که آیتم در خوشه Continuation قرار دارد، ارائه شود.

کتاب‌های صوتی *تازه* خریداری شده می‌توانند بخشی از خوشه «مطالعه مداوم» باشند.

مقدار باید بزرگتر از 0 و کوچکتر از 100 باشد.

DisplayTimeWindow - یک پنجره زمانی برای نمایش محتوا روی سطح تنظیم کنید
شروع مهر زمانی اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا باید روی سطح نمایش داده شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

در واحد میلی ثانیه.

مهر زمان پایان اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا دیگر روی سطح نمایش داده نمی‌شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

در واحد میلی ثانیه.

مشخصات تصویر

مشخصات مورد نیاز برای تصاویر در زیر فهرست شده است:

نسبت ابعاد مورد نیاز حداقل پیکسل‌ها پیکسل‌های توصیه‌شده
مربع (۱x۱) مورد نیاز ۳۰۰x۳۰۰ ۱۲۰۰x۱۲۰۰
منظره (۱.۹۱x۱) اختیاری ۶۰۰x۳۱۴ ۱۲۰۰x۶۲۸
پرتره (۴x۵) اختیاری ۴۸۰x۶۰۰ ۹۶۰x۱۲۰۰

فرمت‌های فایل

PNG، JPG، GIF ثابت، WebP

حداکثر اندازه فایل

۵۱۲۰ کیلوبایت

توصیه‌های اضافی

  • ناحیه امن تصویر: محتوای مهم خود را در مرکز ۸۰٪ تصویر قرار دهید.

مثال‌ها

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();

مرحله ۲: ارائه داده‌های خوشه‌ای

توصیه می‌شود که کار انتشار محتوا در پس‌زمینه اجرا شود (برای مثال، با استفاده از WorkManager ) و به صورت منظم یا بر اساس یک رویداد (مثلاً هر بار که کاربر برنامه را باز می‌کند یا وقتی کاربر چیزی را به سبد خرید خود اضافه می‌کند) برنامه‌ریزی شود.

AppEngagePublishClient مسئول انتشار کلاسترها است. APIهای زیر در کلاینت موجود هستند:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

این API برای بررسی اینکه آیا سرویس برای ادغام در دسترس است و آیا محتوا می‌تواند روی دستگاه ارائه شود، استفاده می‌شود.

شما می‌توانید در دسترس بودن سرویس را برای هر نوع کلاستری که قصد انتشار آن را دارید، بررسی کنید. isServiceAvailable API یک شیء درخواست به نام ServiceAvailabilityRequest را می‌پذیرد که شامل انواع کلاستری است که در دسترس بودن سرویس برای آنها باید بررسی شود. می‌توانید مقادیر شمارشی ClusterType مورد نیاز برای ServiceAvailabilityRequest را از جدول زیر پیدا کنید.

نوع خوشه ثابت نوع خوشه مقدار عدد صحیح
ناشناخته TYPE_UNKNOWN 0
خوشه توصیه TYPE_RECOMMENDATION ۱
خوشه ویژه TYPE_FEATURED ۲
خوشه ادامه TYPE_CONTINUATION ۳
خوشه مدیریت کاربر TYPE_ENGAGEMENT ۸
خوشه اشتراک TYPE_SUBSCRIPTION ۱۲

کاتلین

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

جاوا

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
ویژگی دسترسی مشروط به سرویس

برخی از برنامه‌های یکپارچه، پیکربندی خاصی را درخواست می‌کنند که سرویس Engage را به طور متناوب فعال و غیرفعال کند تا هزینه سرویس‌دهی خود را کاهش دهند. این استراتژی مصرف محتوای متناوب، اگرچه ممکن است، اما بر کاربر و محصول تأثیر منفی می‌گذارد - محتوای قدیمی ارائه نمی‌شود و برخی از سطوح اصلاً سرویس‌دهی نمی‌شوند.

از نسخه ۱.۶.۰ به بعد، Engage SDK امکان بررسی در دسترس بودن انواع خاصی از کلاسترها را فراهم می‌کند. این امر انعطاف‌پذیری بیشتری را فراهم می‌کند، به طوری که اگر استراتژی محتوای متناوب توسط یک برنامه خاص اتخاذ شده باشد، برخی از انواع کلاسترها می‌توانند از آن استراتژی متناوب پیروی کنند در حالی که سایر انواع کلاسترها همیشه فعال هستند (یعنی کلاسترهای مداوم).

اگر سرویس Engage به هر دلیلی نباید به صورت «مداوم» روی تمام دستگاه‌های پشتیبانی‌شده فعال باشد و برای هر مجموعه‌ای از دستگاه‌ها به صورت مصرف متناوب پیکربندی شده باشد، تمام انتشارات خوشه‌های تداوم (مثلاً Continue Listening) همچنان با پیکربندی پیش‌فرض فعال خواهند بود و بقیه انواع خوشه‌ها به صورت متناوب فعال و غیرفعال می‌شوند. اگر مصرف متناوب برای شما صدق می‌کند اما این پیکربندی پیش‌فرض برای نیازهای شما مناسب نیست، لطفاً با engage-developers@google.com تماس بگیرید.

برای نسخه‌های SDK قبل از v1.6.0 (منسوخ شده)

کاتلین

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.
    }
}

جاوا

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

این API برای انتشار فهرستی از اشیاء RecommendationCluster استفاده می‌شود.

کاتلین

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build())

جاوا

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build());

وقتی سرویس درخواست را دریافت می‌کند، اقدامات زیر در یک تراکنش انجام می‌شود:

  • داده‌های RecommendationCluster موجود از شریک توسعه‌دهنده حذف شده است.
  • داده‌های درخواست تجزیه و تحلیل شده و در خوشه توصیه به‌روزرسانی‌شده ذخیره می‌شوند.

در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

publishFeaturedCluster

این API برای انتشار فهرستی از اشیاء FeaturedCluster استفاده می‌شود.

کاتلین

client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

وقتی سرویس درخواست را دریافت می‌کند، اقدامات زیر در یک تراکنش انجام می‌شود:

  • داده‌های FeaturedCluster موجود از شریک توسعه‌دهنده حذف می‌شوند.
  • داده‌های حاصل از درخواست، تجزیه و تحلیل شده و در Featured Cluster به‌روزرسانی‌شده ذخیره می‌شوند.

در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

publishContinuationCluster

این API برای انتشار یک شیء ContinuationCluster استفاده می‌شود.

کاتلین

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

جاوا

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

وقتی سرویس درخواست را دریافت می‌کند، اقدامات زیر در یک تراکنش انجام می‌شود:

  • داده‌های ContinuationCluster موجود از شریک توسعه‌دهنده حذف می‌شوند.
  • داده‌های حاصل از درخواست، تجزیه و تحلیل شده و در خوشه‌ی ادامه‌ی به‌روزرسانی‌شده ذخیره می‌شوند.

در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

publishUserAccountManagementRequest

این API برای انتشار کارت ورود به سیستم استفاده می‌شود. عمل ورود به سیستم، کاربران را به صفحه ورود به سیستم برنامه هدایت می‌کند تا برنامه بتواند محتوا را منتشر کند (یا محتوای شخصی‌سازی‌شده‌تری ارائه دهد).

فراداده‌های زیر بخشی از کارت ورود به سیستم هستند -

ویژگی مورد نیاز توضیحات
اکشن اوری مورد نیاز پیوند عمیق به اقدام (یعنی به صفحه ورود به برنامه هدایت می‌شود)
تصویر اختیاری - در صورت عدم ارائه، عنوان باید ارائه شود

تصویر نشان داده شده روی کارت

تصاویر با نسبت تصویر ۱۶x۹ و وضوح تصویر ۱۲۶۴x۷۱۲

عنوان اختیاری - در صورت عدم ارائه، تصویر باید ارائه شود عنوان روی کارت
متن اکشن اختیاری متن نمایش داده شده در فراخوان عمل (مثلاً ورود)
زیرنویس اختیاری زیرنویس اختیاری روی کارت

کاتلین

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());

جاوا

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

اگر به هر دلیل داخلی تجاری، هیچ یک از کلاسترها منتشر نشده‌اند، اکیداً توصیه می‌کنیم وضعیت انتشار را با استفاده از API مربوط به updatePublishStatus به‌روزرسانی کنید. این مهم است زیرا:

  • ارائه وضعیت در همه سناریوها، حتی زمانی که محتوا منتشر شده است (وضعیت == منتشر شده)، برای پر کردن داشبوردهایی که از این وضعیت صریح برای انتقال سلامت و سایر معیارهای ادغام شما استفاده می‌کنند، بسیار مهم است.
  • اگر هیچ محتوایی منتشر نشده باشد اما وضعیت ادغام خراب نباشد (STATUS == NOT_PUBLISHED)، گوگل می‌تواند از نمایش هشدارها در داشبوردهای سلامت برنامه جلوگیری کند. این تأیید می‌کند که محتوا به دلیل وضعیت مورد انتظار از دیدگاه ارائه‌دهنده منتشر نشده است.
  • این به توسعه‌دهندگان کمک می‌کند تا بینشی در مورد زمان انتشار داده‌ها در مقابل عدم انتشار آنها ارائه دهند.
  • گوگل ممکن است از کدهای وضعیت برای ترغیب کاربر به انجام اقدامات خاص در برنامه استفاده کند تا بتواند محتوای برنامه را ببیند یا از آن عبور کند.

لیست کدهای وضعیت انتشار واجد شرایط عبارتند از:

// 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

اگر محتوا به دلیل عدم ورود کاربر منتشر نشود، گوگل انتشار کارت ورود به سیستم را توصیه می‌کند. اگر به هر دلیلی ارائه دهندگان خدمات قادر به انتشار کارت ورود به سیستم نیستند، توصیه می‌کنیم API مربوط به updatePublishStatus را با کد وضعیت NOT_PUBLISHED_REQUIRES_SIGN_IN فراخوانی کنید.

کاتلین

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

جاوا

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

این API برای حذف محتوای خوشه‌های توصیه استفاده می‌شود.

کاتلین

client.deleteRecommendationClusters()

جاوا

client.deleteRecommendationClusters();

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از خوشه‌های توصیه حذف می‌کند. در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

deleteFeaturedCluster

این API برای حذف محتوای Featured Cluster استفاده می‌شود.

کاتلین

client.deleteFeaturedCluster()

جاوا

client.deleteFeaturedCluster();

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از Featured Cluster حذف می‌کند. در صورت بروز خطا، کل درخواست رد شده و وضعیت موجود حفظ می‌شود.

deleteContinuationCluster

این API برای حذف محتوای Continuation Cluster استفاده می‌شود.

کاتلین

client.deleteContinuationCluster()

جاوا

client.deleteContinuationCluster();

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از خوشه ادامه حذف می‌کند. در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

deleteUserManagementCluster

این API برای حذف محتوای کلاستر UserAccountManagement استفاده می‌شود.

کاتلین

client.deleteUserManagementCluster()

جاوا

client.deleteUserManagementCluster();

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از کلاستر UserAccountManagement حذف می‌کند. در صورت بروز خطا، کل درخواست رد شده و وضعیت موجود حفظ می‌شود.

deleteClusters

این API برای حذف محتوای یک نوع خوشه داده شده استفاده می‌شود.

کاتلین

client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

جاوا

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_FEATURED)
                .addClusterType(ClusterType.TYPE_RECOMMENDATION)
                ...
                .build());

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از تمام خوشه‌هایی که با انواع خوشه‌های مشخص‌شده مطابقت دارند، حذف می‌کند. کلاینت‌ها می‌توانند یک یا چند نوع خوشه را ارسال کنند. در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

مدیریت خطا

اکیداً توصیه می‌شود که به نتیجه‌ی وظیفه از APIهای انتشار گوش دهید تا بتوان اقدامات بعدی را برای بازیابی و ارسال مجدد یک وظیفه‌ی موفق انجام داد.

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 اجرای وظیفه به دلیل مشکلات نخ‌بندی (threading) با شکست مواجه شد. در این صورت، می‌توان آن را دوباره امتحان کرد.
4 SERVICE_CALL_PERMISSION_DENIED تماس گیرنده مجاز به برقراری تماس خدماتی نیست.
5 SERVICE_CALL_INVALID_ARGUMENT درخواست شامل داده‌های نامعتبر است (برای مثال، بیش از تعداد مجاز خوشه‌ها).
6 SERVICE_CALL_INTERNAL در سمت سرویس خطایی رخ داده است.
7 SERVICE_CALL_RESOURCE_EXHAUSTED تماس با سرویس خیلی زیاد انجام می‌شود.

مرحله ۳: مدیریت اهداف پخش

علاوه بر فراخوانی‌های API مربوط به انتشار محتوا از طریق یک job، لازم است یک BroadcastReceiver نیز راه‌اندازی شود تا درخواست انتشار محتوا را دریافت کند.

هدف از اعلان‌های هدف عمدتاً فعال‌سازی مجدد برنامه و همگام‌سازی اجباری داده‌ها است. اعلان‌های هدف برای ارسال مکرر طراحی نشده‌اند. این اعلان‌ها فقط زمانی فعال می‌شوند که سرویس Engage تشخیص دهد محتوا ممکن است قدیمی باشد (مثلاً یک هفته قدیمی). به این ترتیب، حتی اگر برنامه برای مدت طولانی اجرا نشده باشد، اطمینان بیشتری وجود دارد که کاربر می‌تواند تجربه محتوای جدیدی داشته باشد.

BroadcastReceiver باید به دو روش زیر تنظیم شود:

  • با استفاده از Context.registerReceiver() یک نمونه از کلاس BroadcastReceiver را به صورت پویا ثبت کنید. این کار امکان ارتباط از برنامه‌هایی را که هنوز در حافظه فعال هستند، فراهم می‌کند.

کاتلین

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)
}

جاوا

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 خود تعریف کنید. این به برنامه اجازه می‌دهد تا در زمانی که در حال اجرا نیست، اهداف پخش (broadcast intents) را دریافت کند و همچنین به برنامه اجازه می‌دهد تا محتوا را منتشر کند.

<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 توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishRecommendationClusters آغاز شود.
  • com.google.android.engage.action.PUBLISH_FEATURED توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishFeaturedCluster آغاز شود.
  • com.google.android.engage.action.PUBLISH_CONTINUATION توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishContinuationCluster آغاز شود.

گردش کار یکپارچه‌سازی

برای راهنمای گام به گام تأیید ادغام پس از تکمیل، به گردش کار ادغام توسعه‌دهنده مراجعه کنید.

سوالات متداول

برای سوالات متداول به بخش سوالات متداول Engage SDK مراجعه کنید.

تماس

در صورت وجود هرگونه سوال در طول فرآیند ادغام، engage-developers@google.com تماس بگیرید. تیم ما در اسرع وقت پاسخ خواهد داد.

مراحل بعدی

پس از تکمیل این ادغام، مراحل بعدی به شرح زیر است:

  • یک ایمیل به engage-developers@google.com ارسال کنید و APK یکپارچه خود را که آماده آزمایش توسط گوگل است، پیوست کنید.
  • گوگل یک بررسی داخلی انجام خواهد داد تا مطمئن شود که ادغام طبق انتظار کار می‌کند. در صورت نیاز به تغییرات، گوگل با شما تماس خواهد گرفت و جزئیات لازم را ارائه خواهد داد.
  • وقتی آزمایش کامل شد و نیازی به تغییر نبود، گوگل با شما تماس خواهد گرفت تا به شما اطلاع دهد که می‌توانید APK به‌روزرسانی‌شده و یکپارچه‌شده را در فروشگاه Play منتشر کنید.
  • پس از اینکه گوگل تأیید کرد که APK به‌روزرسانی‌شده‌ی شما در فروشگاه Play منتشر شده است، خوشه‌های توصیه ، ویژه و ادامه‌ی شما منتشر شده و برای کاربران قابل مشاهده خواهند بود.