Google درحال ساختن سطحی دروندستگاهی است که برنامههای کاربران را براساس عمودیها سازماندهی میکند و تجربه همهجانبه جدیدی را برای مصرف و کاوش محتوای شخصیسازیشده برنامه فعال میکند. این تجربه تمامصفحه به شرکای توسعهدهنده فرصت میدهد تا بهترین محتوای غنی خود را در کانالی اختصاصی خارج از برنامه خود نمایش دهند.این راهنما حاوی دستورالعملهایی برای شرکای توسعهدهنده است تا محتوای دوستیابی خود را ادغام کنند و بااستفاده از Engage SDK این سطح جدید را پر کنند.
جزئیات یکپارچهسازی
این بخش مراحل، مدلهای داده، و اصطلاحات لازم برای ادغام با Engage SDK برای محتوای دوستیابی را بهتفصیل شرح میدهد.
اصطلاحات
این ادغام شامل سه نوع خوشه زیر است: توصیه، ویژه، و ادامه.
خوشههای توصیه پیشنهادهای شخصیسازیشده دوستیابی را از شریک توسعهدهنده تکی نشان میدهد. این توصیهها را میتوان برای کاربر شخصیسازی کرد.
- خوشه «توصیه» میتواند از
ArticleEntity،PersonEntity، یاEventEntityساخته شود اما نمیتواند ترکیبی از انواع مختلف نهاد باشد.
توصیههای شما ساختار زیر را دارند:
خوشه توصیهها: نمای واسط کاربری که حاوی گروهی از توصیهها از یک شریک توسعهدهنده است.
نهاد: شیئی که نشاندهنده یک مورد در خوشه است. این ادغام برخیاز نهادهایی را ارائه میدهد که بااستفاده از «خوشه توصیهها» ظاهر میشوند:
ArticleEntity: ArticleEntity نشاندهنده توصیهای برای محتوای نوشتاری مرتبط با دوستیابی است. مورد ArticleEntity به توسعهدهندگان امکان میدهد انواع مختلفی از محتوای نوشتاری و تصویری را با فرادادههای بیشتر ارائه دهند تا اطلاعات را بهطور واضح به کاربران منتقل کنند.
شکل ۱: میانای کاربری که یک ArticleEntity را در خوشه «توصیهها» نشان میدهد. PersonEntity: PersonEntity نشاندهنده یک شخص است. توصیهها میتواند برجسته کردن فردی در چشماندازهای قرار باشد.
شکل ۲: میانای کاربری که یک PersonEntity را در خوشه «توصیهها» نشان میدهد. EventEntity: EventEntity نشاندهنده رویدادی است که در آینده اتفاق میافتد. زمان شروع رویداد اطلاعات مهمی است که باید به کاربران منتقل شود.
شکل ۳: میانای کاربر که یک EventEntity را در خوشه «توصیهها» نشان میدهد.
- خوشه «توصیه» میتواند از
خوشه ادامه محتوایی را نشان میدهد که اخیراً کاربران از چندین شریک توسعهدهنده در یک گروهبندی واسط کاربر با آن تعامل داشتهاند. هر شریک توسعهدهنده میتواند حداکثر ۱۰ نهاد را در خوشه «ادامه» همهفرستی کند.
محتوای ادامه شما میتواند ساختار زیر را داشته باشد:
ArticleEntity: ArticleEntity نشاندهنده توصیهای برای محتوای نوشتاری مرتبط با دوستیابی است. از این موجودیت میتوان برای نمایش مقالههای خبری ناتمام یا محتوای دیگری که کاربر میخواهد از جایی که آن را رها کرده است ادامه دهد استفاده کرد.
شکل ۶. واسط کاربری که یک ArticleEntity را در خوشه «ادامه» نشان میدهد. EventReservationEntity: EventReservationEntity نشاندهنده رزرو برای رویداد است و به کاربران کمک میکند رزروهای رویدادهای قرار و ملاقات آتی یا جاری را پیگیری کنند.
شکل ۸. واسط کاربر که یک EventReservationEntity را در خوشه «ادامه» نشان میدهد.
خوشه ویژه نمای واسط کاربری است که قهرمان انتخابشده را
GenericFeaturedEntityاز بسیاری از شرکای توسعهدهنده در یک گروهبندی واسط کاربری نمایش میدهد. یک خوشه «ویژه» وجود دارد که نزدیک بالای واسط کاربر نشان داده میشود و اولویت قرارگیری آن بالاتر از همه خوشههای «توصیه» است. هر شریک توسعهدهنده مجاز است یک نهاد از نوع پشتیبانیشده را در «ویژه» همهفرستی کند، درحالیکه نهادهای زیادی (احتمالاً از انواع مختلف) از چندین توسعهدهنده برنامه در خوشه «ویژه» وجود دارد.GenericFeaturedEntity: GenericFeaturedEntity با مورد «توصیه» تفاوت دارد زیرا مورد «ویژه» باید برای یک محتوای برتر از توسعهدهندگان استفاده شود و باید نشاندهنده مهمترین محتوایی باشد که برای کاربران جالب و مرتبط است.
شکل ۱۲: میانای کاربر که FeaturedCluster را با فهرستی از GenericFeaturedEntity نشان میدهد
پیشکار
حداقل سطح میانای برنامهسازی کاربردی: ۱۹
کتابخانه 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'
}
خلاصه
طراحی براساس پیادهسازی خدمات محدودکننده است.
دادههایی که مشتری میتواند منتشر کند تابع محدودیتهای زیر برای انواع مختلف خوشه است:
| نوع خوشه | محدودیتهای خوشه | حداقل محدودیتهای نهاد در خوشه | حداکثر حد مجاز نهاد در خوشه |
|---|---|---|---|
| خوشه(های) توصیه | حداکثر ۵ | حداقل ۵ | حداکثر ۲۵ (ArticleEntity، PersonEntity، یا
EventEntity) |
| خوشه ادامه | حداکثر ۱ | حداقل ۱ | حداکثر ۱۰ (ArticleEntity، یا
EventReservationEntity) |
| خوشه ویژه | حداکثر ۱ | حداقل ۱ | حداکثر ۱۰ (GenericFeaturedEntity) |
مرحله ۱: ارائه دادههای نهاد
کیت توسعه نرمافزار نهادهای مختلفی را برای نمایش هر نوع مورد تعریف کرده است. از موجودیتهای زیر برای دسته «دوستیابی» پشتیبانی میکنیم:
GenericFeaturedEntityArticleEntityPersonEntityEventEntityEventReservationEntity
جدولهای زیر مشخصههای دردسترس و الزامات هر نوع را نشان میدهد.
GenericFeaturedEntity
| مشخصه | الزام | شرح | قالب |
|---|---|---|---|
| شناسه منبع یکسان کنش | الزامی |
پیوند عمیق به نهاد در برنامه ارائهدهنده. توجه: میتوانید از پیوندهای عمیق برای اِسناد استفاده کنید. به این پرسشگان مراجعه کنید |
Uri |
| تصاویر پوستر | الزامی | وقتی چند تصویر ارائه شده باشد، فقط ۱ تصویر را نشان میدهیم. نسبت ابعادی توصیهشده ۱۶:۹ است توجه: اگر نشان ارائه شده است، مطمئن شوید فضای امن ۲۴ پیکسل مستقل از تراکم در بالا و پایین تصویر وجود داشته باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| عنوان | اختیاری | عنوان نهاد. | نوشتار آزاد اندازه نوشتار توصیهشده: ۵۰ نویسه |
| شرح | اختیاری | یک پاراگراف نوشتار برای توصیف نهاد. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه توصیهشده نوشتار: ۱۸۰ نویسه |
| فهرست زیرنویس | اختیاری | حداکثر ۳ زیرنویس، که هر زیرنویس یک خط نوشتار است. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه نوشتار توصیهشده برای هر زیرنویس: حداکثر ۵۰ نویسه |
| نشانها | اختیاری | هر نشان یا نوشتار آزاد (حداکثر ۱۵ نویسه) یا تصویر کوچک است. پردازش UX ویژه در بالای تصویر/ویدیو، برای مثال بهعنوان همپوشانی نشان روی تصویر
|
|
| نشان - نوشتار | اختیاری | عنوان نشان توجه: برای نشان، نوشتار یا تصویر لازم است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نشان - تصویر | اختیاری | تصویر کوچک پردازش ویژه UX، برای مثال بهعنوان نشان روی ریزعکس تصویر/ویدیو. توجه: برای نشان، نوشتار یا تصویر لازم است |
برای راهنمایی، مشخصات تصویر را ببینید. |
| دستههای محتوا | اختیاری | دسته محتوا را در نهاد شرح دهید. | فهرست انواع شمارشی برای راهنمایی، به بخش «دسته محتوا» مراجعه کنید. |
ArticleEntity
| مشخصه | الزام | شرح | قالب |
|---|---|---|---|
| شناسه منبع یکسان کنش | الزامی |
پیوند عمیق به نهاد در برنامه ارائهدهنده. توجه: میتوانید از پیوندهای عمیق برای اِسناد استفاده کنید. به این پرسشگان مراجعه کنید |
Uri |
| عنوان | الزامی | عنوان نهاد. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۵۰ نویسه |
| تصاویر پوستر | اختیاری | وقتی چند تصویر ارائه شده باشد، فقط ۱ تصویر را نشان میدهیم. نسبت ابعادی توصیهشده ۱۶:۹ است توجه: تصویر بهشدت توصیه میشود. اگر نشان ارائه شده است، مطمئن شوید که فضای ایمن ۲۴ پیکسل مستقل از تراکم در بالا و پایین تصویر وجود داشته باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| منبع - عنوان | اختیاری | نام نویسنده، سازمان، یا گزارشگر | نوشتار آزاد اندازه نوشتار توصیهشده: کمتر از ۲۵ نویسه |
| منبع - تصویر | اختیاری | تصویری از منبع، مثل نویسنده، سازمان، گزارشگر | برای راهنمایی، مشخصات تصویر را ببینید. |
| شرح | اختیاری | یک پاراگراف نوشتار برای توصیف نهاد. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه توصیهشده نوشتار: ۱۸۰ نویسه |
| فهرست زیرنویس | اختیاری | حداکثر ۳ زیرنویس، که هر زیرنویس یک خط نوشتار است. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه نوشتار توصیهشده برای هر زیرنویس: حداکثر ۵۰ نویسه |
| نشانها | اختیاری | هر نشان یا نوشتار آزاد (حداکثر ۱۵ نویسه) یا تصویر کوچک است. پردازش UX ویژه در بالای تصویر/ویدیو، برای مثال بهعنوان همپوشانی نشان روی تصویر
|
|
| نشان - نوشتار | اختیاری | عنوان نشان توجه: برای نشان، نوشتار یا تصویر لازم است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نشان - تصویر | اختیاری | تصویر کوچک پردازش ویژه UX، برای مثال بهعنوان نشان روی ریزعکس تصویر/ویدیو. توجه: برای نشان، نوشتار یا تصویر لازم است |
برای راهنمایی، مشخصات تصویر را ببینید. |
| زمان انتشار محتوا | اختیاری | این مُهر زمان برحسب میلیثانیه است که نشان میدهد محتوا چه زمانی در برنامه منتشر / بهروز شده است. | مُهر زمان تاریخ برحسب میلیثانیه |
| آخرین زمان تعامل | الزامی مشروط | مهر زمان مبدأ برحسب میلیثانیه که کاربر آخرین بار با این نهاد تعامل داشته است. توجه: اگر این نهاد بخشی از خوشه ادامهدار باشد، این فیلد الزامی است. |
مُهر زمان تاریخ برحسب میلیثانیه |
| درصد پیشرفت | الزامی مشروط | درصد کل محتوای مصرفشده توسط کاربر تا امروز. توجه: اگر این نهاد بخشی از خوشه ادامهدار باشد، این فیلد الزامی است. |
مقدار int بین ۰ تا ۱۰۰. |
| دستههای محتوا | اختیاری | دسته محتوا را در نهاد شرح دهید. | فهرست انواع شمارشی برای راهنمایی، به بخش «دسته محتوا» مراجعه کنید. |
PersonEntity
| مشخصه | الزام | شرح | قالب |
|---|---|---|---|
| شناسه منبع یکسان کنش | الزامی |
پیوند عمیق به نهاد در برنامه ارائهدهنده. توجه: میتوانید از پیوندهای عمیق برای اِسناد استفاده کنید. به این پرسشگان مراجعه کنید |
Uri |
| نمایه - نام | الزامی | نام نمایه یا شناسه یا نام کاربری، مثلاً «John Doe»، «@TeamPixel»، و غیره. | رشته اندازه نوشتار توصیهشده: حداکثر ۵۰ نویسه |
| نمایه - چهرک | الزامی |
عکس نمایه یا تصویر چهرک کاربر. توجه:باید تصویر مربعی ۱:۱ باشد. |
برای راهنمایی، مشخصات تصویر را ببینید. |
| پروفایل - نوشتار اضافی | اختیاری | نوشتار آزاد مثل نام کاربری نمایه. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نمایه - تصویر اضافی | اختیاری | تصویر کوچکی مانند نشان درستیسنجیشده. | برای راهنمایی، مشخصات تصویر را ببینید. |
| تصویر عنوان | اختیاری |
نشاندهنده تصویر سرایند است. باید با تصویر نمایه متفاوت باشد. اگر تصویر دیگری وجود داشته باشد که به برجسته کردن فرد کمک کند، مثلاً کار او، میتوان از این ویژگی استفاده کرد. توجه: تصویر باید ۱۶:۹ باشد. اگر نشان ارائه شده است، مطمئن شوید فضای ایمن ۲۴ پیکسل مستقل از تراکم در بالا و پایین تصویر وجود داشته باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| محبوبیت - تعداد | اختیاری |
تعداد دنبالکنندگان یا مقدار محبوبیت را نشان میدهد، برای مثال - «۳٫۷ میلیون». توجه: اگر هم «تعداد» و هم «مقدار تعداد» ارائه شده باشد، از «تعداد» استفاده خواهد شد |
رشته اندازه نوشتار توصیهشده: حداکثر ۲۰ نویسه برای ترکیب تعداد + برچسب |
| محبوبیت - مقدار شمارش | اختیاری | تعداد دنبالکنندگان یا مقدار محبوبیت. توجه: اگر برنامهتان نمیخواهد منطق نحوه بهینهسازی عدد بزرگ برای اندازههای مختلف نمایش را مدیریت کند، Count Value را ارائه دهید. اگر هم «تعداد» و هم «مقدار تعداد» ارائه شده باشد، «تعداد» به کاربران نشان داده میشود. |
بلند |
| محبوبیت - برچسب | اختیاری | مشخص کنید برچسب محبوبیت چیست. برای مثال - «پسندیدنها». | رشته اندازه نوشتار توصیهشده: حداکثر ۲۰ نویسه برای ترکیب تعداد + برچسب |
| محبوبیت - بصری | اختیاری |
مشخص کنید تعامل برای چیست. برای مثال - تصویری که نماد «پسندیدن»، اموجی را نشان میدهد. میتوانید بیشاز ۱ تصویر ارائه دهید، هرچند ممکن است همه آنها در همه ضرایب شکل نشان داده نشوند. توجه: باید تصویر مربعی ۱:۱ باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| ردهبندی - مقدار حداکثر | الزامی | حداکثر مقدار مقیاس ردهبندی. اگر مقدار فعلی ردهبندی نیز ارائه شده باشد، باید ارائه شود. |
عدد >= ۰٫۰ |
| ردهبندی - مقدار فعلی | الزامی | مقدار فعلی مقیاس ردهبندی. اگر حداکثر مقدار ردهبندی نیز ارائه شده باشد، باید ارائه شود. |
عدد >= ۰٫۰ |
| ردهبندی - تعداد | اختیاری | تعداد ردهبندیهای نهاد. توجه: اگر برنامهتان میخواهد نحوه نمایش این مورد به کاربران را کنترل کند، این فیلد را ارائه دهید. رشته مختصری ارائه دهید که بتواند به کاربر نمایش داده شود. برای مثال، اگر تعداد ۱٬۰۰۰٬۰۰۰ است، از کوتهنوشتهایی مثل 1M استفاده کنید تا در اندازههای نمایشگر کوچکتر کوتاه نشود. |
رشته |
| ردهبندی - مقدار شمارش | اختیاری | تعداد ردهبندیهای نهاد. توجه: اگر نمیخواهید منطق اختصار نمایش را خودتان مدیریت کنید، این فیلد را ارائه دهید. اگر هم «تعداد» و هم «مقدار تعداد» وجود داشته باشد، از «تعداد» برای نمایش به کاربران استفاده میکنیم |
بلند |
| مکان - کشور | اختیاری | کشوری که فرد در آنجا قرار دارد یا خدمت میکند. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - شهر | اختیاری | شهری که فرد در آنجا قرار دارد یا خدمت میکند. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - نشانی نمایشی | اختیاری | نشانیای که فرد در آنجا قرار دارد یا خدمت ارائه میدهد به کاربر نشان داده خواهد شد. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| Location - Street Address | اختیاری | نشانی خیابان (درصورت وجود) جایی که فرد در آنجا قرار دارد یا خدمت میکند. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - ایالت | اختیاری | ایالتی (درصورت وجود) که فرد در آنجا قرار دارد یا خدمت میکند. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - کد پستی | اختیاری | کد پستی (درصورت وجود) جایی که فرد در آنجا قرار دارد یا خدمت میکند. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - محله | اختیاری | محلهای (درصورت وجود) که فرد در آنجا قرار دارد یا خدمات ارائه میدهد. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| نشانها | اختیاری |
هر نشان یا نوشتار آزاد (حداکثر ۱۵ نویسه) یا تصویر کوچک است. |
|
| نشان - نوشتار | اختیاری | عنوان نشان توجه: برای نشان، نوشتار یا تصویر لازم است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نشان - تصویر | اختیاری | تصویر کوچک پردازش ویژه UX، برای مثال بهعنوان نشان روی ریزعکس تصویر/ویدیو. توجه: برای نشان، نوشتار یا تصویر لازم است |
برای راهنمایی، مشخصات تصویر را ببینید. |
| شرح | اختیاری | یک پاراگراف نوشتار برای توصیف نهاد. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه توصیهشده نوشتار: ۱۸۰ نویسه |
| فهرست زیرنویس | اختیاری | حداکثر ۳ زیرنویس، که هر زیرنویس یک خط نوشتار است. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه نوشتار توصیهشده برای هر زیرنویس: حداکثر ۵۰ نویسه |
| دستههای محتوا | اختیاری | دسته محتوا را در نهاد شرح دهید. | فهرست انواع شمارشی واجدشرایط
برای راهنمایی، به بخش «دسته محتوا» مراجعه کنید. |
EventEntity
| مشخصه | الزام | شرح | قالب |
|---|---|---|---|
| شناسه منبع یکسان کنش | الزامی |
پیوند عمیق به نهاد در برنامه ارائهدهنده. توجه: میتوانید از پیوندهای عمیق برای اِسناد استفاده کنید. به این پرسشگان مراجعه کنید |
Uri |
| عنوان | الزامی | عنوان نهاد. | رشته اندازه نوشتار توصیهشده: حداکثر ۵۰ نویسه |
| زمان شروع | الزامی |
مُهر زمان مبدأ که انتظار میرود رویداد در آن زمان شروع شود. توجه:این مقدار برحسب میلیثانیه نشان داده میشود. |
مُهر زمان تاریخ برحسب میلیثانیه |
| حالت رویداد | الزامی | فیلدی برای نشان دادن اینکه رویداد مجازی، حضوری، یا هر دو خواهد بود. |
Enum: VIRTUAL، IN_PERSON، یا HYBRID |
| تصاویر پوستر | الزامی | وقتی چند تصویر ارائه شده باشد، فقط ۱ تصویر را نشان میدهیم. نسبت ابعادی توصیهشده ۱۶:۹ است توجه: تصویر بهشدت توصیه میشود. اگر نشان ارائه شده است، مطمئن شوید که فضای ایمن ۲۴ پیکسل مستقل از تراکم در بالا و پایین تصویر وجود داشته باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| مکان - کشور | الزامی مشروط | کشوری که رویداد در آن اتفاق میافتد. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - شهر | الزامی مشروط | شهری که رویداد در آن اتفاق میافتد. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - نشانی نمایشی | الزامی مشروط | نشانی یا نام محل برگزاری رویداد که باید به کاربر نشان داده شود. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| Location - Street Address | اختیاری | نشانی خیابان (درصورت وجود) مکانی که رویداد در آن برگزار میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - ایالت | اختیاری | ایالت یا استان (درصورت وجود) که رویداد در آن میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - کد پستی | اختیاری | کد پستی (درصورت وجود) مکانی که رویداد در آن میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - محله | اختیاری | محلهای (درصورت وجود) که رویداد در آنجا میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| زمان پایان | اختیاری |
مُهر زمان مبدأ که انتظار میرود رویداد در آن زمان پایان یابد. توجه:این مقدار برحسب میلیثانیه نشان داده میشود. |
مُهر زمان تاریخ برحسب میلیثانیه |
| شرح | اختیاری | یک پاراگراف نوشتار برای توصیف نهاد. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه توصیهشده نوشتار: ۱۸۰ نویسه |
| فهرست زیرنویس | اختیاری | حداکثر ۳ زیرنویس، که هر زیرنویس یک خط نوشتار است. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه نوشتار توصیهشده برای هر زیرنویس: حداکثر ۵۰ نویسه |
| نشانها | اختیاری |
هر نشان یا نوشتار آزاد (حداکثر ۱۵ نویسه) یا تصویر کوچک است. |
|
| نشان - نوشتار | اختیاری | عنوان نشان توجه: برای نشان، نوشتار یا تصویر لازم است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نشان - تصویر | اختیاری | تصویر کوچک پردازش ویژه UX، برای مثال بهعنوان نشان روی ریزعکس تصویر/ویدیو. توجه: برای نشان، نوشتار یا تصویر لازم است |
برای راهنمایی، مشخصات تصویر را ببینید. |
| Price - CurrentPrice | الزامی مشروط |
قیمت فعلی بلیت/مجوز رویداد. اگر قیمت خطخورده ارائه شده باشد، باید ارائه شود. |
نوشتار آزاد |
| Price - StrikethroughPrice | اختیاری | قیمت اصلی بلیت/مجوز رویداد. | نوشتار آزاد |
| نوشته راهنمای قیمت | اختیاری | توضیح قیمت برای نمایش تبلیغ، رویداد، تخفیف عضو، درصورت وجود. | نوشتار آزاد اندازه نوشتار توصیهشده: کمتر از ۴۵ نویسه (نوشتاری که خیلی طولانی باشد ممکن است با سهنقطه نشان داده شود) |
| دستههای محتوا | اختیاری | دسته محتوا را در نهاد شرح دهید. | فهرست انواع شمارشی واجدشرایط
برای راهنمایی، به بخش «دسته محتوا» مراجعه کنید. |
EventReservationEntity
| مشخصه | الزام | شرح | قالب |
|---|---|---|---|
| شناسه منبع یکسان کنش | الزامی |
پیوند عمیق به نهاد در برنامه ارائهدهنده. توجه: میتوانید از پیوندهای عمیق برای اِسناد استفاده کنید. به این پرسشگان مراجعه کنید |
Uri |
| عنوان | الزامی | عنوان نهاد. | رشته اندازه نوشتار توصیهشده: حداکثر ۵۰ نویسه |
| زمان شروع | الزامی |
مُهر زمان مبدأ که انتظار میرود رویداد در آن زمان شروع شود. توجه:این مقدار برحسب میلیثانیه نشان داده میشود. |
مُهر زمان تاریخ برحسب میلیثانیه |
| حالت رویداد | الزامی | فیلدی برای نشان دادن اینکه رویداد مجازی، حضوری، یا هر دو خواهد بود. |
Enum: VIRTUAL، IN_PERSON، یا HYBRID |
| مکان - کشور | الزامی مشروط | کشوری که رویداد در آن اتفاق میافتد. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - شهر | الزامی مشروط | شهری که رویداد در آن اتفاق میافتد. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - نشانی نمایشی | الزامی مشروط | نشانی یا نام محل برگزاری رویداد که باید به کاربر نشان داده شود. توجه: این مورد برای رویدادهای IN_PERSON یا HYBRID الزامی است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| Location - Street Address | اختیاری | نشانی خیابان (درصورت وجود) مکانی که رویداد در آن برگزار میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - ایالت | اختیاری | ایالت یا استان (درصورت وجود) که رویداد در آن میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - کد پستی | اختیاری | کد پستی (درصورت وجود) مکانی که رویداد در آن میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| مکان - محله | اختیاری | محلهای (درصورت وجود) که رویداد در آنجا میزبانی میشود. | نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ~۲۰ نویسه |
| تصاویر پوستر | اختیاری | وقتی چند تصویر ارائه شده باشد، فقط ۱ تصویر را نشان میدهیم. نسبت ابعادی توصیهشده ۱۶:۹ است توجه: تصویر بهشدت توصیه میشود. اگر نشان ارائه شده است، مطمئن شوید که فضای ایمن ۲۴ پیکسل مستقل از تراکم در بالا و پایین تصویر وجود داشته باشد |
برای راهنمایی، مشخصات تصویر را ببینید. |
| زمان پایان | اختیاری |
مُهر زمان مبدأ که انتظار میرود رویداد در آن زمان پایان یابد. توجه:این مقدار برحسب میلیثانیه نشان داده میشود. |
مُهر زمان تاریخ برحسب میلیثانیه |
| فراهمساز خدمات - نام | اختیاری |
نام ارائهدهنده خدمات. توجه:برای ارائهدهنده خدمات، نوشتار یا تصویر الزامی است. |
نوشتار آزاد. برای مثال، نام سازماندهنده رویداد/تور |
| فراهمساز خدمات - تصویر | اختیاری |
نشانواره/تصویر ارائهدهنده خدمات. توجه:برای ارائهدهنده خدمات، نوشتار یا تصویر الزامی است. |
برای راهنمایی، مشخصات تصویر را ببینید. |
| شرح | اختیاری | یک پاراگراف نوشتار برای توصیف نهاد. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه توصیهشده نوشتار: ۱۸۰ نویسه |
| فهرست زیرنویس | اختیاری | حداکثر ۳ زیرنویس، که هر زیرنویس یک خط نوشتار است. توجه: یا شرح یا فهرست زیرنویس به کاربر نمایش داده میشود، نه هر دو. |
نوشتار آزاد اندازه نوشتار توصیهشده برای هر زیرنویس: حداکثر ۵۰ نویسه |
| نشانها | اختیاری |
هر نشان یا نوشتار آزاد (حداکثر ۱۵ نویسه) یا تصویر کوچک است. |
|
| نشان - نوشتار | اختیاری | عنوان نشان توجه: برای نشان، نوشتار یا تصویر لازم است |
نوشتار آزاد اندازه نوشتار توصیهشده: حداکثر ۱۵ نویسه |
| نشان - تصویر | اختیاری | تصویر کوچک پردازش ویژه UX، برای مثال بهعنوان نشان روی ریزعکس تصویر/ویدیو. توجه: برای نشان، نوشتار یا تصویر لازم است |
برای راهنمایی، مشخصات تصویر را ببینید. |
| شناسه رزرو | اختیاری | شناسه رزرو برای رزرو رویداد. | نوشتار آزاد |
| Price - CurrentPrice | الزامی مشروط |
قیمت فعلی بلیت/مجوز رویداد. اگر قیمت خطخورده ارائه شده باشد، باید ارائه شود. |
نوشتار آزاد |
| Price - StrikethroughPrice | اختیاری | قیمت اصلی بلیت/مجوز رویداد. | نوشتار آزاد |
| نوشته راهنمای قیمت | اختیاری | توضیح قیمت برای نمایش تبلیغ، رویداد، تخفیف عضو، درصورت وجود. | نوشتار آزاد اندازه نوشتار توصیهشده: کمتر از ۴۵ نویسه (نوشتاری که خیلی طولانی باشد ممکن است با سهنقطه نشان داده شود) |
| ردهبندی - مقدار حداکثر | اختیاری | حداکثر مقدار مقیاس ردهبندی. اگر مقدار فعلی ردهبندی نیز ارائه شده باشد، باید ارائه شود. |
عدد >= ۰٫۰ |
| ردهبندی - مقدار فعلی | اختیاری | مقدار فعلی مقیاس ردهبندی. اگر حداکثر مقدار ردهبندی نیز ارائه شده باشد، باید ارائه شود. |
عدد >= ۰٫۰ |
| ردهبندی - تعداد | اختیاری | تعداد ردهبندیهای رویداد. توجه: اگر برنامهتان میخواهد نحوه نمایش این مورد به کاربران را کنترل کند، این فیلد را ارائه دهید. رشته مختصری ارائه دهید که بتواند به کاربر نمایش داده شود. برای مثال، اگر تعداد ۱٬۰۰۰٬۰۰۰ است، از کوتهنوشتهایی مثل 1M استفاده کنید تا در اندازههای نمایشگر کوچکتر کوتاه نشود. |
رشته |
| ردهبندی - مقدار شمارش | اختیاری | تعداد ردهبندیهای رویداد. توجه: اگر نمیخواهید منطق اختصار نمایش را خودتان مدیریت کنید، این فیلد را ارائه دهید. اگر هم «تعداد» و هم «مقدار تعداد» وجود داشته باشد، از «تعداد» برای نمایش به کاربران استفاده میکنیم |
بلند |
| دستههای محتوا | اختیاری | دسته محتوا را در نهاد شرح دهید. | فهرست انواع شمارشی واجدشرایط
برای راهنمایی، به بخش «دسته محتوا» مراجعه کنید. |
مشخصات تصویر
مشخصات لازم برای داراییهای تصویری در این جدول فهرست شده است:
| نسبت ابعادی | حداقل پیکسل | پیکسلهای توصیهشده |
|---|---|---|
مربع (۱×۱) ترجیحی |
۳۰۰×۳۰۰ | 1200x1200 |
| افقی (۱٫۹۱x۱) | ۶۰۰×۳۱۴ | 1200x628 |
| عمودی (۴×۵) | ۴۸۰×۶۰۰ | 960x1200 |
تصاویر باید در CDNهای عمومی میزبانی شوند تا Google بتواند به آنها دسترسی داشته باشد.
قالبهای فایل
PNG، JPG، GIF ایستا، WebP
حداکثر اندازه فایل
۵۱۲۰ کیلوبایت
توصیههای بیشتر
- ناحیه امن تصویر: محتوای مهم خود را در ۸۰٪ مرکزی تصویر قرار دهید.
- از پسزمینه شفاف استفاده کنید تا تصویر بهدرستی در تنظیمات زمینه «تیره» و «روشن» نمایش داده شود.
دستهبندی محتوا
دسته محتوا به برنامهها اجازه میدهد محتوای متعلق به چندین دسته را منتشر کنند. این کار محتوا را با برخیاز دستههای ازپیش تعریفشده زیر مطابقت میدهد:
TYPE_EDUCATIONTYPE_SPORTSTYPE_MOVIES_AND_TV_SHOWSTYPE_BOOKSTYPE_AUDIOBOOKSTYPE_MUSICTYPE_DIGITAL_GAMESTYPE_TRAVEL_AND_LOCALTYPE_HOME_AND_AUTOTYPE_BUSINESSTYPE_NEWSTYPE_FOOD_AND_DRINKTYPE_SHOPPINGTYPE_HEALTH_AND_FITENESSTYPE_MEDICALTYPE_PARENTINGTYPE_DATING
تصاویر باید در CDNهای عمومی میزبانی شوند تا Google بتواند به آنها دسترسی داشته باشد.
رهنمودهای استفاده از دستههای محتوا
- برخیاز نهادها مانند ArticleEntity و GenericFeaturedEntity واجدشرایط استفاده از هرکدام از دستههای محتوا هستند. برای موجودیتهای دیگر مانند EventEntity، EventReservationEntity، PersonEntity، فقط زیرمجموعهای از این دستهها واجدشرایط هستند. پیشاز پر کردن فهرست، فهرست دستههای واجدشرایط برای نوع نهاد را بررسی کنید.
برای برخیاز دستههای محتوا، بهجای ترکیبی از نهادهای «عمومی» و ContentCategory، از نوع نهاد خاص استفاده کنید:
- TYPE_MOVIES_AND_TV_SHOWS - قبلاز استفاده از نهادهای عمومی، نهادهای راهنمای ادغام تماشا را بررسی کنید.
- TYPE_BOOKS - Check out the EbookEntity before using the generic entities.
- TYPE_AUDIOBOOKS - Check out AudiobookEntity before using the generic entities.
- TYPE_SHOPPING - Check out ShoppingEntity before using the generic entities.
- TYPE_FOOD_AND_DRINK - قبلاز استفاده از نهادهای عمومی، نهادهای موجود در راهنمای ادغام غذا را بررسی کنید.
فیلد ContentCategory اختیاری است و اگر محتوا به هیچیک از دستههای ذکرشده در بالا تعلق ندارد، باید خالی گذاشته شود.
درصورتیکه چند دسته محتوا ارائه شده است، آنها را بهترتیب ارتباط با محتوا ارائه دهید و مرتبطترین دسته محتوا را در ابتدای فهرست قرار دهید.
مرحله ۲: ارائه دادههای «خوشه»
توصیه میشود که کار انتشار محتوا در پسزمینه اجرا شود (برای مثال، بااستفاده از WorkManager) و بهصورت منظم یا براساس رویداد (برای مثال، هربار که کاربر برنامه را باز میکند یا وقتی کاربر چیزی به سبد خریدش اضافه میکند) زمانبندی شود.
AppEngagePublishClient مسئول انتشار خوشهها است.
میاناهای برنامهسازی کاربردی زیر برای انتشار خوشهها در کارخواه وجود دارد:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishContinuationClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteContinuationClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
از این میانای برنامهسازی کاربردی برای بررسی اینکه آیا سرویس برای ادغام دردسترس است یا نه و اینکه آیا محتوا میتواند در دستگاه ارائه شود یا نه استفاده میشود.
برای Engage SDK نسخه ۱.۶.۰ و بالاتر (توصیهشده)
مهارتهای Android
مشاهده در GitHubادغام Engage SDK
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.میتوانید دردسترس بودن سرویس را برای هر نوع خوشهای که قصد انتشار آن را دارید بررسی کنید. 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("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
این میانای برنامهسازی کاربردی برای انتشار فهرستی از اشیای FeaturedCluster استفاده میشود.
کاتلین
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
جاوا
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build());
وقتی سرویس درخواست را دریافت میکند، کنشهای زیر در یک تراکنش انجام میشود:
- دادههای
FeaturedClusterموجود از شریک توسعهدهنده برداشته میشود. - دادههای درخواست تجزیه میشود و در «خوشه ویژه» بهروزشده ذخیره میشود.
درصورت بروز خطا، کل درخواست رد میشود و وضعیت موجود حفظ میشود.
publishContinuationCluster
این میانای برنامهسازی کاربردی برای انتشار شیء 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 برای انتشار کارت «ورود به سیستم» استفاده میشود . کنش ورود به سیستم کاربران را به صفحه ورود به سیستم برنامه هدایت میکند تا برنامه بتواند محتوا منتشر کند (یا محتوای شخصیسازیشدهتری ارائه دهد)
فراداده زیر بخشی از کارت ورود به سیستم است -
| مشخصه | الزام | شرح |
|---|---|---|
| شناسه منبع یکسان کنش | الزامی | پیوند عمیق به کنش (یعنی پیمایش به صفحه ورود به سیستم برنامه) |
| تصویر | اختیاری - اگر ارائه نشود، عنوان باید ارائه شود |
تصویر نشاندادهشده در کارت تصاویر با نسبت ابعادی ۱۶×۹ و وضوح ۱۲۶۴×۷۱۲ |
| عنوان | اختیاری - اگر ارائه نشود، تصویر باید ارائه شود | عنوان روی کارت |
| متن کنش | اختیاری | نوشتار نشاندادهشده در «دعوت به اقدام» (یعنی ورود به سیستم) |
| زیرنویس | اختیاری | زیرنویس اختیاری روی کارت |
کاتلین
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 توصیه میکند «کارت ورود به سیستم» را منتشر کنید. اگر ارائهدهندگان به هر دلیلی نتوانند «کارت ورود به سیستم» را منتشر کنند، توصیه میکنیم میانای برنامهسازی کاربردی 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());
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_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());
وقتی سرویس درخواست را دریافت میکند، دادههای موجود را از همه خوشههایی که با نوع خوشه مشخصشده مطابقت دارند برمیدارد. مشتریان میتوانند یک یا چند نوع خوشه را برای ارسال انتخاب کنند. درصورت بروز خطا، کل درخواست رد میشود و وضعیت موجود حفظ میشود.
مدیریت کردن خطا
توصیه میشود به نتیجه تکلیف از میاناهای برنامهسازی کاربردی انتشار گوش دهید تا بتوانید کنش پیگیری را برای بازیابی و ارسال مجدد تکلیف موفق انجام دهید.
کاتلین
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
}
}
}
});
خطا بهصورت AppEngageException برگردانده میشود و علت آن بهصورت کد خطا درج میشود.
| کد خطا | توجه |
|---|---|
SERVICE_NOT_FOUND |
این سرویس در دستگاه ارائهشده دردسترس نیست. |
SERVICE_NOT_AVAILABLE |
این سرویس در دستگاه ارائهشده دردسترس است، اما در زمان تماس دردسترس نیست (برای مثال، صریحاً غیرفعال شده است). |
SERVICE_CALL_EXECUTION_FAILURE |
اجرای تکلیف بهدلیل مشکلات رشتهای ناموفق بود. در این مورد، میتوان دوباره امتحان کرد. |
SERVICE_CALL_PERMISSION_DENIED |
تماسگیرنده مجاز به برقراری تماس سرویس نیست. |
SERVICE_CALL_INVALID_ARGUMENT |
درخواست حاوی دادههای نامعتبر است (برای مثال، بیشتر از تعداد مجاز خوشهها). |
SERVICE_CALL_INTERNAL |
خطایی در سمت سرویس وجود دارد. |
SERVICE_CALL_RESOURCE_EXHAUSTED |
فراخوانی سرویس بیشازحد انجام میشود. |
مرحله ۳: مدیریت هدفهای همهفرستی
علاوهبر برقراری تماسهای میانای برنامهسازی کاربردی محتوای انتشار ازطریق کار،
لازم است
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_CONTINUATIONتوصیه میشود هنگام دریافت این هدف، تماسpublishContinuationClusterرا شروع کنید.
گردش کار یکپارچهسازی
برای راهنمای گامبهگام درباره درستیسنجی یکپارچهسازی پساز تکمیل، به گردش کار یکپارچهسازی توسعهدهنده Engage مراجعه کنید.
پرسشگان
برای پرسشگان، به پرسشگان Engage SDK مراجعه کنید.
تماس
اگر درطول فرایند ادغام سؤالی داشتید، با
engage-developers@google.com تماس بگیرید.
مراحل بعدی
پساز تکمیل این ادغام، مراحل بعدی شما به شرح زیر است:
- ایمیلی به
engage-developers@google.comارسال کنید و فایل APK یکپارچهشدهتان را که برای آزمایش توسط Google آماده است پیوست کنید. - Google درستیسنجی و بازبینی را بهصورت داخلی انجام میدهد تا مطمئن شود ادغام طبق انتظار کار میکند. اگر تغییری لازم باشد، Google با جزئیات لازم با شما تماس میگیرد.
- وقتی آزمایش تکمیل شد و نیازی به تغییر نبود، Google با شما تماس میگیرد تا به شما اطلاع دهد که میتوانید انتشار APK بهروزشده و ادغامشده را در «فروشگاه Play» شروع کنید.
- پساز اینکه Google تأیید کرد APK بهروزشده شما در «فروشگاه Play» منتشر شده است، خوشههای توصیه، ویژه، و ادامه شما ممکن است منتشر شوند و برای کاربران قابلمشاهده باشند.