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

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

این راهنما شامل دستورالعمل‌هایی برای شرکای توسعه‌دهنده است تا محتوای غذایی (سفارش غذا، بررسی و کشف غذا یا رستوران، اشتراک غذا، دستور پخت غذا) را به سطوح محتوای Engage ارائه دهند.

جزئیات ادغام

اصطلاحات

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

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

    • یک خوشه توصیه می‌تواند از فهرست‌های ProductEntity ، StoreEntity یا RecipeEntity ساخته شود، اما ترکیبی از انواع موجودیت‌های مختلف نیست.
    شکل: `ProductEntity`، `StoreEntity`، و `RecipeEntity`. (*رابط کاربری فقط برای اهداف نمایشی است)
  • خوشه ویژه ، مجموعه‌ای از موجودیت‌ها را از چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری نمایش می‌دهد. یک خوشه ویژه وجود خواهد داشت که در نزدیکی بالای رابط کاربری با اولویت بالاتر از همه خوشه‌های توصیه نمایش داده می‌شود. هر شریک توسعه‌دهنده مجاز به پخش حداکثر 10 موجودیت در خوشه ویژه خواهد بود.

    شکل: خوشه ویژه با `RecipeEntity`. (*رابط کاربری فقط برای اهداف نمایشی است)
  • خوشه سبد خرید مواد غذایی، نگاهی اجمالی به سبدهای خرید مواد غذایی از چندین شریک توسعه‌دهنده در یک گروه‌بندی رابط کاربری نشان می‌دهد و کاربران را به تکمیل سبدهای خرید معوقه خود ترغیب می‌کند. یک خوشه سبد خرید مواد غذایی واحد وجود دارد.

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

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

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

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

      • تصاویر مربوط به X مورد از سفارش قبلی کاربر.
      • برچسب‌هایی برای X مورد در سفارش قبلی کاربر.
    شکل: خوشه سفارش مجدد غذا از یک شریک واحد. (*رابط کاربری فقط برای اهداف نمایشی است)

پیش کار

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

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

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

خلاصه

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

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

نوع خوشه محدودیت‌های خوشه حداکثر محدودیت‌های موجودیت در یک خوشه
خوشه(های) پیشنهادی حداکثر ۷ عدد حداکثر ۵۰ ( ProductEntity ، RecipeEntity یا StoreEntity )
خوشه ویژه حداکثر ۱ حداکثر ۲۰ ( ProductEntity ، RecipeEntity یا StoreEntity )
خوشه سبد خرید مواد غذایی حداکثر ۱ حداکثر ۳ FoodShoppingCart
خوشه فهرست خرید مواد غذایی حداکثر ۱ حداکثر ۳ FoodShoppingList
خوشه سفارش مجدد غذا حداکثر ۱ حداکثر ۱ ReorderEntity

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

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

  1. ProductEntity
  2. StoreEntity
  3. RecipeEntity
  4. FoodShoppingCart
  5. FoodShoppingList
  6. FoodReorderCluster

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

ProductEntity

شیء ProductEntity یک آیتم منفرد (مانند یک کالای مواد غذایی، غذای رستوران یا یک تبلیغ) را نشان می‌دهد که شرکای توسعه‌دهنده می‌خواهند آن را منتشر کنند.

شکل: ویژگی‌های ProductEntity

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

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

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

اوری
عنوان اختیاری نام محصول.

متن رایگان

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

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

قیمت فعلی محصول.

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

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

متن رایگان

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

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

متن رایگان

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

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

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

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

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

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

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

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

تعداد امتیازهای داده شده به محصول.

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

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

تعداد امتیازهای داده شده به محصول.

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

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

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

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

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

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

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

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

StoreEntity

شیء StoreEntity نشان دهنده یک فروشگاه شخصی است که شرکای توسعه دهنده می خواهند آن را منتشر کنند، مانند یک رستوران یا یک فروشگاه مواد غذایی.

شکل: ویژگی‌های StoreEntity

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

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

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

اوری
عنوان اختیاری نام فروشگاه.

متن رایگان

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

مکان اختیاری موقعیت مکانی فروشگاه.

متن رایگان

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

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

متن رایگان

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

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

متن رایگان

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

توضیحات اختیاری توضیحی در مورد فروشگاه.

متن رایگان

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

دسته بندی اختیاری

دسته بندی یک فروشگاه، در زمینه رستوران‌ها، می‌تواند شامل غذاهایی مانند «فرانسوی»، «نیو امریکن»، «رامِن» یا «فوق‌العاده» باشد.

متن رایگان

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

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

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

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

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

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

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

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

تعداد امتیازهای فروشگاه.

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

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

تعداد امتیازهای فروشگاه.

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

طولانی

RecipeEntity

شیء RecipeEntity یک آیتم دستور پخت را نشان می‌دهد که شرکای توسعه‌دهنده می‌خواهند آن را منتشر کنند.

شکل: ویژگی‌های RecipeEntity

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

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

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

اوری
عنوان اختیاری نام دستور پخت.

متن رایگان

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

نویسنده اختیاری نویسنده دستور غذا.

متن رایگان

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

زمان پخت/آماده‌سازی اختیاری زمان پخت طبق دستور غذا.

متن رایگان

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

فراخوان اختیاری در صورت امکان، برای تبلیغ، رویداد یا به‌روزرسانی دستور غذا، فراخوان دهید.

متن رایگان

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

دسته بندی اختیاری دسته بندی دستور غذا.

متن رایگان

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

توضیحات اختیاری شرح دستور غذا.

متن رایگان

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

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

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

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

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

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

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

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

تعداد امتیازهای مربوط به دستور پخت.

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

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

تعداد امتیازهای مربوط به دستور پخت.

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

طولانی

FoodShoppingCart

شکل: ویژگی‌های خوشه سبد خرید مواد غذایی.

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

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

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

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

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

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

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

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

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

متن رایگان

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FoodShoppingList

شکل: خوشه فهرست خرید مواد غذایی.

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

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

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

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

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

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

متن رایگان

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

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

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

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

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

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

FoodReorderCluster

شکل: خوشه مرتب‌سازی مجدد غذا.

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

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

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

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

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

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

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

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

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

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

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

متن رایگان

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

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

اختیاری

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

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

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

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

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

تصاویر پوستر

اختیاری

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

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

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

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

مشخصات تصویر

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

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

مربع (۱x۱)

ترجیحی

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

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

PNG، JPG، GIF ثابت، WebP

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

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

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

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

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

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

AppEngageFoodClient مسئول انتشار خوشه‌های غذایی است.

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishFoodShoppingCarts
  • publishFoodShoppingLists
  • publishReorderCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteFoodShoppingCartCluster
  • deleteFoodShoppingListCluster
  • deleteReorderCluster
  • 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 استفاده می‌شود.

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

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

عنوان خوشه توصیه‌ها (برای مثال، تخفیف‌های بزرگ در منوی روز شکرگزاری ).

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

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

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

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

کاتلین

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .build())
                .build())

جاوا

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .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());

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

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

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

publishFoodShoppingCarts

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

کاتلین

client.publishFoodShoppingCarts(
            PublishFoodShoppingCartsRequest.Builder()
                .addFoodShoppingCart(
                    FoodShoppingCart.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishFoodShoppingCarts(
            new PublishFoodShoppingCartsRequest.Builder()
                .addFoodShoppingCart(
                    new FoodShoppingCart.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishFoodShoppingLists

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

کاتلین

client.publishFoodShoppingLists(
            PublishFoodShoppingListsRequest.Builder()
                .addFoodShoppingList(
                    FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishFoodShoppingLists(
            new PublishFoodShoppingListsRequest.Builder()
                .addFoodShoppingList(
                    new FoodShoppingListEntity.Builder()
                        ...
                        .build())
                .build());

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

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

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

publishReorderCluster

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

کاتلین

client.publishReorderCluster(
            PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    FoodReorderCluster.Builder()
                        ...
                        .build())
                .build())

جاوا

client.publishReorderCluster(
            new PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    new FoodReorderCluster.Builder()
                        ...
                        .build())
                .build());

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

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

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

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

deleteFoodShoppingCartCluster

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

کاتلین

client.deleteFoodShoppingCartCluster()

جاوا

client.deleteFoodShoppingCartCluster();

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

deleteFoodShoppingListCluster

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

کاتلین

client.deleteFoodShoppingListCluster()

جاوا

client.deleteFoodShoppingListCluster();

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

deleteReorderCluster

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

کاتلین

client.deleteReorderCluster()

جاوا

client.deleteReorderCluster();

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

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

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

مدیریت خطا

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

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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast
  // is received
  // Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_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 food Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register food Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_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)
}

جاوا

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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast is
// received

// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast is
// received

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

// Register food Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_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);

}
  • یک پیاده‌سازی را به صورت ایستا با تگ <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.food.PUBLISH_FOOD_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_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.food.PUBLISH_FOOD_SHOPPING_CART توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishFoodShoppingCarts آغاز شود.
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST توصیه می‌شود هنگام دریافت این intent، فراخوانی publishFoodShoppingLists آغاز شود.
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishReorderCluster آغاز شود.

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

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

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

برای سوالات متداول به بخش سوالات متداول Engage SDK مراجعه کنید.

تماس

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

مراحل بعدی

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

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