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

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

این راهنما حاوی دستورالعمل‌هایی برای شرکای توسعه‌دهنده است تا محتوای خواندنی (کتاب‌های الکترونیک، کتاب‌های صوتی، کمیک/مانگا، وبلاگ‌ها، اخبار، و مجلات) را به سطوح محتوای Engage ارائه دهند.

پشتیبانی دسته‌بندی و سطوح

واجدشرایط بودن سطح Engage SDK براساس دسته محتوای برنامه شما است. از جدول زیر برای تعیین واجدشرایط بودن خود برای سطوح خاص استفاده کنید:

وضعیت دسته‌بندی محتوا یا مورد استفاده سطوح پشتیبانی‌شده
پشتیبانی‌شده
(واجدشرایط در همه سطوح)
  • کتاب‌های الکترونیک
  • کُمیک و مانگا
  • کتاب‌های صوتی
  • خدمات خواندن محتوای طولانی تولیدشده توسط کاربر
  • وبلاگ‌ها
  • مجموعه‌ها
  • Entertainment Space
  • برگه برنامه‌های «فروشگاه Play»
  • زبانه «شما» در «فروشگاه Play» (فقط توصیه‌های شخصی‌سازی‌شده و ادامه دادن)
  • صفحه فهرستگان فروشگاه «فروشگاه Play»
تاحدی پشتیبانی می‌شود
(در برخی سطوح واجدشرایط است)
  • اخبار و مجله‌ها*
  • مجموعه‌ها
  • Entertainment Space
پشتیبانی نمی‌شود
  • ای-کتاب یا PDFخوان
  • مرورهای کتاب
  • دانشنامه / واژه‌نامه
  • مترجم
  • نوشتار مذهبی

برنامه‌های اخبار

برنامه‌های خبری محتوای متنوعی ارائه می‌دهند که هرکدام مشمول قوانین واجدشرایط بودن منحصربه‌فردی هستند. ازآنجایی‌که محتوای Engage SDK در «فروشگاه Play» با «ابزارهای ممتاز رشد Play» مطابقت دارد، مقاله‌های خبری و کلیپ‌های ویدیویی از برنامه‌های خبری برای «فروشگاه Play» واجدشرایط نیستند، اگرچه برای «مجموعه‌ها» و Entertainment Space واجدشرایط هستند. برعکس، محتوای خبری غیرسنتی، مثل پادکست و دستور پخت، ممکن است واجدشرایط «فروشگاه Play» باشد:

نوع نهاد واجدشرایط برای «مجموعه‌ها» واجدشرایط برای Entertainment Space واجدشرایط برای «فروشگاه Play»
مقاله خبری بله (برگه خواندن) بله (برگه خواندن) نه
کلیپ ویدیویی بله (برگه تماشا) بله (برگه تماشا) نه
پادکست بله (برگه «گوش دادن») بله (برگه «گوش دادن») بله
دستور پخت بله (برگه غذا) نه بله

جزئیات یکپارچه‌سازی

این بخش مراحل، مدل‌های داده، و اصطلاحات لازم برای ادغام با Engage SDK برای خواندن محتوا را به‌تفصیل شرح می‌دهد.

اصطلاحات

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

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

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

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

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

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

    شکل ۳. رابط کاربری «فضای سرگرمی» که خوشه «ادامه» را با توصیه‌های ناتمام از چندین شریک نشان می‌دهد (درحال‌حاضر فقط یک توصیه قابل‌مشاهده است).
  • خوشه ویژه مجموعه‌ای از موارد را از چندین شریک توسعه‌دهنده در یک گروه واسط کاربر واحد نمایش می‌دهد. یک خوشه «ویژه» وجود خواهد داشت که در نزدیکی بالای واسط کاربر با جایگاه اولویت‌دار بالاتر از همه خوشه‌های «توصیه» ظاهر می‌شود. هر شریک توسعه‌دهنده می‌تواند حداکثر ۱۰ نهاد را در خوشه «ویژه» همه‌فرستی کند.

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

پیش‌کار

حداقل سطح میانای برنامه‌سازی کاربردی: ۱۹

کتابخانه 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'
}

خلاصه

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

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

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

مرحله ۱: ارائه داده‌های نهاد

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

  1. EbookEntity
  2. AudiobookEntity
  3. BookSeriesEntity

جدول‌های زیر مشخصه‌های دردسترس و الزامات هر نوع را نشان می‌دهد.

EbookEntity

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

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

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

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

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

TYPE_CONTINUE - ازسر گرفتن کتاب ناتمام.

TYPE_NEXT - Continue on a new one of a series.

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

آخرین زمان تعامل الزامی مشروط

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

کتاب‌های الکترونیکی که *به‌تازگی* خریداری شده‌اند می‌توانند بخشی از خوشه ادامه خواندن باشند.

بر حسب میلی‌ثانیه.

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

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

مقدار باید بیشتر از ۰ و کمتر از ۱۰۰ باشد.

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

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

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

بر حسب میلی‌ثانیه.

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

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

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

بر حسب میلی‌ثانیه.

AudiobookEntity

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

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

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

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

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

TYPE_CONTINUE - ازسر گرفتن کتاب ناتمام.

TYPE_NEXT - Continue on a new one of a series.

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

آخرین زمان تعامل الزامی مشروط

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

بر حسب میلی‌ثانیه.

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

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

کتاب‌های صوتی که *به‌تازگی* خریداری شده‌اند می‌توانند بخشی از خوشه ادامه خواندن باشند.

مقدار باید بیشتر از ۰ و کمتر از ۱۰۰ باشد.

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

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

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

بر حسب میلی‌ثانیه.

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

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

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

بر حسب میلی‌ثانیه.

BookSeriesEntity

شیء BookSeriesEntity نشان‌دهنده مجموعه کتاب است (برای مثال، مجموعه کتاب هری پاتر که ۷ کتاب دارد).

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

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

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

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

TYPE_CONTINUE - ازسر گرفتن کتاب ناتمام.

TYPE_NEXT - Continue on a new one of a series.

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

آخرین زمان تعامل الزامی مشروط

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

بر حسب میلی‌ثانیه.

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

وقتی مورد در خوشه «ادامه» است، باید ارائه شود.

سری کتاب‌های *جدیداً* خریداری‌شده می‌توانند بخشی از خوشه ادامه خواندن باشند.

مقدار باید بیشتر از ۰ و کمتر از ۱۰۰ باشد.

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

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

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

بر حسب میلی‌ثانیه.

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

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

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

بر حسب میلی‌ثانیه.

مشخصات تصویر

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

نسبت ابعادی خوشه(های) پشتیبانی‌شده حداقل پیکسل پیکسل‌های توصیه‌شده
مربع (۱×۱) همه خوشه‌ها ۳۰۰×۳۰۰ 1200x1200
افقی (۱٫۹۱x۱) ویژه و ادامه ‫۶۰۰×۳۱۴ 1200x628
عمودی (۴×۵) توصیه ‫۴۸۰×۶۰۰ 960x1200

قالب‌های فایل

PNG،‏ JPG،‏ GIF ایستا، WebP

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

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

توصیه‌های بیشتر

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

مثال

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 مسئول انتشار خوشه‌ها است. میاناهای برنامه‌سازی کاربردی زیر در کارخواه دردسترس است:

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

isServiceAvailable

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

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

نوع خوشه ثابت نوع خوشه مقدار عدد صحیح
نامعلوم TYPE_UNKNOWN 0
خوشه توصیه TYPE_RECOMMENDATION 1
خوشه ویژه TYPE_FEATURED 2
خوشه ادامه TYPE_CONTINUATION 3
خوشه مدیریت کاربر TYPE_ENGAGEMENT 8
خوشه اشتراک TYPE_SUBSCRIPTION 12

کاتلین

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 امکان بررسی دردسترس بودن برای انواع خوشه‌های خاص را فراهم می‌کند. اگر برنامه‌تان از انتقال متناوب استفاده می‌کند:

  • دسته‌های ادامه (مثل «ادامه خواندن») به‌طور پیش‌فرض در همه دستگاه‌های پشتیبانی‌شده فعال می‌مانند.
  • انواع دیگر خوشه‌ها (مانند «توصیه‌ها») به‌طور متناوب فعال و غیرفعال می‌شوند.

اگر این پیکربندی پیش‌فرض برای نیازهای شما مناسب نیست، با engage-developers@google.com تماس بگیرید.

برای نسخه‌های کیت توسعه نرم‌افزار قبل‌از نسخه ۱.۶.۰ (منسوخ‌شده)

کاتلین

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

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

کاتلین

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Reconnect with yourself")
                        .build())
                .build())

جاوا

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Reconnect with yourself")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

کاتلین

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

جاوا

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

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

  • داده‌های FeaturedCluster موجود از شریک توسعه‌دهنده برداشته می‌شود.
  • داده‌های درخواست تجزیه می‌شود و در «خوشه ویژه» به‌روزشده ذخیره می‌شود.

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

publishContinuationCluster

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

کاتلین

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(book_entity1)
                        .addEntity(book_entity2)
                        .build())
                .build())

جاوا

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(book_entity1)
                        .addEntity(book_entity2)
                        .build())
                .build())

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

  • داده‌های ContinuationCluster موجود از شریک توسعه‌دهنده برداشته می‌شود.
  • داده‌های درخواست تجزیه می‌شود و در «خوشه ادامه» به‌روزشده ذخیره می‌شود.

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

publishUserAccountManagementRequest

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

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

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

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

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

عنوان اختیاری - اگر ارائه نشود، تصویر باید ارائه شود عنوان روی کارت
متن کنش اختیاری نوشتار نشان‌داده‌شده در «دعوت به اقدام» (یعنی ورود به سیستم)
زیرنویس اختیاری زیرنویس اختیاری روی کارت

کاتلین

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

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

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

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

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

اگر محتوا به‌دلیل وارد نشدن کاربر به سیستم منتشر نشود، Google توصیه می‌کند «کارت ورود به سیستم» منتشر شود. اگر ارائه‌دهندگان به هر دلیلی نتوانند «کارت ورود به سیستم» را منتشر کنند، توصیه می‌کنیم با کد وضعیت NOT_PUBLISHED_REQUIRES_SIGN_IN با میانای برنامه‌سازی کاربردی updatePublishStatus تماس بگیرید

کاتلین

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

deleteRecommendationsClusters

این میانای برنامه‌سازی کاربردی برای حذف محتوای «خوشه‌های توصیه‌شده» استفاده می‌شود.

کاتلین

client.deleteRecommendationsClusters()

جاوا

client.deleteRecommendationsClusters();

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

deleteFeaturedCluster

این میانای برنامه‌سازی کاربردی برای حذف محتوای «دسته ویژه» استفاده می‌شود.

کاتلین

client.deleteFeaturedCluster()

جاوا

client.deleteFeaturedCluster();

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

deleteContinuationCluster

این میانای برنامه‌سازی کاربردی برای حذف محتوای «خوشه ادامه» استفاده می‌شود.

کاتلین

client.deleteContinuationCluster()

جاوا

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

کاتلین

client.deleteUserManagementCluster()

جاوا

client.deleteUserManagementCluster();

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

deleteClusters

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

کاتلین

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

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

مدیریت کردن خطا

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

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

خطا به‌صورت AppEngageException برگردانده می‌شود و علت آن به‌صورت کد خطا درج می‌شود.

کد خطا نام خطا توجه
1 SERVICE_NOT_FOUND این سرویس در دستگاه ارائه‌شده دردسترس نیست.
2 SERVICE_NOT_AVAILABLE این سرویس در دستگاه ارائه‌شده دردسترس است، اما در زمان تماس دردسترس نیست (برای مثال، صریحاً غیرفعال شده است).
3 SERVICE_CALL_EXECUTION_FAILURE اجرای تکلیف به‌دلیل مشکلات رشته‌ای ناموفق بود. در این مورد، می‌توان دوباره امتحان کرد.
4 SERVICE_CALL_PERMISSION_DENIED تماس‌گیرنده مجاز به برقراری تماس سرویس نیست.
5 SERVICE_CALL_INVALID_ARGUMENT درخواست حاوی داده‌های نامعتبر است (برای مثال، بیشتر از تعداد مجاز خوشه‌ها).
6 SERVICE_CALL_INTERNAL خطایی در سمت سرویس وجود دارد.
7 SERVICE_CALL_RESOURCE_EXHAUSTED فراخوانی سرویس بیش‌ازحد انجام می‌شود.

مرحله ۳: مدیریت هدف‌های همه‌فرستی

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

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

BroadcastReceiver باید به دو روش زیر راه‌اندازی شود:

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

کاتلین

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

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

قصد زیر توسط سرویس ارسال خواهد شد:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION توصیه می‌شود هنگام دریافت این قصد، تماس publishRecommendationClusters شروع شود.
  • com.google.android.engage.action.PUBLISH_FEATURED توصیه می‌شود هنگام دریافت این قصد، تماس publishFeaturedCluster را شروع کنید.
  • com.google.android.engage.action.PUBLISH_CONTINUATIONIt is recommended to start apublishContinuationCluster` call when receiving this intent.

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

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

پرسشگان

برای پرسشگان، به پرسشگان Engage SDK مراجعه کنید.

تماس

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

مراحل بعدی

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

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