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

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

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

جزئیات ادغام

اصطلاحات

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

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

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

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

    • ShoppingEntity: یک شیء که نشان‌دهنده یک آیتم واحد در یک خوشه است.

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

  • خوشه سبد خرید، نگاهی اجمالی به سبدهای خرید بسیاری از شرکای توسعه‌دهنده در یک گروه‌بندی رابط کاربری نشان می‌دهد و کاربران را به تکمیل سبدهای خرید معوقه‌شان ترغیب می‌کند. یک خوشه سبد خرید واحد وجود دارد که در نزدیکی بالای رابط کاربری ظاهر می‌شود و دارای اولویت قرار گرفتن بالاتر از همه خوشه‌های توصیه است. هر شریک توسعه‌دهنده مجاز است تا حداکثر ۳ نمونه ShoppingCart در خوشه سبد خرید منتشر کند.

    سبد خرید شما ساختار زیر را دارد:

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

    • ShoppingCart: یک شیء که پیش‌نمایش سبد خرید را برای یک شریک توسعه‌دهنده‌ی واحد نشان می‌دهد و در خوشه‌ی Shopping Cart نمایش داده می‌شود. ShoppingCart باید تعداد کل اقلام موجود در سبد خرید را نشان دهد و همچنین می‌تواند شامل تصاویری برای برخی از اقلام موجود در سبد خرید کاربر باشد.

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

  • خوشه Reorder نگاهی اجمالی به سفارش‌های قبلی چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری نشان می‌دهد و کاربران را به سفارش مجدد ترغیب می‌کند. یک خوشه Reorder واحد وجود دارد.

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

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

    یک خوشه ShoppingOrderTracking واحد وجود دارد که در نزدیکی بالای رابط کاربری ظاهر می‌شود و اولویت آن بالاتر از همه خوشه‌های توصیه (Recommendation) است. هر شریک توسعه‌دهنده مجاز است چندین مورد ShoppingOrderTrackingEntity را در خوشه Shopping Order Tracking پخش کند.

    • کلاستر ShoppingOrderTrackingCluster شما ساختار زیر را می‌گیرد:

      • خوشه ردیابی سفارش خرید : یک نمای رابط کاربری که شامل گروهی از پیش‌نمایش‌های ردیابی سفارش از بسیاری از شرکای توسعه‌دهنده است.
      • ShoppingOrderTrackingEntity : یک شیء که پیش‌نمایش ردیابی سفارش خرید را برای یک شریک توسعه‌دهنده واحد نشان می‌دهد و در خوشه Shopping Order Tracking نمایش داده می‌شود. ShoppingOrderTrackingEntity باید وضعیت سفارش و زمان سفارش را نشان دهد. اکیداً توصیه می‌کنیم زمان تحویل مورد انتظار را برای ShoppingOrderTrackingEntity وارد کنید، زیرا در صورت ارائه به کاربران نمایش داده می‌شود.

پیش کار

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

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

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

For more information, see Package visibility in Android 11 .

خلاصه

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

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

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

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

خوشه لیست خرید حداکثر ۱ حداکثر ۳ ShoppingList
خوشه سفارش مجدد خرید حداکثر ۱ حداکثر ۱ ReorderEntity
خوشه پیگیری سفارش خرید حداکثر ۳ عدد حداکثر ۳ ShoppingOrderTrackingEntity

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

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

  1. ShoppingEntity
  2. ShoppingCart
  3. ShoppingList
  4. Reorder
  5. ShoppingOrderTracking

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

ShoppingEntity

The ShoppingEntity object represents a product, promotion, deal, subscription, or event that developer partners want to publish.

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

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

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

اوری
عنوان اختیاری نام نهاد.

متن رایگان

Recommended text size: under 90 chars (Text that is too long may show ellipses)

قیمت - فعلی مشروط مورد نیاز

قیمت فعلی نهاد.

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

متن رایگان
قیمت - خط خورده اختیاری قیمت اصلی کالا که در رابط کاربری خط خورده است. متن رایگان
فراخوان اختیاری در صورت امکان، برای ارائه یک تبلیغ، رویداد یا به‌روزرسانی برای نهاد، فراخوان دهید.

متن رایگان

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

متن چاپی زیبا اختیاری متن چاپی زیبا برای توضیحات.

متن رایگان

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

امتیاز (اختیاری) - توجه: همه امتیازها با استفاده از سیستم امتیازدهی ستاره‌ای استاندارد ما نمایش داده می‌شوند.
رتبه‌بندی - حداکثر مقدار اختیاری

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

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

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

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

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

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

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

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

رشته
Rating - Count Value اختیاری

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

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

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

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

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

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

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

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

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

ShoppingCart

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

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

Note: You can use deep links for attribution. Refer to this FAQ

اوری
تعداد اقلام مورد نیاز

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

برای مثال: اگر ۳ پیراهن یکسان و ۱ کلاه در سبد خرید وجود دارد، این عدد باید ۴ باشد.

عدد صحیح >= 1
متن اکشن اختیاری

متن فراخوان برای اقدام (Call to action) دکمه‌ی روی سبد خرید (برای مثال، «کیف خرید شما »).

اگر هیچ متن عملیاتی توسط توسعه‌دهنده ارائه نشده باشد، مشاهده سبد خرید پیش‌فرض است.

این ویژگی در نسخه ۱.۱.۰ به بعد پشتیبانی می‌شود.

رشته
عنوان اختیاری

عنوان سبد خرید (برای مثال، کیف خرید شما ).

اگر هیچ عنوانی توسط توسعه‌دهنده ارائه نشده باشد، سبد خرید شما پیش‌فرض است.

اگر شریک توسعه‌دهنده برای هر فروشنده سبد خرید جداگانه‌ای منتشر می‌کند، لطفاً نام فروشنده را در عنوان ذکر کنید.

متن رایگان

Recommended text size: under 25 chars (Text that is too long may show ellipses)

تصاویر سبد خرید اختیاری

تصاویر هر محصول در سبد خرید

حداکثر 10 تصویر را می‌توان به ترتیب اولویت ارائه داد؛ تعداد واقعی تصاویر نمایش داده شده به شکل دستگاه بستگی دارد.

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

فهرست برچسب‌های اقلام موجود در فهرست خرید.

تعداد واقعی برچسب‌های نمایش داده شده به فاکتور فرم دستگاه بستگی دارد.

فهرست برچسب‌های متنی رایگان

Recommended text size: under 20 chars (Text that is too long may show ellipses)

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

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

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

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

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

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

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

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

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

ShoppingList

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

The deep link to the shopping list in the partner's app.

Note: You can use deep links for attribution. Refer to this FAQ

اوری
تعداد اقلام مورد نیاز تعداد اقلام موجود در لیست خرید. عدد صحیح >= 1
عنوان اختیاری

عنوان لیست (برای مثال، لیست خرید شما ).

اگر هیچ عنوانی توسط توسعه‌دهنده ارائه نشده باشد، فهرست خرید پیش‌فرض است.

متن رایگان

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

برچسب‌های کالا مورد نیاز

فهرست برچسب‌های اقلام موجود در فهرست خرید.

حداقل ۱ برچسب باید ارائه شود و تا ۱۰ برچسب می‌تواند به ترتیب اولویت ارائه شود؛ تعداد واقعی برچسب‌های نمایش داده شده به شکل دستگاه بستگی دارد.

فهرست برچسب‌های متنی رایگان

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

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

ShoppingReorderCluster

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

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

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

اوری
متن اکشن اختیاری

متن فراخوان برای اقدام (call to action) دکمه‌ی «سفارش مجدد» (برای مثال، «دوباره سفارش دهید »).

اگر هیچ متن عملیاتی توسط توسعه‌دهنده ارائه نشده باشد، «ترتیب‌بندی مجدد» پیش‌فرض است.

این ویژگی در نسخه ۱.۱.۰ به بعد پشتیبانی می‌شود.

رشته
تعداد اقلام مورد نیاز

تعداد اقلام (نه فقط تعداد محصولات) در سفارش قبلی.

برای مثال: اگر در سفارش قبلی ۳ قهوه کوچک و ۱ کروسان وجود داشته، این عدد باید ۴ باشد.

عدد صحیح >= 1
عنوان مورد نیاز عنوان کالای سفارش مجدد.

متن رایگان

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

برچسب‌های کالا

اختیاری

(در صورت عدم ارائه، تصاویر پوستر باید ارائه شوند)

لیست برچسب‌های کالا برای سفارش قبلی.

حداکثر 10 برچسب را می‌توان به ترتیب اولویت ارائه داد؛ تعداد واقعی برچسب‌های نمایش داده شده به شکل دستگاه بستگی دارد.

List of free text

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

تصاویر پوستر

اختیاری

(در صورت عدم ارائه، برچسب کالا باید ارائه شود)

تصاویر اقلام سفارش قبلی.

حداکثر 10 تصویر را می‌توان به ترتیب اولویت ارائه داد؛ تعداد واقعی تصاویر نمایش داده شده به شکل دستگاه بستگی دارد.

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

ShoppingOrderTrackingCluster

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

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

متن رایگان

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

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

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

شمارشی: تحویل در فروشگاه، تحویل در همان روز، تحویل چند روزه

وضعیت مورد نیاز

وضعیت فعلی سفارش.

برای مثال: «دیر رسید»، «در حال حمل»، «تأخیر»، «ارسال شده»، «تحویل داده شده»، «ناموجود»، «سفارش آماده است»

متن رایگان

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

زمان سفارش مورد نیاز

مهر زمانی دوره زمانی (epoch) که سفارش در آن ثبت شده است (به میلی‌ثانیه).

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

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

لینک عمیق به پیگیری سفارش در اپلیکیشن همکار.

اوری
OrderDeliveryTimeWindow (Optional) - Set a time window for the order that is being tracked from the time the order was placed to the time of expected/actual delivery.
پنجره زمان تحویل سفارش - زمان شروع اختیاری

مهر زمانی دوره زمانی (برحسب میلی‌ثانیه) که در آن/پس از آن سفارش تحویل داده می‌شود یا آماده دریافت است.

مهر زمانی عصر بر حسب میلی ثانیه
پنجره زمان تحویل سفارش - زمان پایان اختیاری

مهر زمانی دوره زمانی (برحسب میلی‌ثانیه) که سفارش در آن/قبل از آن تحویل داده می‌شود یا آماده دریافت است.

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

تصویر یک کالا/محصول که بخشی از سفارش است.

نسبت ابعاد توصیه شده ۱:۱ است

برای راهنمایی به مشخصات تصویر مراجعه کنید.
تعداد اقلام اختیاری تعداد اقلام موجود در سفارش. عدد صحیح >= 1
توضیحات اختیاری

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

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

متن رایگان

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

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

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

Note: Either description or subtitle list will be displayed to the user, not both.

متن رایگان

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

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

متن رایگان

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

شماره پیگیری اختیاری شماره پیگیری برای تحویل سفارش/بسته در صورتی که سفارش نیاز به تحویل داشته باشد.

متن رایگان

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

مشخصات تصویر

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

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

مربع (۱x۱)

برای خوشه‌های غیرویژه ترجیح داده می‌شود

۳۰۰x۳۰۰ ۱۲۰۰x۱۲۰۰

منظره (۱.۹۱x۱)

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

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

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

PNG، JPG، GIF ثابت، WebP

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

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

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

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

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

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

AppEngageShoppingClient مسئول انتشار خوشه‌های خرید است.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishShoppingCarts
  • publishShoppingLists
  • publishShoppingReorderCluster
  • publishShoppingOrderTrackingCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteShoppingCartCluster
  • deleteShoppingListCluster
  • deleteShoppingReorderCluster
  • deleteShoppingOrderTrackingCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

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

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

نوع خوشه ثابت نوع خوشه مقدار عدد صحیح
ناشناخته TYPE_UNKNOWN 0
خوشه توصیه TYPE_RECOMMENDATION ۱
خوشه ویژه TYPE_FEATURED ۲
Continuation Cluster TYPE_CONTINUATION ۳
خوشه سبد خرید TYPE_SHOPPING_CART ۴
خوشه مدیریت کاربر TYPE_ENGAGEMENT ۸
خوشه لیست خرید TYPE_SHOPPING_LIST ۹
خوشه سفارش مجدد خرید TYPE_SHOPPING_REORDER ۱۰
خوشه پیگیری سفارش خرید TYPE_SHOPPING_ORDER_TRACKING ۱۱
خوشه اشتراک TYPE_SUBSCRIPTION ۱۲

کاتلین

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

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

جاوا

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

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

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

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

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

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

کاتلین

client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

جاوا

client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

This API is used to publish a list of RecommendationCluster objects.

یک شیء RecommendationCluster می‌تواند ویژگی‌های زیر را داشته باشد:

ویژگی مورد نیاز توضیحات
فهرست واحدهای خرید مورد نیاز فهرستی از اشیاء ShoppingEntity که توصیه‌های این خوشه توصیه را تشکیل می‌دهند.
عنوان مورد نیاز

عنوان خوشه توصیه‌ها.

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

زیرنویس اختیاری عنوان فرعی برای خوشه توصیه‌ها.
اکشن اوری اختیاری

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

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

کاتلین

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .build())
                .build())

جاوا

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Black Friday Deals")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

کاتلین

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

جاوا

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

When the service receives the request, the following actions take place within one transaction:

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

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

publishShoppingCarts

این API برای انتشار فهرستی از اشیاء ShoppingCart استفاده می‌شود. این قابلیت برای شرکای توسعه‌دهنده که سبدهای خرید جداگانه‌ای را برای هر فروشنده منتشر می‌کنند، قابل استفاده است. هنگام استفاده از این API، نام فروشنده را در عنوان ذکر کنید.

کاتلین

client.publishShoppingCarts(
            PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    ShoppingCart.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishShoppingCarts(
            new PublishShoppingCartClustersRequest.Builder()
                .addShoppingCart(
                    new ShoppingCart.Builder()
                        ...
                        .build())
                .build())

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

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

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

publishShoppingLists

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

کاتلین

client.publishShoppingLists(
            PublishShoppingListsRequest.Builder()
                .addShoppingList(
                    ShoppingList.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishShoppingLists(
            new PublishShoppingListsRequest.Builder()
                .addShoppingList(
                    new ShoppingListEntity.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingReorderCluster

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

کاتلین

client.publishShoppingReorderCluster(
            PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishShoppingReorderCluster(
            new PublishShoppingReorderClusterRequest.Builder()
                .setReorderCluster(
                    new ShoppingReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishShoppingOrderTrackingCluster

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

کاتلین

client.publishShoppingOrderTrackingCluster(
            PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishShoppingOrderTrackingCluster(
            new PublishShoppingOrderTrackingClusterRequest.Builder()
                .setShoppingOrderTrackingCluster(
                    new ShoppingOrderTrackingCluster.Builder()
                        ...
                        .build())
                .build());

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

  • Existing ShoppingOrderTrackingCluster data from the developer partner is removed.
  • داده‌های درخواست تجزیه و تحلیل شده و در خوشه‌ی به‌روزرسانی‌شده‌ی ردیابی سفارش خرید ذخیره می‌شوند.

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

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

deleteShoppingCartCluster

این API برای حذف محتوای سبد خرید (Shopping Cart Cluster) استفاده می‌شود.

کاتلین

client.deleteShoppingCartCluster()

جاوا

client.deleteShoppingCartCluster();

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

deleteShoppingListCluster

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

کاتلین

client.deleteShoppingListCluster()

جاوا

client.deleteShoppingListCluster();

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

deleteShoppingReorderCluster

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

کاتلین

client.deleteShoppingReorderCluster()

جاوا

client.deleteShoppingReorderCluster();

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

deleteShoppingOrderTrackingCluster

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

کاتلین

client.deleteShoppingOrderTrackingCluster()

جاوا

client.deleteShoppingOrderTrackingCluster();

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

deleteUserManagementCluster

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

کاتلین

client.deleteUserManagementCluster()

جاوا

client.deleteUserManagementCluster();

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

deleteClusters

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

کاتلین

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

جاوا

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

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.

مدیریت خطا

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

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

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

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

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

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

کاتلین

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
  // broadcast is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is
  // received
  // Trigger shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast
  // is received
  // Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
  // received
  // Trigger shopping order tracking cluster publish when
  // PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER 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 Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_CART),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_LIST),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Reorder Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Shopping Order Tracking Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER),
                           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 shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast is
// received

// Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast is
// received

// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received

// Trigger reorder cluster publish when PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER
// 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 Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_CART),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_LIST),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Shopping Order Tracking Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

}
  • یک پیاده‌سازی را به صورت ایستا با تگ <receiver> در فایل AndroidManifest.xml خود تعریف کنید. این به برنامه اجازه می‌دهد تا در زمانی که در حال اجرا نیست، اهداف پخش (broadcast intents) را دریافت کند و همچنین به برنامه اجازه می‌دهد تا محتوا را منتشر کند.

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

اینتنت‌های زیر توسط سرویس ارسال می‌شوند:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishRecommendationClusters آغاز شود.
  • com.google.android.engage.action.PUBLISH_FEATURED توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishFeaturedCluster آغاز شود.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_CART It is recommended to start a publishShoppingCarts call when this intent is received.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST It is recommended to start a publishShoppingLists call when this intent is received.
  • com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER It is recommended to start a publishReorderCluster call when this intent is received.
  • com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER It is recommended to start a publishShoppingOrderTrackingCluster call when this intent is received.

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. Our team replies as soon as possible.

مراحل بعدی

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 , Shopping Cart , Shopping List , Reorder Cluster and Shopping Order Tracking Cluster clusters may be published and visible to users.