Google در حال ساخت یک سطح روی دستگاه است که برنامه های کاربران را بر اساس عمودی سازماندهی می کند و یک تجربه همهجانبه جدید را برای مصرف شخصی و کشف محتوای برنامه امکان پذیر می کند. این تجربه تمام صفحه به شرکای توسعهدهنده فرصتی میدهد تا بهترین محتوای غنی خود را در یک کانال اختصاصی خارج از برنامه خود به نمایش بگذارند.
این راهنما حاوی دستورالعملهایی برای شرکای برنامهنویس است تا محتوای ویدیویی خود را با استفاده از Engage SDK برای پر کردن این سطح جدید و سطوح موجود Google یکپارچه کنند.
جزئیات یکپارچه سازی
اصطلاحات
این ادغام شامل سه نوع خوشه زیر است: توصیه ، ادامه ، و ویژه .
گروههای توصیه ، پیشنهادهای شخصیشده برای تماشای محتوا را از یک شریک توسعهدهنده منفرد نشان میدهند.
توصیه های شما ساختار زیر را دارد:
Recommendation Cluster: نمای رابط کاربری که شامل گروهی از توصیههای یک شریک توسعهدهنده است.
Entity: یک شی که یک آیتم را در یک خوشه نشان می دهد. یک موجودیت می تواند یک فیلم، یک نمایش تلویزیونی، یک سریال تلویزیونی، ویدیوی زنده و موارد دیگر باشد. برای لیستی از انواع موجودیت پشتیبانی شده، به بخش ارائه داده های موجودیت مراجعه کنید.
خوشه Continuation ویدیوهای ناتمام و اپیزودهای جدید منتشر شده مرتبط از چندین شریک توسعه دهنده را در یک گروه UI نشان می دهد. هر شریک توسعه دهنده مجاز است حداکثر 10 موجودیت را در خوشه Continuation پخش کند. تحقیقات نشان داده است که توصیه های شخصی سازی شده همراه با محتوای شخصی سازی شده Continuation بهترین تعامل کاربر را ایجاد می کند.
خوشه ویژه مجموعهای از موجودیتها را از چندین شریک توسعهدهنده در یک گروهبندی UI به نمایش میگذارد. یک خوشه ویژه وجود خواهد داشت که در نزدیکی بالای رابط کاربری با اولویت بالاتر از همه خوشههای توصیه ظاهر میشود. هر شریک توسعه دهنده مجاز به پخش حداکثر 10 موجودیت در خوشه ویژه خواهد بود.
قبل از کار
حداقل سطح API: 19
کتابخانه com.google.android.engage:engage-core
را به برنامه خود اضافه کنید:
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.5.2'
}
برای اطلاعات بیشتر، مشاهده بسته در Android 11 را ببینید.
خلاصه
طراحی بر اساس اجرای یک سرویس محدود است.
دادههایی که مشتری میتواند منتشر کند مشمول محدودیتهای زیر برای انواع مختلف خوشه است:
نوع خوشه | محدودیت های خوشه ای | حداکثر محدودیت موجودیت در یک خوشه |
---|---|---|
خوشه(های) توصیه | حداکثر 5 | حداکثر 50 |
خوشه ادامه | حداکثر 1 | حداکثر 10 |
خوشه ویژه | حداکثر 1 | حداکثر 10 |
مرحله 0: انتقال از ادغام Media Home SDK موجود
نقشه مدل های داده از یکپارچه سازی موجود
اگر از یک ادغام Media Home موجود مهاجرت میکنید، جدول زیر نحوه نگاشت مدلهای داده در SDKهای موجود را به Engage SDK جدید نشان میدهد:
معادل ادغام MediaHomeVideoContract | معادل ادغام SDK را درگیر کنید |
---|---|
com.google.android.mediahome.video.PreviewChannel | com.google.android.engage.common.datamodel.RecommendationCluster |
com.google.android.mediahome.video.PreviewChannel.Builder | com.google.android.engage.common.datamodel.RecommendationCluster.Builder |
com.google.android.mediahome.video.PreviewChannelHelper | com.google.android.engage.video.service.AppEngageVideoClient |
com.google.android.mediahome.video.PreviewProgram | به کلاس های جداگانه تقسیم می شود: EventVideo ، LiveStreamingVideo ، Movie ، TvEpisode ، TvSeason ، TvShow ، VideoClipEntity |
com.google.android.mediahome.video.PreviewProgram.Builder | به سازنده ها در کلاس های جداگانه تقسیم می شود: EventVideo ، LiveStreamingVideo ، Movie ، TvEpisode ، TvSeason ، TvShow ، VideoClipEntity |
com.google.android.mediahome.video.VideoContract | دیگر نیازی نیست. |
com.google.android.mediahome.video.WatchNextProgram | به ویژگیها در کلاسهای جداگانه تقسیم میشود: EventVideoEntity ، LiveStreamingVideoEntity ، MovieEntity ، TvEpisodeEntity ، TvSeasonEntity ، TvShowEntity ، VideoClipEntity |
com.google.android.mediahome.video.WatchNextProgram.Builder | به ویژگیها در کلاسهای جداگانه تقسیم میشود: EventVideoEntity ، LiveStreamingVideoEntity ، MovieEntity ، TvEpisodeEntity ، TvSeasonEntity ، TvShowEntity ، VideoClipEntity |
انتشار خوشهها در Media Home SDK در مقابل Engage SDK
با Media Home SDK، خوشهها و موجودیتها از طریق APIهای جداگانه منتشر شدند:
// 1. Fetch existing channels
List<PreviewChannel> channels = PreviewChannelHelper.getAllChannels();
// 2. If there are no channels, publish new channels
long channelId = PreviewChannelHelper.publishChannel(builder.build());
// 3. If there are existing channels, decide whether to update channel contents
PreviewChannelHelper.updatePreviewChannel(channelId, builder.build());
// 4. Delete all programs in the channel
PreviewChannelHelper.deleteAllPreviewProgramsByChannelId(channelId);
// 5. publish new programs in the channel
PreviewChannelHelper.publishPreviewProgram(builder.build());
با Engage SDK، انتشار خوشه و موجودیت در یک تماس API واحد ترکیب میشوند. همه موجودیت هایی که به یک خوشه تعلق دارند همراه با آن خوشه منتشر می شوند:
کاتلین
RecommendationCluster.Builder() .addEntity(MOVIE_ENTITY) .addEntity(MOVIE_ENTITY) .addEntity(MOVIE_ENTITY) .setTitle("Top Picks For You") .build()
جاوا
new RecommendationCluster.Builder() .addEntity(MOVIE_ENTITY) .addEntity(MOVIE_ENTITY) .addEntity(MOVIE_ENTITY) .setTitle("Top Picks For You") .build();
مرحله 1: داده های موجودیت را ارائه دهید
SDK موجودیت های مختلفی را برای نشان دادن هر نوع مورد تعریف کرده است. ما از موجودیت های زیر برای دسته Watch پشتیبانی می کنیم:
نمودار زیر ویژگی ها و الزامات هر نوع را نشان می دهد.
MovieEntity
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
پخش uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش فیلم. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
صفحه اطلاعات uri | اختیاری | پیوند عمیق به برنامه ارائه دهنده برای نمایش جزئیات فیلم. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
تاریخ انتشار | مورد نیاز | در میلی ثانیه های دوره ای. |
در دسترس بودن | مورد نیاز | AVAILABLE: محتوا بدون هیچ اقدام دیگری در دسترس کاربر است. FREE_WITH_SUBSCRIPTION: محتوا پس از خرید اشتراک توسط کاربر در دسترس است. PAID_CONTENT: محتوا نیاز به خرید یا اجاره کاربر دارد. خریداری شده: محتوا توسط کاربر خریداری یا اجاره شده است. |
قیمت پیشنهادی | اختیاری | متن رایگان |
مدت زمان | مورد نیاز | در میلی ثانیه |
ژانر | مورد نیاز | متن رایگان |
رتبه بندی محتوا | مورد نیاز | متن رایگان، از استاندارد صنعت پیروی کنید. ( مثال ) |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
TvShowEntity
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
صفحه اطلاعات uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای نمایش جزئیات نمایش تلویزیونی. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
پخش uri | اختیاری | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش برنامه تلویزیونی. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
تاریخ پخش قسمت اول | مورد نیاز | در میلی ثانیه های دوره ای. |
تاریخ پخش آخرین قسمت | اختیاری | در میلی ثانیه های دوره ای. |
در دسترس بودن | مورد نیاز | AVAILABLE: محتوا بدون هیچ اقدام دیگری در دسترس کاربر است. FREE_WITH_SUBSCRIPTION: محتوا پس از خرید اشتراک توسط کاربر در دسترس است. PAID_CONTENT: محتوا نیاز به خرید یا اجاره کاربر دارد. خریداری شده: محتوا توسط کاربر خریداری یا اجاره شده است. |
قیمت پیشنهادی | اختیاری | متن رایگان |
شمارش فصل | مورد نیاز | عدد صحیح مثبت |
ژانر | مورد نیاز | متن رایگان |
رتبه بندی محتوا | مورد نیاز | متن رایگان، از استاندارد صنعت پیروی کنید. ( مثال ) |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
TvSeasonEntity
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
صفحه اطلاعات uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای نمایش جزئیات فصل نمایش تلویزیونی. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
پخش uri | اختیاری | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش فصل نمایش تلویزیونی. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
نمایش شماره فصل | اختیاری موجود در نسخه 1.3.1 | رشته |
تاریخ پخش قسمت اول | مورد نیاز | در میلی ثانیه های دوره ای. |
تاریخ پخش آخرین قسمت | اختیاری | در میلی ثانیه های دوره ای. |
در دسترس بودن | مورد نیاز | AVAILABLE: محتوا بدون هیچ اقدام دیگری در دسترس کاربر است. FREE_WITH_SUBSCRIPTION: محتوا پس از خرید اشتراک توسط کاربر در دسترس است. PAID_CONTENT: محتوا نیاز به خرید یا اجاره کاربر دارد. خریداری شده: محتوا توسط کاربر خریداری یا اجاره شده است. |
قیمت پیشنهادی | اختیاری | متن رایگان |
تعداد قسمت ها | مورد نیاز | عدد صحیح مثبت |
ژانر | مورد نیاز | متن رایگان |
رتبه بندی محتوا | مورد نیاز | متن رایگان، از استاندارد صنعت پیروی کنید. ( مثال ) |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
TvEpisodeEntity
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
پخش uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش قسمت. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
صفحه اطلاعات uri | اختیاری | پیوند عمیق به برنامه ارائه دهنده برای نمایش جزئیات مربوط به قسمت نمایش تلویزیونی. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
نمایش شماره قسمت | اختیاری موجود در نسخه 1.3.1 | رشته |
تاریخ هوا | مورد نیاز | در میلی ثانیه های دوره ای. |
در دسترس بودن | مورد نیاز | AVAILABLE: محتوا بدون هیچ اقدام دیگری در دسترس کاربر است. FREE_WITH_SUBSCRIPTION: محتوا پس از خرید اشتراک توسط کاربر در دسترس است. PAID_CONTENT: محتوا نیاز به خرید یا اجاره کاربر دارد. خریداری شده: محتوا توسط کاربر خریداری یا اجاره شده است. |
قیمت پیشنهادی | اختیاری | متن رایگان |
مدت زمان | مورد نیاز | باید یک مقدار مثبت در میلی ثانیه باشد. |
ژانر | مورد نیاز | متن رایگان |
رتبه بندی محتوا | مورد نیاز | متن رایگان، از استاندارد صنعت پیروی کنید. ( مثال ) |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
LiveStreamingVideoEntity
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
پخش uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش ویدیو. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
پخش کننده | مورد نیاز | متن رایگان |
زمان شروع | اختیاری | در میلی ثانیه های دوره ای. |
زمان پایان | اختیاری | در میلی ثانیه های دوره ای. |
تعداد مشاهده | اختیاری | متن آزاد، باید بومی سازی شود. |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
VideoClipEntity
شی VideoClipEntity
یک موجودیت ویدیویی را نشان می دهد که از رسانه های اجتماعی مانند TikTok یا YouTube می آید.
صفت | مورد نیاز | یادداشت ها |
---|---|---|
نام | مورد نیاز | |
تصاویر پوستر | مورد نیاز | حداقل یک تصویر مورد نیاز است و باید با نسبت تصویر ارائه شود. (منظره ترجیح داده می شود، اما ارسال تصاویر پرتره و منظره برای سناریوهای مختلف توصیه می شود.) برای راهنمایی به مشخصات تصویر مراجعه کنید. |
پخش uri | مورد نیاز | پیوند عمیق به برنامه ارائه دهنده برای شروع پخش ویدیو. توجه: می توانید از پیوندهای عمیق برای ذکر منبع استفاده کنید. به این سؤالات متداول مراجعه کنید |
زمان ایجاد کرد | مورد نیاز | در میلی ثانیه های دوره ای. |
مدت زمان | مورد نیاز | باید یک مقدار مثبت در میلی ثانیه باشد. |
خالق | مورد نیاز | متن رایگان |
تصویر خالق | اختیاری | تصویر آواتار خالق |
تعداد مشاهده | اختیاری | متن آزاد، باید بومی سازی شود. |
نوع بعدی را تماشا کنید | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود و باید یکی از چهار نوع زیر باشد: ادامه: کاربر قبلاً بیش از 1 دقیقه از این محتوا را تماشا کرده است. NEW: کاربر تمام قسمت های موجود را از برخی محتوای اپیزودیک تماشا کرده است، اما یک قسمت جدید در دسترس است و دقیقاً یک قسمت تماشا نشده وجود دارد. این برای نمایش های تلویزیونی، مسابقات فوتبال ضبط شده در یک سریال و غیره کار می کند. بعدی: کاربر یک یا چند قسمت کامل از برخی از محتوای اپیزودیک را تماشا کرده است، اما یا بیش از یک قسمت باقی مانده است یا دقیقاً یک قسمت باقی مانده است که آخرین قسمت "جدید" نیست و قبل از اینکه کاربر شروع به تماشای محتوای اپیزودیک کند منتشر شده است. . WATCHLIST: کاربر به صراحت انتخاب کرده است که یک فیلم، رویداد یا سریال را به فهرست تماشا اضافه کند تا به صورت دستی آنچه را که میخواهد تماشا کند، انتخاب کند. |
آخرین زمان نامزدی | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation قرار دارد باید ارائه شود. در میلی ثانیه های دوره ای. |
زمان آخرین موقعیت پخش | مشروط مورد نیاز است | زمانی که مورد در خوشه Continuation است و WatchNextType CONTINUE است، باید ارائه شود. در میلی ثانیه های دوره ای. |
مشخصات تصویر
بخش زیر مشخصات مورد نیاز برای دارایی های تصویر را فهرست می کند:
فرمت های فایل
PNG، JPG، GIF استاتیک، WebP
حداکثر اندازه فایل
5120 کیلوبایت
توصیه های اضافی
- ناحیه امن تصویر: محتوای مهم خود را 80 درصد در مرکز تصویر قرار دهید.
مثال
کاتلین
var movie = MovieEntity.Builder() .setName("Avengers") .addPosterImage(Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) .setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE) .setDurationMillis(12345678L) .addGenre("action") .addContentRating("R") .setWatchNextType(WatchNextType.TYPE_NEW) .setLastEngagementTimeMillis(1664568895L) .build()
جاوا
MovieEntity movie = new MovieEntity.Builder() .setName("Avengers") .addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(960) .setImageWidthInPixel(408) .build()) .setPlayBackUri(Uri.parse("http://tv.com/playback/1")) .setReleaseDateEpochMillis(1633032895L) .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE) .setDurationMillis(12345678L) .addGenre("action") .addContentRating("R") .setWatchNextType(WatchNextType.TYPE_NEW) .setLastEngagementTimeMillis(1664568895L) .build();
مرحله 2: داده های Cluster را ارائه دهید
توصیه میشود کار انتشار محتوا در پسزمینه اجرا شود (مثلاً با استفاده از 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
موجود از شریک توسعه حذف شده است. - داده های درخواست تجزیه و تحلیل می شود و در خوشه ویژه به روز شده ذخیره می شود.
در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
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
از شریک توسعه دهنده حذف شده است. - دادههای درخواست تجزیه و تحلیل میشوند و در Continuation Cluster بهروز شده ذخیره میشوند.
در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
publishUserAccountManagementRequest
این API برای انتشار کارت ورود به سیستم استفاده می شود. عمل ورود به سیستم، کاربران را به صفحه ورود به برنامه هدایت میکند تا برنامه بتواند محتوا را منتشر کند (یا محتوای شخصیسازیشدهتری ارائه کند)
فراداده زیر بخشی از کارت ورود به سیستم است -
صفت | مورد نیاز | توضیحات |
---|---|---|
اکشن اوری | مورد نیاز | پیوند عمیق به Action (یعنی به صفحه ورود به برنامه پیمایش میکند) |
تصویر | اختیاری - در صورت عدم ارائه، عنوان باید ارائه شود | تصویر روی کارت نشان داده شده است تصاویر با نسبت ابعاد 16x9 با وضوح 1264x712 |
عنوان | اختیاری - اگر ارائه نشد، تصویر باید ارائه شود | عنوان روی کارت |
متن اقدام | اختیاری | متن نمایش داده شده در CTA (یعنی ورود به سیستم) |
زیرنویس | اختیاری | زیرنویس اختیاری روی کارت |
کاتلین
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 API بهروزرسانی کنید. این مهم است زیرا:
- ارائه وضعیت در همه سناریوها، حتی زمانی که محتوا منتشر می شود (وضعیت == منتشر شده)، برای پر کردن داشبوردهایی که از این وضعیت صریح برای انتقال سلامت و سایر معیارهای ادغام شما استفاده می کنند، بسیار مهم است.
- اگر محتوایی منتشر نشود اما وضعیت ادغام خراب نباشد (STATUS == NOT_PUBLISHED)، Google میتواند از ایجاد هشدار در داشبوردهای سلامت برنامه جلوگیری کند. تأیید می کند که محتوا به دلیل یک وضعیت مورد انتظار از دیدگاه ارائه دهنده منتشر نمی شود.
- این به توسعهدهندگان کمک میکند تا بینشهایی درباره زمانی که دادهها منتشر میشوند در مقابل عدم انتشار اطلاعات ارائه کنند.
- ممکن است Google از کدهای وضعیت استفاده کند تا کاربر را وادار کند تا اقدامات خاصی را در برنامه انجام دهد تا بتواند محتوای برنامه را ببیند یا بر آن غلبه کند.
لیست کدهای وضعیت انتشار واجد شرایط عبارتند از:
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
اگر محتوا به دلیل وارد نشدن کاربر منتشر نشود، Google انتشار کارت ورود به سیستم را توصیه می کند. اگر به هر دلیلی ارائه دهندگان قادر به انتشار کارت ورود به سیستم نیستند، توصیه می کنیم با کد وضعیت NOT_PUBLISHED_REQUIRES_SIGN_IN با updatePublishStatus API تماس بگیرید.
کاتلین
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();
هنگامی که سرویس درخواست را دریافت می کند، داده های موجود را از خوشه ویژه حذف می کند. در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
deleteContinuationCluster
این API برای حذف محتوای Continuation Cluster استفاده می شود.
کاتلین
client.deleteContinuationCluster()
جاوا
client.deleteContinuationCluster();
هنگامی که سرویس درخواست را دریافت می کند، داده های موجود را از Continuation Cluster حذف می کند. در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
deleteUserManagementCluster
این API برای حذف محتوای UserAccountManagement Cluster استفاده می شود.
کاتلین
client.deleteUserManagementCluster()
جاوا
client.deleteUserManagementCluster();
هنگامی که سرویس درخواست را دریافت می کند، داده های موجود را از UserAccountManagement Cluster حذف می کند. در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
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());
هنگامی که سرویس درخواست را دریافت می کند، داده های موجود را از همه خوشه های مطابق با انواع خوشه های مشخص شده حذف می کند. مشتریان می توانند انتخاب کنند که یک یا چند نوع خوشه را پاس کنند. در صورت بروز خطا، کل درخواست رد می شود و وضعیت موجود حفظ می شود.
رسیدگی به خطا
به شدت توصیه می شود که به نتیجه کار از API های منتشر شده گوش دهید تا بتوان یک اقدام بعدی را برای بازیابی و ارسال مجدد یک کار موفق انجام داد.
کاتلین
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
با علت به عنوان کد خطا برگردانده می شود.
کد خطا | نام خطا | توجه داشته باشید |
---|---|---|
1 | SERVICE_NOT_FOUND | این سرویس در دستگاه داده شده در دسترس نیست. |
2 | SERVICE_NOT_AVAILABLE | این سرویس در دستگاه داده شده در دسترس است، اما در زمان تماس در دسترس نیست (مثلاً صراحتاً غیرفعال است). |
3 | SERVICE_CALL_EXECUTION_FAILURE | اجرای کار به دلیل مشکلات رشته ای انجام نشد. در این صورت می توان آن را دوباره امتحان کرد. |
4 | SERVICE_CALL_PERMISSION_DENIED | تماس گیرنده مجاز به برقراری تماس سرویس نیست. |
5 | SERVICE_CALL_INVALID_ARGUMENT | درخواست حاوی داده های نامعتبر است (به عنوان مثال، بیش از تعداد مجاز خوشه ها). |
6 | SERVICE_CALL_INTERNAL | خطایی در سمت سرویس وجود دارد. |
7 | SERVICE_CALL_RESOURCE_EXHAUSTED | تماس سرویس خیلی مکرر برقرار می شود. |
مرحله 3: اهداف پخش را مدیریت کنید
علاوه بر برقراری تماسهای API محتوای انتشار از طریق یک کار، برای دریافت درخواست انتشار محتوا نیز باید یک BroadcastReceiver
راهاندازی کرد.
هدف از اهداف پخش عمدتاً فعال سازی مجدد برنامه و همگام سازی اجباری داده ها است. اهداف پخش برای ارسال خیلی مکرر طراحی نشده اند. تنها زمانی فعال میشود که سرویس Engage تشخیص دهد که ممکن است محتوا قدیمی باشد (مثلاً یک هفتهای است). به این ترتیب، اطمینان بیشتری وجود دارد که کاربر می تواند یک تجربه محتوای تازه داشته باشد، حتی اگر برنامه برای مدت طولانی اجرا نشده باشد.
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)) // Register Featured Cluster Publish Intent context.registerReceiver(AppEngageBroadcastReceiver(), IntentFilter(Intents.ACTION_PUBLISH_FEATURED)) // Register Continuation Cluster Publish Intent context.registerReceiver(AppEngageBroadcastReceiver(), IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION)) }
جاوا
class AppEngageBroadcastReceiver extends BroadcastReceiver { // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast // is received // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is // received } public static void registerBroadcastReceivers(Context context) { context = context.getApplicationContext(); // Register Recommendation Cluster Publish Intent context.registerReceiver(new AppEngageBroadcastReceiver(), new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION)); // Register Featured Cluster Publish Intent context.registerReceiver(new AppEngageBroadcastReceiver(), new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED)); // Register Continuation Cluster Publish Intent context.registerReceiver(new AppEngageBroadcastReceiver(), new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION)); }
- به صورت ایستا یک پیاده سازی را با تگ
<receiver>
در فایلAndroidManifest.xml
خود اعلام کنید. این اجازه می دهد تا برنامه زمانی که در حال اجرا نیست، اهداف پخش را دریافت کند و همچنین به برنامه اجازه می دهد محتوا را منتشر کند.
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
اهداف زیر توسط سرویس ارسال می شود:
-
com.google.android.engage.action.PUBLISH_RECOMMENDATION
توصیه می شود هنگام دریافت این هدف، یک تماسpublishRecommendationClusters
شروع کنید. -
com.google.android.engage.action.PUBLISH_FEATURED
توصیه می شود هنگام دریافت این هدف، یک تماسpublishFeaturedCluster
شروع کنید. -
com.google.android.engage.action.PUBLISH_CONTINUATION
توصیه می شود هنگام دریافت این هدف، یک تماسpublishContinuationCluster
شروع کنید.
گردش کار یکپارچه سازی
برای راهنمایی گام به گام در مورد تأیید ادغام خود پس از تکمیل، به گردش کار ادغام برنامهنویس Engage مراجعه کنید.
سوالات متداول
برای پرسشهای متداول به پرسشهای متداول SDK مراجعه کنید.
تماس بگیرید
در صورت وجود هرگونه سوال در طول فرآیند ادغام، با engage-developers@google.com تماس بگیرید.
مراحل بعدی
پس از تکمیل این ادغام، مراحل بعدی شما به شرح زیر است:
- یک ایمیل به engage-developers@google.com ارسال کنید و APK یکپارچه خود را که برای آزمایش توسط Google آماده است، پیوست کنید.
- Google یک راستیآزمایی را انجام میدهد و به صورت داخلی بررسی میکند تا مطمئن شود ادغام مطابق انتظار عمل میکند. در صورت نیاز به تغییرات، Google با هر گونه جزئیات لازم با شما تماس می گیرد.
- وقتی آزمایش کامل شد و نیازی به تغییر نیست، Google با شما تماس می گیرد تا به شما اطلاع دهد که می توانید شروع به انتشار APK به روز شده و یکپارچه در فروشگاه Play کنید.
- پس از اینکه Google تأیید کرد که APK بهروزرسانی شده شما در فروشگاه Play منتشر شده است، ممکن است خوشههای توصیه ، ویژه و ادامه شما برای کاربران منتشر و قابل مشاهده باشند.