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

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

این راهنما شامل دستورالعمل‌هایی برای شرکای توسعه‌دهنده است تا محتوای سلامت و تناسب اندام را به سطوح محتوای Engage ارائه دهند.

جزئیات ادغام

اصطلاحات

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

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

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

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

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

    • موجودیت: شیئی که یک آیتم واحد را در یک خوشه نشان می‌دهد. این ادغام، موجودیت‌هایی را ارائه می‌دهد که با استفاده از خوشه توصیه، نمایان می‌شوند:

      • ArticleEntity : ArticleEntity یک پیشنهاد برای محتوای متنی مرتبط با سلامت و تناسب اندام ارائه می‌دهد. می‌توان از آن برای مقالات، پست‌های وبلاگ، محتوای بازاریابی، گزیده‌های خبری و غیره استفاده کرد.

        شکل ۱: رابط کاربری که یک ArticleEntity واحد را در خوشه توصیه‌ها نشان می‌دهد.
      • PersonEntity : PersonEntity نماینده یک شخص است. توصیه‌ها می‌تواند برای برجسته کردن یک مربی یا هر شخص مرتبط با سلامت و تناسب اندام و غیره باشد.

        شکل ۲: رابط کاربری که یک PersonEntity واحد را در خوشه توصیه‌ها نشان می‌دهد.
      • موجودیت رویداد : موجودیت رویداد نشان‌دهنده رویدادی است که در آینده اتفاق می‌افتد. زمان شروع رویداد، بخش مهمی از اطلاعات است که باید به کاربران منتقل شود. این موجودیت می‌تواند برای نمایش رویدادهایی مانند اردوی اهدای خون، جلسات آموزشی، کلاس‌های باشگاه یا یوگا و غیره که مربوط به سلامت و تناسب اندام هستند، استفاده شود.

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

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

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

      شکل ۶. رابط کاربری که یک ArticleEntity واحد را در یک خوشه Continuation نشان می‌دهد.
    • EventReservationEntity : EventReservationEntity نشان‌دهنده رزرو برای یک رویداد است و به کاربران کمک می‌کند تا رزروهای رویدادهای تناسب اندام و سلامت آینده یا در حال انجام را پیگیری کنند. مثال: جلسات آموزشی

      شکل ۸. رابط کاربری که یک EventReservationEntity واحد را درون یک کلاستر Continuation نشان می‌دهد.
  • خوشه ویژه ، مجموعه‌ای از موجودیت‌ها را از چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری نمایش می‌دهد. یک خوشه ویژه وجود خواهد داشت که در نزدیکی بالای رابط کاربری با اولویت بالاتر از همه خوشه‌های توصیه نمایش داده می‌شود. هر شریک توسعه‌دهنده مجاز به پخش حداکثر 10 موجودیت در خوشه ویژه خواهد بود.

    • موجودیت ویژه عمومی (GenericFeaturedEntity) : موجودیت ویژه عمومی با آیتم توصیه (Recommendation item) متفاوت است، زیرا آیتم ویژه باید برای یک محتوای برتر از توسعه‌دهندگان استفاده شود و باید مهم‌ترین محتوایی را که برای کاربران جالب و مرتبط خواهد بود، نشان دهد.

      شکل ۱۲: رابط کاربری که یک کارت GenericFeaturedEntity قهرمان واحد را در یک خوشه ویژه نشان می‌دهد

پیش کار

حداقل سطح 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.5.12'
}

خلاصه

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

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

نوع خوشه محدودیت‌های خوشه حداقل محدودیت موجودیت در یک خوشه حداکثر محدودیت‌های موجودیت در یک خوشه
خوشه(های) پیشنهادی حداکثر ۷ عدد حداقل ۱ حداکثر ۵۰ ( ArticleEntity ، PersonEntity یا EventEntity )
خوشه ادامه حداکثر ۱ حداقل ۱ حداکثر 20 ( ArticleEntity یا EventReservationEntity )
خوشه ویژه حداکثر ۱ حداقل ۱ حداکثر 20 ( GenericFeaturedEntity )

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

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

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

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

GenericFeaturedEntity

ویژگی مورد نیاز توضیحات قالب
اکشن اوری مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

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

اوری
تصاویر پوستر مورد نیاز

در صورت ارائه چندین تصویر، فقط ۱ تصویر نمایش داده می‌شود. نسبت تصویر توصیه شده ۱۶:۹ است.

توجه: اگر نشان ارائه می‌شود، لطفاً فضای امن ۲۴ dps را در بالا و پایین تصویر تضمین کنید.

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

متن رایگان

اندازه متن پیشنهادی: ۵۰ کاراکتر

توضیحات اختیاری

یک پاراگراف متن برای توصیف موجودیت.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی: ۱۸۰ کاراکتر

فهرست زیرنویس‌ها اختیاری

حداکثر ۳ زیرنویس، که هر زیرنویس شامل یک خط متن است.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی برای هر زیرنویس: حداکثر ۵۰ کاراکتر

نشان‌ها اختیاری

هر نشان یا متن آزاد (حداکثر ۱۵ کاراکتر) یا تصویر کوچک است.

جلوه‌های ویژه UX روی تصویر/ویدئو، برای مثال به عنوان پوشش نشان روی تصویر

  • «به‌روزرسانی زنده»
  • مدت زمان مطالعه مقاله
نشان - متن اختیاری

عنوان برای نشان

توجه: برای نشان، متن یا تصویر الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

نشان - تصویر اختیاری

تصویر کوچک

جلوه‌های ویژه تجربه کاربری، برای مثال به صورت پوشش نشان روی تصویر کوچک تصویر/ویدئو.

توجه: برای نشان، متن یا تصویر الزامی است.

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

فهرست Enumها

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

ArticleEntity

ویژگی مورد نیاز توضیحات قالب
اکشن اوری مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

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

اوری
عنوان مورد نیاز عنوان نهاد.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۵۰ کاراکتر

تصاویر پوستر اختیاری

در صورت ارائه چندین تصویر، فقط ۱ تصویر نمایش داده می‌شود. نسبت تصویر توصیه شده ۱۶:۹ است.

توجه: تصویر اکیداً توصیه می‌شود. در صورت ارائه نشان، لطفاً فضای امن ۲۴ dps را در بالا و پایین تصویر تضمین کنید.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
منبع - عنوان اختیاری نام نویسنده، سازمان یا گزارشگر

متن رایگان

اندازه متن پیشنهادی: کمتر از ۲۵ کاراکتر

منبع - تصویر اختیاری تصویری از منبع مانند نویسنده، سازمان، خبرنگار برای راهنمایی به مشخصات تصویر مراجعه کنید.
توضیحات اختیاری

یک پاراگراف متن برای توصیف موجودیت.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی: ۱۸۰ کاراکتر

فهرست زیرنویس‌ها اختیاری

حداکثر ۳ زیرنویس، که هر زیرنویس شامل یک خط متن است.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی برای هر زیرنویس: حداکثر ۵۰ کاراکتر

نشان‌ها اختیاری

هر نشان یا متن آزاد (حداکثر ۱۵ کاراکتر) یا تصویر کوچک است.

جلوه‌های ویژه UX روی تصویر/ویدئو، برای مثال به عنوان پوشش نشان روی تصویر

  • «به‌روزرسانی زنده»
  • مدت زمان مطالعه مقاله
نشان - متن اختیاری

عنوان برای نشان

توجه: برای نشان، متن یا تصویر الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

نشان - تصویر اختیاری

تصویر کوچک

جلوه‌های ویژه تجربه کاربری، برای مثال به صورت پوشش نشان روی تصویر کوچک تصویر/ویدئو.

توجه: برای نشان، متن یا تصویر الزامی است.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
زمان انتشار محتوا اختیاری این نشانگر زمانیِ epoch بر حسب میلی‌ثانیه است که نشان می‌دهد محتوا در چه زمانی در برنامه منتشر/به‌روزرسانی شده است. مهر زمانی عصر بر حسب میلی ثانیه
آخرین زمان نامزدی مشروط الزامی

مهر زمانیِ آخرین تعامل کاربر با این موجودیت بر حسب میلی‌ثانیه.

توجه: اگر این موجودیت بخشی از خوشه تداوم باشد، این فیلد الزامی است.

مهر زمانی عصر بر حسب میلی ثانیه
درصد پیشرفت مشروط الزامی

درصد کل محتوای مصرف‌شده توسط کاربر تا به امروز.

توجه: اگر این موجودیت بخشی از خوشه تداوم باشد، این فیلد الزامی است.

یک مقدار صحیح بین ۰ تا ۱۰۰.
دسته بندی محتوا اختیاری دسته بندی محتوای موجود در موجودیت را شرح دهید.

فهرست Enumها

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

PersonEntity

ویژگی مورد نیاز توضیحات قالب
اکشن اوری مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

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

اوری
مشخصات - نام مورد نیاز نام یا شناسه یا شناسه پروفایل، مثلاً "John Doe"، "@TeamPixel" و غیره.

رشته

اندازه متن پیشنهادی: حداکثر ۵۰ کاراکتر

پروفایل - آواتار مورد نیاز

تصویر پروفایل یا تصویر آواتار کاربر.

توجه: تصویر باید مربعی شکل و با نسبت تصویر ۱:۱ باشد.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
مشخصات - متن اضافی اختیاری متن رایگان مانند دسته پروفایل.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

مشخصات - تصویر اضافی اختیاری تصویر کوچکی مانند نشان تأیید. برای راهنمایی به مشخصات تصویر مراجعه کنید.
تصویر سربرگ اختیاری

در صورت ارائه چندین تصویر، فقط ۱ تصویر نمایش داده می‌شود. نسبت تصویر توصیه شده ۱۶:۹ است.

توجه: تصویر اکیداً توصیه می‌شود. در صورت ارائه نشان، لطفاً فضای امن ۲۴ dps را در بالا و پایین تصویر تضمین کنید.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
محبوبیت - تعداد اختیاری

تعداد دنبال‌کنندگان یا مقدار محبوبیت را مشخص کنید، مثلاً - "3.7 میلیون".

نکته: اگر هم تعداد و هم مقدار تعداد ارائه شوند، از تعداد استفاده خواهد شد.

رشته

اندازه متن پیشنهادی: حداکثر ۲۰ کاراکتر برای تعداد + برچسب (ترکیبی از هر کاراکتر)

محبوبیت - تعداد ارزش اختیاری

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

نکته: اگر برنامه شما نمی‌خواهد منطق بهینه‌سازی یک عدد بزرگ برای اندازه‌های مختلف نمایشگر را مدیریت کند، مقدار شمارش (Count Value) را ارائه دهید. اگر هم تعداد و هم مقدار شمارش ارائه شوند، از تعداد (Count Value) استفاده خواهد شد.

بلند
محبوبیت - برچسب اختیاری مشخص کنید که برچسب محبوبیت چیست. به عنوان مثال - "لایک".

رشته

اندازه متن پیشنهادی: حداکثر ۲۰ کاراکتر برای مجموع تعداد + برچسب

محبوبیت - بصری اختیاری

مشخص کنید که این تعامل برای چیست. برای مثال - تصویری که آیکون لایک یا ایموجی را نشان می‌دهد.

می‌تواند بیش از یک تصویر ارائه دهد، هرچند ممکن است همه آنها در همه فرم فاکتورها نمایش داده نشوند.

توجه: تصویر باید مربعی شکل و با نسبت تصویر ۱:۱ باشد.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
رتبه‌بندی - حداکثر مقدار مورد نیاز

حداکثر مقدار مقیاس رتبه‌بندی.

اگر مقدار فعلی رتبه‌بندی نیز ارائه شده باشد، باید ارائه شود.

عدد >= 0.0
رتبه‌بندی - ارزش فعلی مورد نیاز

مقدار فعلی مقیاس رتبه‌بندی.

اگر حداکثر مقدار رتبه‌بندی نیز ارائه شده باشد، باید ارائه شود.

عدد >= 0.0
رتبه‌بندی - تعداد اختیاری

تعداد رتبه‌بندی‌ها برای نهاد.

نکته: اگر برنامه شما نحوه نمایش تعداد به کاربران را کنترل می‌کند، این فیلد را ارائه دهید. از یک رشته مختصر استفاده کنید. برای مثال، اگر تعداد ۱,۰۰۰,۰۰۰ است، استفاده از مخففی مانند ۱M را در نظر بگیرید تا تعداد در اندازه‌های کوچک‌تر صفحه نمایش کوتاه نشود.

رشته
رتبه‌بندی - مقدار شمارش اختیاری

تعداد رتبه‌بندی‌ها برای نهاد.

نکته: اگر خودتان منطق نمایش اختصارات را مدیریت نمی‌کنید، این فیلد را وارد کنید. اگر هم تعداد و هم مقدار تعداد وجود داشته باشند، تعداد به کاربران نمایش داده می‌شود.

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

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - شهر اختیاری شهری که فرد در آن مستقر است یا خدمت می‌کند.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - نمایش آدرس اختیاری آدرسی که فرد در آن قرار دارد یا به آن خدمت رسانی می‌کند، به کاربر نمایش داده می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - آدرس خیابان اختیاری آدرس خیابان (در صورت وجود) که شخص در آن مستقر است یا خدمت می‌کند.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - ایالت اختیاری ایالتی (در صورت وجود) که شخص در آن مستقر است یا خدمت می‌کند.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - کد پستی اختیاری کد پستی (در صورت وجود) جایی که فرد در آن مستقر است یا خدمت می‌کند.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

موقعیت مکانی - محله اختیاری محله (در صورت وجود) که فرد در آن مستقر است یا خدمت می‌کند.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

نشان‌ها اختیاری

هر نشان یا متن آزاد (حداکثر ۱۵ کاراکتر) یا تصویر کوچک است.

نشان - متن اختیاری

عنوان برای نشان

توجه: برای نشان، متن یا تصویر الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

نشان - تصویر اختیاری

تصویر کوچک

جلوه‌های ویژه تجربه کاربری، برای مثال به صورت پوشش نشان روی تصویر کوچک تصویر/ویدئو.

توجه: برای نشان، متن یا تصویر الزامی است.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
توضیحات اختیاری

یک پاراگراف متن برای توصیف موجودیت.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی: ۱۸۰ کاراکتر

فهرست زیرنویس‌ها اختیاری

حداکثر ۳ زیرنویس، که هر زیرنویس شامل یک خط متن است.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی برای هر زیرنویس: حداکثر ۵۰ کاراکتر

دسته بندی محتوا اختیاری دسته بندی محتوای موجود در موجودیت را شرح دهید.

فهرست Enumهای واجد شرایط

  • نوع سلامت و تناسب اندام (مثال - مربی یوگا/تناسب اندام)
  • TYPE_HOME_AND_AUTO (مثال - لوله‌کش)
  • TYPE_SPORTS (مثال - بازیکن)
  • نوع_تاریخ

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

EventEntity

ویژگی مورد نیاز توضیحات قالب
اکشن اوری مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

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

اوری
عنوان مورد نیاز عنوان نهاد.

رشته

اندازه متن پیشنهادی: حداکثر ۵۰ کاراکتر

زمان شروع مورد نیاز

مهر زمانیِ دوره‌ای که انتظار می‌رود رویداد در آن شروع شود.

نکته: این مقدار بر حسب میلی‌ثانیه نمایش داده می‌شود.

مهر زمانی عصر بر حسب میلی ثانیه
حالت رویداد مورد نیاز

فیلدی برای مشخص کردن اینکه آیا رویداد مجازی، حضوری یا هر دو خواهد بود.

Enum: مجازی، حضوری یا ترکیبی
تصاویر پوستر مورد نیاز

در صورت ارائه چندین تصویر، فقط ۱ تصویر نمایش داده می‌شود. نسبت تصویر توصیه شده ۱۶:۹ است.

توجه: تصویر اکیداً توصیه می‌شود. در صورت ارائه نشان، لطفاً فضای امن ۲۴ dps را در بالا و پایین تصویر تضمین کنید.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
مکان - کشور مشروط الزامی

کشوری که رویداد در آن اتفاق می‌افتد.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - شهر مشروط الزامی

شهری که رویداد در آن اتفاق می‌افتد.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - نمایش آدرس مشروط الزامی

آدرس یا نام مکانی که رویداد در آن برگزار خواهد شد که باید به کاربر نمایش داده شود.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - آدرس خیابان اختیاری آدرس خیابان (در صورت وجود) مکانی که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - ایالت اختیاری ایالت یا استانی (در صورت وجود) که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - کد پستی اختیاری کد پستی (در صورت وجود) محل برگزاری رویداد.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

موقعیت مکانی - محله اختیاری محله (در صورت وجود) که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

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

مهر زمانیِ دوره‌ای که انتظار می‌رود رویداد در آن پایان یابد.

نکته: این مقدار بر حسب میلی‌ثانیه نمایش داده می‌شود.

مهر زمانی عصر بر حسب میلی ثانیه
توضیحات اختیاری

یک پاراگراف متن برای توصیف موجودیت.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی: ۱۸۰ کاراکتر

فهرست زیرنویس‌ها اختیاری

حداکثر ۳ زیرنویس، که هر زیرنویس شامل یک خط متن است.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی برای هر زیرنویس: حداکثر ۵۰ کاراکتر

نشان‌ها اختیاری

هر نشان یا متن آزاد (حداکثر ۱۵ کاراکتر) یا تصویر کوچک است.

نشان - متن اختیاری

عنوان برای نشان

توجه: برای نشان، متن یا تصویر الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

نشان - تصویر اختیاری

تصویر کوچک

جلوه‌های ویژه تجربه کاربری، برای مثال به صورت پوشش نشان روی تصویر کوچک تصویر/ویدئو.

توجه: برای نشان، متن یا تصویر الزامی است.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
قیمت - قیمت فعلی مشروط مورد نیاز

قیمت فعلی بلیط/کارت ورود به رویداد.

در صورت ارائه قیمت خط خورده، باید ارائه شود.

متن رایگان
قیمت - قیمت ضربدری اختیاری قیمت اصلی بلیط/کارت ورود به رویداد. متن رایگان
اطلاع از قیمت اختیاری اعلام قیمت برای ارائه تخفیف ویژه، رویداد، و تخفیف برای اعضا، در صورت وجود.

متن رایگان

اندازه متن پیشنهادی: کمتر از ۴۵ کاراکتر (متن خیلی طولانی ممکن است بیضی نشان دهد)

دسته بندی محتوا اختیاری دسته بندی محتوای موجود در موجودیت را شرح دهید.

فهرست Enumهای واجد شرایط

  • نوع فیلم و سریال (مثال - سینما)
  • TYPE_DIGITAL_GAMES (مثال - ورزش‌های الکترونیکی)
  • نوع موسیقی (مثال - کنسرت)
  • نوع سفر و محل (مثال - تور، جشنواره)
  • نوع_سلامتی_و_تناسب_اندام (مثال - کلاس یوگا)
  • نوع آموزش (مثال - کلاس)
  • TYPE_SPORTS (مثال - بازی فوتبال)
  • TYPE_DATING (مثال - ملاقات)

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

EventReservationEntity

ویژگی مورد نیاز توضیحات قالب
اکشن اوری مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

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

اوری
عنوان مورد نیاز عنوان نهاد.

رشته

اندازه متن پیشنهادی: حداکثر ۵۰ کاراکتر

زمان شروع مورد نیاز

مهر زمانیِ دوره‌ای که انتظار می‌رود رویداد در آن شروع شود.

نکته: این مقدار بر حسب میلی‌ثانیه نمایش داده می‌شود.

مهر زمانی عصر بر حسب میلی ثانیه
حالت رویداد مورد نیاز

فیلدی برای مشخص کردن اینکه آیا رویداد مجازی، حضوری یا هر دو خواهد بود.

Enum: مجازی، حضوری یا ترکیبی
مکان - کشور مشروط الزامی

کشوری که رویداد در آن اتفاق می‌افتد.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - شهر مشروط الزامی

شهری که رویداد در آن اتفاق می‌افتد.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - نمایش آدرس مشروط الزامی

آدرس یا نام مکانی که رویداد در آن برگزار خواهد شد که باید به کاربر نمایش داده شود.

توجه: این مورد برای رویدادهایی که IN_PERSON یا HYBRID هستند، الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - آدرس خیابان اختیاری آدرس خیابان (در صورت وجود) مکانی که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - ایالت اختیاری ایالت یا استانی (در صورت وجود) که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

مکان - کد پستی اختیاری کد پستی (در صورت وجود) محل برگزاری رویداد.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

موقعیت مکانی - محله اختیاری محله (در صورت وجود) که رویداد در آن برگزار می‌شود.

متن رایگان

اندازه متن پیشنهادی: حداکثر ~20 کاراکتر

تصاویر پوستر اختیاری

در صورت ارائه چندین تصویر، فقط ۱ تصویر نمایش داده می‌شود. نسبت تصویر توصیه شده ۱۶:۹ است.

توجه: تصویر اکیداً توصیه می‌شود. در صورت ارائه نشان، لطفاً فضای امن ۲۴ dps را در بالا و پایین تصویر تضمین کنید.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
زمان پایان اختیاری

مهر زمانیِ دوره‌ای که انتظار می‌رود رویداد در آن پایان یابد.

نکته: این مقدار بر حسب میلی‌ثانیه نمایش داده می‌شود.

مهر زمانی عصر بر حسب میلی ثانیه
ارائه دهنده خدمات - نام اختیاری

نام ارائه دهنده خدمات.

توجه: متن یا تصویر برای ارائه دهنده خدمات الزامی است.

متن آزاد. به عنوان مثال، نام برگزارکننده رویداد/تور
ارائه دهنده خدمات - تصویر اختیاری

لوگو/تصویر ارائه دهنده خدمات.

توجه: متن یا تصویر برای ارائه دهنده خدمات الزامی است.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
توضیحات اختیاری

یک پاراگراف متن برای توصیف موجودیت.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی: ۱۸۰ کاراکتر

فهرست زیرنویس‌ها اختیاری

حداکثر ۳ زیرنویس، که هر زیرنویس شامل یک خط متن است.

توجه: یا توضیحات یا فهرست زیرنویس‌ها به کاربر نمایش داده می‌شود، نه هر دو.

متن رایگان

اندازه متن پیشنهادی برای هر زیرنویس: حداکثر ۵۰ کاراکتر

نشان‌ها اختیاری

هر نشان یا متن آزاد (حداکثر ۱۵ کاراکتر) یا تصویر کوچک است.

نشان - متن اختیاری

عنوان برای نشان

توجه: برای نشان، متن یا تصویر الزامی است.

متن رایگان

اندازه متن پیشنهادی: حداکثر ۱۵ کاراکتر

نشان - تصویر اختیاری

تصویر کوچک

جلوه‌های ویژه تجربه کاربری، برای مثال به صورت پوشش نشان روی تصویر کوچک تصویر/ویدئو.

توجه: برای نشان، متن یا تصویر الزامی است.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
شناسه رزرو اختیاری شناسه رزرو برای رزرو رویداد. متن رایگان
قیمت - قیمت فعلی مشروط مورد نیاز

قیمت فعلی بلیط/کارت ورود به رویداد.

در صورت ارائه قیمت خط خورده، باید ارائه شود.

متن رایگان
قیمت - قیمت ضربدری اختیاری قیمت اصلی بلیط/کارت ورود به رویداد. متن رایگان
اطلاع از قیمت اختیاری اعلام قیمت برای ارائه تخفیف ویژه، رویداد، و تخفیف برای اعضا، در صورت وجود.

متن رایگان

اندازه متن پیشنهادی: کمتر از ۴۵ کاراکتر (متن خیلی طولانی ممکن است بیضی نشان دهد)

رتبه‌بندی - حداکثر مقدار اختیاری

حداکثر مقدار مقیاس رتبه‌بندی.

اگر مقدار فعلی رتبه‌بندی نیز ارائه شده باشد، باید ارائه شود.

عدد >= 0.0
رتبه‌بندی - ارزش فعلی اختیاری

مقدار فعلی مقیاس رتبه‌بندی.

اگر حداکثر مقدار رتبه‌بندی نیز ارائه شده باشد، باید ارائه شود.

عدد >= 0.0
رتبه‌بندی - تعداد اختیاری

تعداد رتبه‌بندی‌های این رویداد.

توجه: اگر برنامه شما می‌خواهد نحوه نمایش این عدد به کاربران را کنترل کند، این فیلد را ارائه دهید. لطفاً رشته مختصری را که می‌تواند به کاربر نمایش داده شود، ارائه دهید. برای مثال، اگر تعداد ۱,۰۰۰,۰۰۰ است، استفاده از اختصاراتی مانند ۱M را در نظر بگیرید تا در اندازه‌های کوچک‌تر صفحه نمایش، کوتاه نشود.

رشته
رتبه‌بندی - مقدار شمارش اختیاری

تعداد رتبه‌بندی‌های این رویداد.

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

بلند
دسته بندی محتوا اختیاری دسته بندی محتوای موجود در موجودیت را شرح دهید.

فهرست Enumهای واجد شرایط

  • نوع فیلم و سریال (مثال - سینما)
  • TYPE_DIGITAL_GAMES (مثال - ورزش‌های الکترونیکی)
  • نوع موسیقی (مثال - کنسرت)
  • نوع سفر و محل (مثال - تور، جشنواره)
  • نوع_سلامتی_و_تناسب_اندام (مثال - کلاس یوگا)
  • نوع آموزش (مثال - کلاس)
  • TYPE_SPORTS (مثال - بازی فوتبال)
  • TYPE_DATING (مثال - ملاقات)

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

مشخصات تصویر

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

نسبت ابعاد حداقل پیکسل‌ها پیکسل‌های توصیه‌شده

مربع (۱x۱)

ترجیحی

۳۰۰x۳۰۰ ۱۲۰۰x۱۲۰۰
منظره (۱.۹۱x۱) ۶۰۰x۳۱۴ ۱۲۰۰x۶۲۸
پرتره (۴x۵) ۴۸۰x۶۰۰ ۹۶۰x۱۲۰۰

تصاویر باید روی CDN های عمومی میزبانی شوند تا گوگل بتواند به آنها دسترسی داشته باشد.

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

PNG، JPG، GIF ثابت، WebP

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

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

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

  • ناحیه امن تصویر: محتوای مهم خود را در مرکز ۸۰٪ تصویر قرار دهید.
  • از یک پس‌زمینه شفاف استفاده کنید تا تصویر در تنظیمات تم تیره و روشن به درستی نمایش داده شود.

دسته بندی محتوا

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

  • TYPE_EDUCATION
  • TYPE_SPORTS
  • TYPE_MOVIES_AND_TV_SHOWS
  • TYPE_BOOKS
  • TYPE_AUDIOBOOKS
  • TYPE_MUSIC
  • TYPE_DIGITAL_GAMES
  • TYPE_TRAVEL_AND_LOCAL
  • TYPE_HOME_AND_AUTO
  • TYPE_BUSINESS
  • TYPE_NEWS
  • TYPE_FOOD_AND_DRINK
  • TYPE_SHOPPING
  • TYPE_HEALTH_AND_FITENESS
  • TYPE_MEDICAL
  • TYPE_PARENTING
  • TYPE_DATING

تصاویر باید روی CDN های عمومی میزبانی شوند تا گوگل بتواند به آنها دسترسی داشته باشد.

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

  1. برخی از موجودیت‌ها مانند ArticleEntity و GenericFeaturedEntity واجد شرایط استفاده از هر یک از دسته‌های محتوا هستند. برای سایر موجودیت‌ها مانند EventEntity ، EventReservationEntity ، PersonEntity ، فقط زیرمجموعه‌ای از این دسته‌ها واجد شرایط هستند. قبل از پر کردن لیست، لیست دسته‌های واجد شرایط برای یک نوع موجودیت را بررسی کنید.
  2. برای برخی از دسته‌های محتوا، به جای ترکیبی از موجودیت‌های عمومی و دسته محتوا، از نوع موجودیت خاص استفاده کنید:

    • نوع_فیلم‌ها_و_نمایش‌های_تلویزیون - قبل از استفاده از موجودیت‌های عمومی، موجودیت‌های موجود در راهنمای ادغام Watch را بررسی کنید.
    • TYPE_BOOKS - قبل از استفاده از موجودیت‌های عمومی ، EbookEntity را بررسی کنید.
    • TYPE_AUDIOBOOKS - قبل از استفاده از موجودیت‌های عمومی، AudiobookEntity را بررسی کنید.
    • TYPE_SHOPPING - قبل از استفاده از موجودیت‌های عمومی ، ShoppingEntity را بررسی کنید.
    • نوع غذا و نوشیدنی - قبل از استفاده از موجودیت‌های عمومی، موجودیت‌ها را از راهنمای ادغام غذا بررسی کنید.
  3. فیلد ContentCategory اختیاری است و اگر محتوا به هیچ یک از دسته‌های ذکر شده قبلی تعلق ندارد، باید خالی گذاشته شود.

  4. در صورتی که چندین دسته محتوا ارائه شده باشد، آنها را به ترتیب ارتباط با محتوا ارائه دهید و مرتبط‌ترین دسته محتوا در ابتدا قرار گیرد.

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

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

AppEngagePublishClient مسئول انتشار کلاسترها است.

API های زیر برای انتشار خوشه ها در کلاینت وجود دارد:

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

isServiceAvailable

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

کاتلین

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("Top Picks For You")
            .build()
        )
        .build()
    )

جاوا

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

کاتلین

client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

جاوا

client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

publishContinuationCluster

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

کاتلین

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

جاوا

client.publishContinuationCluster(
            new PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    new 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_CONTINUATION)
      .addClusterType(ClusterType.TYPE_FEATURED)
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      .build())

جاوا

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

When the service receives the request, it removes the existing data from all clusters matching the specified cluster types. Clients can choose to pass one or many cluster types. In case of an error, the entire request is rejected and the existing state is maintained.

مدیریت خطا

It is highly recommended to listen to the task result from the publish APIs such that a follow-up action can be taken to recover and resubmit an successful task.

کاتلین

client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

جاوا

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

The error is returned as an AppEngageException with the cause included as an error code.

کد خطا Error name توجه داشته باشید
1 SERVICE_NOT_FOUND The service is not available on the given device.
2 SERVICE_NOT_AVAILABLE The service is available on the given device, but it is not available at the time of the call (for example, it is explicitly disabled).
3 SERVICE_CALL_EXECUTION_FAILURE The task execution failed due to threading issues. In this case, it can be retried.
4 SERVICE_CALL_PERMISSION_DENIED The caller is not allowed to make the service call.
5 SERVICE_CALL_INVALID_ARGUMENT The request contains invalid data (for example, more than the allowed number of clusters).
6 SERVICE_CALL_INTERNAL There is an error on the service side.
7 SERVICE_CALL_RESOURCE_EXHAUSTED The service call is made too frequently.

Step 3: Handle broadcast intents

In addition to making publish content API calls through a job, it is also required to set up a BroadcastReceiver to receive the request for a content publish.

The goal of broadcast intents is mainly for app reactivation and forcing data sync. Broadcast intents are not designed to be sent very frequently. It is only triggered when the Engage Service determines the content might be stale (for example, a week old). That way, there is more confidence that the user can have a fresh content experience, even if the application has not been executed for a long period of time.

The BroadcastReceiver must be set up in the following two ways:

  • Dynamically register an instance of the BroadcastReceiver class using Context.registerReceiver() . This enables communication from applications that are still live in memory.

کاتلین

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

}
  • Statically declare an implementation with the <receiver> tag in your AndroidManifest.xml file. This allows the application to receive broadcast intents when it is not running, and also allows the application to publish the content.

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

The following intents is sent by the service:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION It is recommended to start a publishRecommendationClusters call when receiving this intent.
  • com.google.android.engage.action.PUBLISH_FEATURED It is recommended to start a publishFeaturedCluster call when receiving this intent.
  • com.google.android.engage.action.PUBLISH_CONTINUATION It is recommended to start a publishContinuationCluster call when receiving this intent.

Integration workflow

For a step-by-step guide on verifying your integration after it is complete, see Engage developer integration workflow .

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

See Engage SDK Frequently Asked Questions for FAQs.

تماس

Contact engage-developers@google.com if there are any questions during the integration process.

مراحل بعدی

After completing this integration, your next steps are as follows:

  • Send an email to engage-developers@google.com and attach your integrated APK that is ready for testing by Google.
  • Google performs a verification and reviews internally to make sure the integration works as expected. If changes are needed, Google contacts you with any necessary details.
  • When testing is complete and no changes are needed, Google contacts you to notify you that you can start publishing the updated and integrated APK to the Play Store.
  • After Google has confirmed that your updated APK has been published to the Play Store, your Recommendation , Featured , and Continuation clusters may be published and visible to users.