Engage SDK Food: থার্ড-পার্টি টেকনিক্যাল ইন্টিগ্রেশন সংক্রান্ত নির্দেশাবলী

ব্যবহারকারীরা যেখানে আছেন সেখানে তাদের কাছে পৌঁছে অ্যাপ এনগেজমেন্ট বুস্ট করুন। Engage SDK ইন্টিগ্রেট করুন যাতে একাধিক অন-ডিভাইস সারফেস জুড়ে ব্যবহারকারীদের সরাসরি পছন্দমতো সাজেশন এবং কন্টিনিউয়েশন কন্টেন্ট ডেলিভার করা যায়, যেমন কালেকশন, Entertainment Space এবং Play Store। ইন্টিগ্রেশনটি গড় APK-তে ৫০ কেবি (কমপ্রেস করা) থেকে কম যোগ করে এবং বেশিরভাগ অ্যাপের ক্ষেত্রে ডেভেলপারের প্রায় এক সপ্তাহ সময় নেয়। আমাদের ব্যবসার সাইট থেকে আরও জানুন।

এই গাইডে ডেভেলপার পার্টনারদের জন্য Engage কন্টেন্ট সারফেসে খাবারের কন্টেন্ট (খাবার অর্ডার করা, খাবার বা রেস্তোরাঁর রিভিউ ও ডিসকভারি, খাবারের সাবস্ক্রিপশন, রেসিপি) ডেলিভার করার নির্দেশাবলী রয়েছে।

বিভাগ সংক্রান্ত সহায়তা ও সারফেস

Engage SDK সারফেসের উপযুক্ততা আপনার অ্যাপের কন্টেন্ট বিভাগের উপর নির্ভর করে। নির্দিষ্ট সারফেসে আপনার যোগ্যতা নির্ধারণ করতে নিম্নলিখিত টেবিল ব্যবহার করুন:

স্ট্যাটাস কন্টেন্ট বিভাগ বা ব্যবহারিক প্রয়োগ যেসব সারফেসে কাজ করে
কাজ করে
(সব সারফেসে উপযুক্ত)
  • খাবার / কফি / পানীয় অর্ডার বা ডেলিভারি
  • রেস্তোরাঁ / খাবার খোঁজা, রিভিউ ও রিজার্ভেশন
  • খাবারের সাবস্ক্রিপশন
  • রেসিপি ও রান্না
  • সংগ্রহ
  • Play Store অ্যাপ ট্যাব
  • Play Store-এর অ্যাকাউন্ট ট্যাব
  • Play Store-এর স্টোর লিস্টিং পৃষ্ঠা
কাজ করে না
  • ড্রাইভার / ডেলিভারি পার্টনার অ্যাপ
  • রান্নার টুল / কন্ট্রোল

ইন্টিগ্রেশনের বিবরণ

এই বিভাগে ফুড কন্টেন্টের জন্য Engage SDK-এর সাথে ইন্টিগ্রেট করার জন্য প্রয়োজনীয় ধাপ, ডেটা মডেল ও পরিভাষা সম্পর্কে বিস্তারিত তথ্য দেওয়া আছে।

পরিভাষা

এই ইন্টিগ্রেশনে নিম্নলিখিত পাঁচটি ক্লাস্টার টাইপ অন্তর্ভুক্ত: সাজেশন, ফিচার করা, খাবারের শপিং কার্ট, খাবারের শপিং লিস্ট এবং আবার অর্ডার করুন।

  • সাজেশন ক্লাস্টার কোনও স্বতন্ত্র ডেভেলপার পার্টনারের থেকে খাবার সম্পর্কিত পছন্দমতো সাজেশন দেখায়। এইসব সাজেশন ব্যবহারকারীর পছন্দ অনুযায়ী বা সাধারণ (যেমন, নতুন সেল) হতে পারে। রেসিপি, স্টোর, ডিশ বা মুদিখানার মতো আইটেম ফিচার করতে এগুলি ব্যবহার করুন।

    • সাজেশন ক্লাস্টার ProductEntity, StoreEntity, অথবা RecipeEntity তালিকা দিয়ে তৈরি করা যেতে পারে, তবে বিভিন্ন এন্টিটি টাইপের মিশ্রণ দিয়ে নয়।
    ছবি :`ProductEntity`, `StoreEntity` এবং `RecipeEntity`। (*UI শুধুমাত্র উদাহরণের জন্য)
  • ফিচার করা ক্লাস্টার, একটি UI গ্রুপিংয়ে একাধিক ডেভেলপার পার্টনারের থেকে বেছে নেওয়া এন্টিটি দেখায়। একটিই ফিচার করা ক্লাস্টার থাকবে, যা UI-এর উপরের দিকে দেখানো হবে এবং এটি সব সাজেশন ক্লাস্টারের উপরে অগ্রাধিকারের ভিত্তিতে প্লেস করা হবে। প্রত্যেক ডেভেলপার পার্টনারকে ফিচার করা ক্লাস্টারে সর্বাধিক ১০টি এন্টিটি ব্রডকাস্ট করার অনুমতি দেওয়া হবে।

    ছবি : `RecipeEntity` সহ ফিচার করা ক্লাস্টার। (*UI শুধুমাত্র উদাহরণের জন্য)
  • ফুড শপিং কার্ট ক্লাস্টারটি একটি UI গ্রুপিংয়ে একাধিক ডেভেলপার পার্টনারদের থেকে মুদিখানার শপিং কার্টের একটি স্নিক পিক দেখায়, যা ব্যবহারকারীদের তাদের বকেয়া কার্ট সম্পূর্ণ করতে প্রম্পট করে। একটি ফুড শপিং কার্ট ক্লাস্টার আছে।

    • ফুড শপিং কার্ট ক্লাস্টারে কার্টে থাকা আইটেমের মোট সংখ্যা দেখাতে হবে এবং ব্যবহারকারীর কার্টে থাকা X সংখ্যক আইটেমের ছবিও অন্তর্ভুক্ত থাকতে পারে।

      ছবি: একজন পার্টনারের থেকে ফুড শপিং কার্ট ক্লাস্টার। (*UI শুধুমাত্র উদাহরণ হিসেবে দেখানোর জন্য)
  • খাবারের শপিং লিস্ট ক্লাস্টার, একটি UI গ্রুপিংয়ে একাধিক ডেভেলপার পার্টনারের থেকে মুদিখানা শপিং লিস্টের একটি স্নিক পিক দেখায়, যা ব্যবহারকারীদের তাদের তালিকা আপডেট ও সম্পূর্ণ করতে সংশ্লিষ্ট অ্যাপে ফিরে যেতে প্রম্পট করে। খাবারের শপিং লিস্টের একটি ক্লাস্টার আছে।

    ছবি: একটি পার্টনারের থেকে পাওয়া খাবার কেনাকাটার তালিকার ক্লাস্টার। (*UI শুধুমাত্র উদাহরণ হিসেবে দেখানোর জন্য)
  • আবার অর্ডার করুন ক্লাস্টারটি একাধিক ডেভেলপার পার্টনারের থেকে আগের অর্ডারের একটি স্নিক পিক দেখায় একটি UI গ্রুপিংয়ে, ব্যবহারকারীদের আবার অর্ডার করতে অনুরোধ করে। একটি মাত্র রিঅর্ডার ক্লাস্টার আছে।

    • আবার অর্ডার করার ক্লাস্টারে ব্যবহারকারীর আগের অর্ডারে আইটেমের মোট সংখ্যা দেখাতে হবে এবং নিম্নলিখিতগুলির মধ্যে একটিও অন্তর্ভুক্ত করতে হবে:

      • ব্যবহারকারীর আগের অর্ডারে Xটি আইটেমের ছবি।
      • ব্যবহারকারীর আগের অর্ডারে Xটি আইটেমের লেবেল।
    ছবি: একজন পার্টনারের থেকে খাবার আবার অর্ডার করার ক্লাস্টার। (*UI শুধুমাত্র উদাহরণ হিসেবে দেখানোর জন্য)

প্রি-ওয়ার্ক

ন্যূনতম 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'
}

সারাংশ

ডিজাইনটি বাউন্ড পরিষেবার প্রয়োগের উপর ভিত্তি করে তৈরি করা হয়েছে।

ক্লায়েন্ট যে ডেটা প্রকাশ করতে পারে তা বিভিন্ন ক্লাস্টার ধরনের জন্য নিম্নলিখিত সীমার অধীন:

ক্লাস্টারের ধরন ক্লাস্টারের সীমা একটি ক্লাস্টারে সর্বাধিক এন্টিটি সীমা
সাজেশন ক্লাস্টার সর্বাধিক ৭টি সর্বাধিক ৫০ (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-এর অ্যাট্রিবিউট

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
পোস্টার ছবি প্রয়োজনীয় অন্তত একটি ছবি দিতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
অ্যাকশন Uri প্রয়োজনীয়

অ্যাপের পৃষ্ঠায় ডিপ লিঙ্ক যা প্রোডাক্টের বিবরণ দেখায়।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
শীর্ষক ঐচ্ছিক প্রোডাক্টের নাম।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৯০ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

দাম - বর্তমান শর্তসাপেক্ষে প্রয়োজন

প্রোডাক্টের বর্তমান দাম।

স্ট্রাইকথ্রু দাম দেওয়া থাকলে এটি দিতেই হবে।

ফ্রি টেক্সট
দাম - স্ট্রাইকথ্রু ঐচ্ছিক এন্টিটির আসল দাম, যা UI-তে কাটা চিহ্নের মাধ্যমে দেখানো হয়। ফ্রি টেক্সট
কলআউট ঐচ্ছিক প্রোডাক্টের জন্য প্রোমো, ইভেন্ট বা আপডেট ফিচার করার জন্য কলআউট, যদি উপলভ্য থাকে।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

কলআউট ফাইন প্রিন্ট ঐচ্ছিক কলআউটের জন্য ফাইন প্রিন্ট টেক্সট।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

রেটিং (ঐচ্ছিক) - মনে রাখবেন: আমাদের স্ট্যান্ডার্ড স্টার রেটিং সিস্টেম ব্যবহার করে সব রেটিং দেখানো হয়।
রেটিং - সর্বোচ্চ ভ্যালু ঐচ্ছিক

রেটিং স্কেলের সর্বাধিক মান।

রেটিংয়ের বর্তমান ভ্যালু দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - বর্তমান ভ্যালু ঐচ্ছিক

রেটিং স্কেলের বর্তমান ভ্যালু।

রেটিংয়ের সর্বাধিক মান দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - সংখ্যা ঐচ্ছিক

প্রোডাক্টের জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনার অ্যাপ ব্যবহারকারীদের কাছে কীভাবে গণনা দেখায় তা নিয়ন্ত্রণ করলে এই ফিল্ডটি প্রদান করুন। সংক্ষিপ্ত স্ট্রিং ব্যবহার করুন। যেমন, সংখ্যাটি ১,০০০,০০০ হলে, ১M-এর মতো সংক্ষিপ্ত রূপ ব্যবহার করার কথা বিবেচনা করুন যাতে ছোট ডিসপ্লে সাইজে সংখ্যাটি কেটে না যায়।

স্ট্রিং
রেটিং - গণনা ভ্যালু ঐচ্ছিক

প্রোডাক্টের জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনি নিজে ডিসপ্লে অ্যাব্রিভিয়েশন লজিক ম্যানেজ না করলে এই ফিল্ডে তথ্য দিন। যদি Count এবং Count Value উভয়ই থাকে, তাহলে ব্যবহারকারীদের Count দেখানো হয়।

দীর্ঘ
DisplayTimeWindow (ঐচ্ছিক) - সারফেসে কন্টেন্ট দেখানোর জন্য একটি টাইম উইন্ডো সেট করুন
শুরুর টাইমস্ট্যাম্প ঐচ্ছিক

যে ইপক টাইমস্ট্যাম্পের পরে সারফেসে কন্টেন্ট দেখানো হবে।

সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে।

মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প
শেষের টাইমস্ট্যাম্প ঐচ্ছিক

যে ইপক টাইমস্ট্যাম্পের পরে কন্টেন্ট আর সারফেসে দেখানো হয় না।

সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে।

মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প

StoreEntity

StoreEntity অবজেক্টটি একটি স্বতন্ত্র স্টোরকে উপস্থাপন করে যা ডেভেলপার পার্টনাররা প্রকাশ করতে চান, যেমন একটি রেস্তোরাঁ বা মুদি দোকান।

ছবি : StoreEntity-এর অ্যাট্রিবিউট

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
পোস্টার ছবি প্রয়োজনীয় অন্তত একটি ছবি দিতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
অ্যাকশন Uri প্রয়োজনীয়

অ্যাপের পৃষ্ঠায় ডিপ লিঙ্ক যা স্টোর সম্পর্কে বিবরণ দেখায়।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
শীর্ষক ঐচ্ছিক স্টোরের নাম।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

লোকেশন ঐচ্ছিক স্টোরের লোকেশন।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

কলআউট ঐচ্ছিক স্টোরের জন্য প্রোমো, ইভেন্ট বা আপডেট ফিচার করার জন্য কলআউট, যদি উপলভ্য থাকে।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

কলআউট ফাইন প্রিন্ট ঐচ্ছিক কলআউটের জন্য ফাইন প্রিন্ট টেক্সট।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

বর্ণনা ঐচ্ছিক স্টোরের বিবরণ।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৯০ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্তাকার চিহ্ন দেখানো হতে পারে)

বিভাগ ঐচ্ছিক

ডাইনিং প্লেসের প্রসঙ্গে, কোনও স্টোরের বিভাগ, এটি "ফ্রেঞ্চ", "নিউ আমেরিকান", "রামেন", "ফাইন ডাইনিং"-এর মতো ক্যুইজিন হতে পারে।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

মনে রাখবেন: আমাদের স্ট্যান্ডার্ড স্টার রেটিং সিস্টেম ব্যবহার করে সব রেটিং দেখানো হয়।
রেটিং - সর্বোচ্চ ভ্যালু ঐচ্ছিক

রেটিং স্কেলের সর্বাধিক মান।

রেটিংয়ের বর্তমান ভ্যালু দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - বর্তমান ভ্যালু ঐচ্ছিক

রেটিং স্কেলের বর্তমান ভ্যালু।

রেটিংয়ের সর্বাধিক মান দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - সংখ্যা ঐচ্ছিক

স্টোরের জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনার অ্যাপ যদি ব্যবহারকারীদের কাছে এটি কীভাবে দেখানো হবে তা নিয়ন্ত্রণ করতে চায়, তাহলে এই ফিল্ডটি প্রদান করুন। ব্যবহারকারীকে দেখানো যেতে পারে এমন সংক্ষিপ্ত স্ট্রিং প্রদান করুন। যেমন, সংখ্যাটি যদি ১,০০০,০০০ হয়, তাহলে 1M-এর মতো সংক্ষিপ্ত রূপ ব্যবহার করার কথা বিবেচনা করুন, যাতে এটি ছোট ডিসপ্লে সাইজে কেটে না যায়।

স্ট্রিং
রেটিং - গণনা ভ্যালু ঐচ্ছিক

স্টোরের জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনি যদি ডিসপ্লে অ্যাব্রিভিয়েশন লজিক নিজে ম্যানেজ করতে না চান, তাহলে এই ফিল্ডে তথ্য দিন। যদি Count এবং Count Value উভয়ই থাকে, তাহলে আমরা ব্যবহারকারীদের দেখানোর জন্য Count ব্যবহার করব

দীর্ঘ

RecipeEntity

RecipeEntity অবজেক্টটি এমন একটি রেসিপি আইটেমকে উপস্থাপন করে যা ডেভেলপার পার্টনাররা প্রকাশ করতে চান।

ছবি : RecipeEntity-এর অ্যাট্রিবিউট

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
পোস্টার ছবি প্রয়োজনীয় অন্তত একটি ছবি দিতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
অ্যাকশন Uri প্রয়োজনীয়

অ্যাপের পৃষ্ঠায় ডিপ লিঙ্ক যা রেসিপি সম্পর্কে বিবরণ দেখাচ্ছে।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
শীর্ষক ঐচ্ছিক রেসিপির নাম।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

লেখক ঐচ্ছিক রেসিপির লেখক।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

রান্না/প্রস্তুত করার সময় ঐচ্ছিক রেসিপিটি রান্না করতে কত সময় লাগবে।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

কলআউট ঐচ্ছিক রেসিপির জন্য প্রোমো, ইভেন্ট বা আপডেট ফিচার করার জন্য কলআউট, যদি উপলভ্য থাকে।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

বিভাগ ঐচ্ছিক রেসিপির বিভাগ।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪৫ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

বর্ণনা ঐচ্ছিক রেসিপির বিবরণ।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৯০ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্তাকার চিহ্ন দেখানো হতে পারে)

মনে রাখবেন: আমাদের স্ট্যান্ডার্ড স্টার রেটিং সিস্টেম ব্যবহার করে সব রেটিং দেখানো হয়।
রেটিং - সর্বোচ্চ ভ্যালু ঐচ্ছিক

রেটিং স্কেলের সর্বাধিক মান।

রেটিংয়ের বর্তমান ভ্যালু দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - বর্তমান ভ্যালু ঐচ্ছিক

রেটিং স্কেলের বর্তমান ভ্যালু।

রেটিংয়ের সর্বাধিক মান দেওয়া থাকলে এটিও দিতে হবে।

সংখ্যা >= ০.০ হতে হবে
রেটিং - সংখ্যা ঐচ্ছিক

রেসিপির জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনার অ্যাপ যদি ব্যবহারকারীদের কাছে এটি কীভাবে দেখানো হবে তা নিয়ন্ত্রণ করতে চায়, তাহলে এই ফিল্ডটি প্রদান করুন। ব্যবহারকারীকে দেখানো যেতে পারে এমন সংক্ষিপ্ত স্ট্রিং প্রদান করুন। যেমন, সংখ্যাটি যদি ১,০০০,০০০ হয়, তাহলে 1M-এর মতো সংক্ষিপ্ত রূপ ব্যবহার করার কথা বিবেচনা করুন, যাতে এটি ছোট ডিসপ্লে সাইজে কেটে না যায়।

স্ট্রিং
রেটিং - গণনা ভ্যালু ঐচ্ছিক

রেসিপির জন্য রেটিংয়ের সংখ্যা।

মনে রাখবেন: আপনি যদি ডিসপ্লে অ্যাব্রিভিয়েশন লজিক নিজে ম্যানেজ করতে না চান, তাহলে এই ফিল্ডে তথ্য দিন। যদি Count এবং Count Value উভয়ই থাকে, তাহলে আমরা ব্যবহারকারীদের দেখানোর জন্য Count ব্যবহার করব

দীর্ঘ

FoodShoppingCart

ছবি: ফুড শপিং কার্ট ক্লাস্টার অ্যাট্রিবিউট।

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
অ্যাকশন Uri প্রয়োজনীয়

পার্টনারের অ্যাপে শপিং কার্টের ডিপ লিঙ্ক।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
আইটেমের সংখ্যা প্রয়োজনীয়

শপিং কার্টে থাকা আইটেমের সংখ্যা (শুধু প্রোডাক্টের সংখ্যা নয়)।

যেমন: কার্টে ৩টি কমলালেবু ও ১টি আপেল থাকলে, এই সংখ্যাটি ৪ হতে হবে।

পূর্ণসংখ্যা >= ১
ব্যবহারকারীর শেষ ইন্টার‍্যাকশনের টাইমস্ট্যাম্প প্রয়োজনীয় ব্যবহারকারী শেষবার যখন শপিং কার্টের সাথে ইন্টার‍্যাক্ট করেছেন, সেই সময় শনাক্ত করে, ইপক থেকে অতিবাহিত হওয়া মিলিসেকেন্ডের সংখ্যা। মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প
শীর্ষক ঐচ্ছিক

কার্টের শীর্ষক (যেমন, আপনার কার্ট)।

ডেভেলপার কোনও শিরোনাম না দিলে, আপনার কার্ট ডিফল্ট হিসেবে সেট করা হয়।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ২৫টি অক্ষরের কম (টেক্সট খুব বড় হলে ইলিপসিস দেখানো হতে পারে)

অ্যাকশন টেক্সট ঐচ্ছিক

শপিং কার্টে বোতামের কল টু অ্যাকশন টেক্সট (যেমন, আপনার শপিং ব্যাগ)।

ডেভেলপার কোনও অ্যাকশন টেক্সট না দিলে, কার্ট দেখুন ডিফল্ট হিসেবে সেট করা থাকে।

এই অ্যাট্রিবিউট 1.1.0 ভার্সন থেকে কাজ করে।

স্ট্রিং
কার্টের ছবি ঐচ্ছিক

কার্টে থাকা প্রতিটি প্রোডাক্টের ছবি।

অগ্রাধিকারের ক্রম অনুযায়ী সর্বাধিক ১০টি ছবি দেওয়া যেতে পারে; কতগুলি ছবি দেখানো হবে তা ডিভাইসের ফর্ম ফ্যাক্টরের উপর নির্ভর করে।

নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
আইটেম লেবেল ঐচ্ছিক

শপিং লিস্টে থাকা আইটেমের লেবেলের তালিকা।

প্রকৃত কতগুলি লেবেল দেখানো হবে তা ডিভাইসের ফর্ম ফ্যাক্টরের উপর নির্ভর করে।

ফ্রি টেক্সট লেবেলের তালিকা

সাজেস্ট করা টেক্সটের সাইজ: ২০টি অক্ষরের কম (টেক্সট খুব বড় হলে ইলিপসিস দেখানো হতে পারে)

DisplayTimeWindow (ঐচ্ছিক) - সারফেসে কন্টেন্ট দেখানোর জন্য একটি টাইম উইন্ডো সেট করুন
শুরুর টাইমস্ট্যাম্প ঐচ্ছিক

যে ইপক টাইমস্ট্যাম্পের পরে সারফেসে কন্টেন্ট দেখানো হবে।

সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে।

মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প
শেষের টাইমস্ট্যাম্প ঐচ্ছিক

যে ইপক টাইমস্ট্যাম্পের পরে কন্টেন্ট আর সারফেসে দেখানো হয় না।

সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে।

মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প

FoodShoppingList

ছবি: খাবারের শপিং লিস্ট ক্লাস্টার।

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
অ্যাকশন Uri প্রয়োজনীয়

পার্টনারের অ্যাপে শপিং লিস্টের ডিপ লিঙ্ক।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
আইটেমের সংখ্যা প্রয়োজনীয় শপিং লিস্টে থাকা আইটেমের সংখ্যা। পূর্ণসংখ্যা >= ১
ব্যবহারকারীর শেষ ইন্টার‍্যাকশনের টাইমস্ট্যাম্প প্রয়োজনীয় ব্যবহারকারী শেষবার যখন শপিং লিস্টের সাথে ইন্টার‍্যাক্ট করেছেন, সেই সময় শনাক্ত করে ইপক থেকে কত মিলিসেকেন্ড অতিবাহিত হয়েছে তার সংখ্যা। মিলিসেকেন্ডে Epoch টাইমস্ট্যাম্প
শীর্ষক ঐচ্ছিক

তালিকার নাম (যেমন, আপনার মুদিখানার তালিকা)।

ডেভেলপার কোনও নাম না দিলে, শপিং লিস্ট ডিফল্ট হিসেবে সেট করা হয়।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ২৫টি অক্ষরের কম (টেক্সট খুব বড় হলে ইলিপসিস দেখানো হতে পারে)

আইটেম লেবেল প্রয়োজনীয়

শপিং লিস্টে থাকা আইটেমের লেবেলের তালিকা।

কমপক্ষে ১টি লেবেল দিতে হবে এবং অগ্রাধিকারের ভিত্তিতে সর্বাধিক ১০টি লেবেল দেওয়া যেতে পারে; কতগুলি লেবেল দেখানো হবে তা নির্ভর করে ডিভাইসের ফর্ম ফ্যাক্টরের উপর।

ফ্রি টেক্সট লেবেলের তালিকা

সাজেস্ট করা টেক্সটের সাইজ: ২০টি অক্ষরের কম (টেক্সট খুব বড় হলে ইলিপসিস দেখানো হতে পারে)

FoodReorderCluster

ছবি: ফুড রিঅর্ডার ক্লাস্টার।

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
অ্যাকশন Uri প্রয়োজনীয়

পার্টনারের অ্যাপে আবার অর্ডার করার ডিপ লিঙ্ক।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

URI
অ্যাকশন টেক্সট ঐচ্ছিক

আবার অর্ডার করুন বোতামের কল টু অ্যাকশন টেক্সট (যেমন, আবার অর্ডার করুন)।

ডেভেলপার কোনও অ্যাকশন টেক্সট না দিলে, আবার সাজান ডিফল্ট হিসেবে সেট করা হয়।

এই অ্যাট্রিবিউট 1.1.0 ভার্সন থেকে কাজ করে।

স্ট্রিং
আইটেমের সংখ্যা প্রয়োজনীয়

আগের অর্ডারে আইটেমের সংখ্যা (শুধু প্রোডাক্টের সংখ্যা নয়)।

যেমন: আগের অর্ডারে ৩টি ছোট কফি এবং ১টি ক্রোয়াসা থাকলে, এই সংখ্যাটি ৪ হতে হবে।

পূর্ণসংখ্যা >= ১
শীর্ষক প্রয়োজনীয় আবার সাজানো আইটেমের শীর্ষক।

ফ্রি টেক্সট

সাজেস্ট করা টেক্সটের সাইজ: ৪০ অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্তাকার চিহ্ন দেখানো হতে পারে)

আইটেম লেবেল

ঐচ্ছিক

(এটি না দেওয়া হলে, পোস্টার ছবি দিতে হবে)

আগের অর্ডারের জন্য আইটেম লেবেলের তালিকা।

অগ্রাধিকারের ক্রম অনুসারে সর্বাধিক ১০টি লেবেল প্রদান করা যেতে পারে; প্রকৃতপক্ষে কতগুলি লেবেল দেখানো হবে তা ডিভাইসের ফর্ম ফ্যাক্টরের উপর নির্ভর করে।

ফ্রি টেক্সটের তালিকা

প্রতি লেবেলে সাজেস্ট করা টেক্সটের সাইজ: ২০টি অক্ষরের কম (টেক্সট খুব বড় হলে উপবৃত্ত দেখানো হতে পারে)

পোস্টার ছবি

ঐচ্ছিক

(প্রদান করা না হলে, আইটেম লেবেল প্রদান করতে হবে)

আগের অর্ডারে থাকা আইটেমের ছবি।

অগ্রাধিকারের ক্রম অনুযায়ী সর্বাধিক ১০টি ছবি দেওয়া যেতে পারে; কতগুলি ছবি দেখানো হবে তা ডিভাইসের ফর্ম ফ্যাক্টরের উপর নির্ভর করে।

নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।

ছবির স্পেসিফিকেশন

নিচের সারণীতে ইমেজ অ্যাসেটের জন্য প্রয়োজনীয় স্পেসিফিকেশন তালিকাভুক্ত করা হয়েছে:

অ্যাস্পেক্ট রেশিও ন্যূনতম পিক্সেল সাজেস্ট করা পিক্সেল

বর্গাকার (১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 ব্যবহার করা হয়।

আপনি প্রকাশ করতে চান এমন প্রতিটি ক্লাস্টার প্রকারের জন্য পরিষেবার উপলভ্যতা চেক করতে পারেন। isServiceAvailable API একটি অনুরোধ অবজেক্ট গ্রহণ করে, ServiceAvailabilityRequest, যার মধ্যে ক্লাস্টার প্রকারগুলি রয়েছে যার জন্য পরিষেবা উপলভ্যতা চেক করা প্রয়োজন। ServiceAvailabilityRequest-এর জন্য প্রয়োজনীয় ClusterType এনাম ভ্যালু আপনি নিম্নলিখিত টেবিল থেকে খুঁজে পাবেন।

ক্লাস্টারের ধরন ক্লাস্টারের ধরন কনস্ট্যান্ট পূর্ণসংখ্যার মান
অজানা TYPE_UNKNOWN 0
সাজেশন ক্লাস্টার TYPE_RECOMMENDATION 1
ফিচার করা ক্লাস্টার TYPE_FEATURED 2
কন্টিনিউয়েশন ক্লাস্টার TYPE_CONTINUATION 3
খাবার আবার অর্ডার করার ক্লাস্টার TYPE_FOOD_REORDER 5
খাবারের শপিং কার্ট ক্লাস্টার TYPE_FOOD_SHOPPING_CART 6
খাবারের শপিং লিস্ট ক্লাস্টার TYPE_FOOD_SHOPPING_LIST 7
ব্যবহারকারী ম্যানেজমেন্ট ক্লাস্টার TYPE_ENGAGEMENT 8
সাবস্ক্রিপশন ক্লাস্টার TYPE_SUBSCRIPTION 12

Kotlin

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 পরিষেবা মাঝে মাঝে চালু ও বন্ধ করে। তবে, এই মাঝে মাঝে কন্টেন্ট ইনজেশন স্ট্র্যাটেজি ব্যবহারকারীর অভিজ্ঞতায় নেতিবাচক প্রভাব ফেলে: পুরনো কন্টেন্ট দেখানো হবে না এবং কিছু সারফেস পরিবেশন করা হবে না।

v1.6.0 থেকে শুরু করে, Engage SDK নির্দিষ্ট ক্লাস্টার ধরনের জন্য উপলভ্যতা চেক করার অনুমতি দেয়। আপনার অ্যাপ যদি মাঝে মাঝে ইনজেশন ব্যবহার করে:

  • কন্টিনিউয়েশন ক্লাস্টার (যেমন, ফুড শপিং কার্ট, ফুড শপিং লিস্ট এবং রিঅর্ডার) সব কাজ করে এমন ডিভাইসে ডিফল্ট হিসেবে চালু থাকে।
  • অন্যান্য ক্লাস্টারের ধরন (যেমন সাজেশন) মাঝে মাঝে চালু ও বন্ধ করা হয়।

এই ডিফল্ট কনফিগারেশন আপনার প্রয়োজন অনুযায়ী উপযুক্ত না হলে, engage-developers@google.com-এ যোগাযোগ করুন।

v1.6.0-এর আগের SDK ভার্সনের জন্য (বন্ধ হয়ে গেছে)

Kotlin

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

জাভা

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

publishRecommendationClusters

RecommendationCluster অবজেক্টের তালিকা প্রকাশ করতে এই API ব্যবহার করা হয়।

RecommendationCluster অবজেক্টে নিম্নলিখিত অ্যাট্রিবিউট থাকতে পারে:

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা
ProductEntity, StoreEntity বা RecipeEntity-এর তালিকা প্রয়োজনীয় এই সাজেশন ক্লাস্টারের জন্য সাজেশন তৈরি করে এমন এন্টিটির তালিকা। একটি ক্লাস্টারে থাকা এন্টিটি একই ধরনের হতে হবে।
শীর্ষক প্রয়োজনীয়

সাজেশন ক্লাস্টারের শীর্ষক (যেমন, থ্যাঙ্কসগিভিং মেনুতে বিপুল সাশ্রয়)।

সাজেস্ট করা টেক্সটের সাইজ: ২৫টি অক্ষরের কম (টেক্সট অনেক বড় হলে উপবৃত্ত দেখানো হতে পারে)

সাবটাইটেল ঐচ্ছিক সাজেশন ক্লাস্টারের সাবটাইটেল।
অ্যাকশন Uri ঐচ্ছিক

পার্টনার অ্যাপের পৃষ্ঠার ডিপ লিঙ্ক যেখানে ব্যবহারকারী সাজেশনের সম্পূর্ণ তালিকা দেখতে পাবেন।

মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন

Kotlin

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 অবজেক্ট প্রকাশ করা হয়।

Kotlin

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

জাভা

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

পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:

  • ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা FeaturedCluster ডেটা সরিয়ে দেওয়া হয়েছে।
  • অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা ফিচার ক্লাস্টারে স্টোর করা হয়।

কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।

publishFoodShoppingCarts

FoodShoppingCart অবজেক্টের তালিকা প্রকাশ করতে এই API ব্যবহার করা হয়।

Kotlin

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

জাভা

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

পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:

  • ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা FoodShoppingCart ডেটা সরিয়ে দেওয়া হয়েছে।
  • অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা শপিং কার্ট ক্লাস্টারে স্টোর করা হয়।

কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।

publishFoodShoppingLists

FoodShoppingList অবজেক্টের তালিকা প্রকাশ করতে এই API ব্যবহার করা হয়।

Kotlin

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

জাভা

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

পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:

  • ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা FoodShoppingList ডেটা সরিয়ে দেওয়া হয়েছে।
  • অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা শপিং লিস্ট ক্লাস্টারে স্টোর করা হয়।

কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।

publishReorderCluster

এই API-এর মাধ্যমে FoodReorderCluster অবজেক্ট প্রকাশ করা হয়।

Kotlin

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

জাভা

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

পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:

  • ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা FoodReorderCluster ডেটা সরিয়ে দেওয়া হয়েছে।
  • অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা রিঅর্ডার ক্লাস্টারে স্টোর করা হয়।

কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।

publishUserAccountManagementRequest

এই API ব্যবহার করে সাইন-ইন কার্ড প্রকাশ করা হয়। সাইন-ইন অ্যাকশন ব্যবহারকারীকে অ্যাপের সাইন-ইন পৃষ্ঠায় নিয়ে যায় যাতে অ্যাপটি কন্টেন্ট প্রকাশ করতে পারে (অথবা আরও পছন্দমতো কন্টেন্ট প্রদান করতে পারে)

নিম্নলিখিত মেটাডেটা সাইন-ইন কার্ডের অংশ -

অ্যাট্রিবিউট প্রয়োজনীয়তা বর্ণনা
অ্যাকশন Uri প্রয়োজনীয় অ্যাকশনের ডিপলিঙ্ক (যেমন, অ্যাপের সাইন-ইন পৃষ্ঠায় নেভিগেট করে)
ছবি ঐচ্ছিক - এটি না দিলে, শীর্ষক দিতেই হবে

কার্ডে দেখানো ছবি

১২৬৪x৭১২ রেজোলিউশন সহ ১৬x৯ অ্যাস্পেক্ট রেশিওর ছবি

শীর্ষক ঐচ্ছিক - এটি না দিলে, ছবি দিতেই হবে কার্ডে লেখা নাম
অ্যাকশন টেক্সট ঐচ্ছিক CTA-তে দেখানো টেক্সট (যেমন, সাইন-ইন করুন)
সাবটাইটেল ঐচ্ছিক কার্ডে ঐচ্ছিক সাবটাইটেল

Kotlin

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 == PUBLISHED), সব পরিস্থিতিতে স্ট্যাটাস প্রদান করা গুরুত্বপূর্ণ, যাতে ড্যাশবোর্ডগুলি আপনার ইন্টিগ্রেশনের স্বাস্থ্য এবং অন্যান্য মেট্রিক্স জানাতে এই স্পষ্ট স্ট্যাটাস ব্যবহার করতে পারে।
  • কোনও কন্টেন্ট প্রকাশ করা না হলেও ইন্টিগ্রেশন স্ট্যাটাস যদি ঠিক থাকে (STATUS == NOT_PUBLISHED), Google অ্যাপের হেলথ ড্যাশবোর্ডে অ্যালার্ট ট্রিগার করা এড়াতে পারে। এটি নিশ্চিত করে যে প্রদানকারীর দৃষ্টিকোণ থেকে একটি প্রত্যাশিত পরিস্থিতির কারণে কন্টেন্ট প্রকাশ করা হয়নি।
  • এটি ডেভেলপারদের ডেটা কখন প্রকাশিত হয় বনাম কখন হয় না সে সম্পর্কে ইনসাইট প্রদান করতে সাহায্য করে।
  • Google স্ট্যাটাস কোড ব্যবহার করে ব্যবহারকারীকে অ্যাপে নির্দিষ্ট কিছু অ্যাকশন করার জন্য অনুরোধ করতে পারে যাতে তারা অ্যাপের কন্টেন্ট দেখতে বা সমস্যাটি সমাধান করতে পারে।

প্রকাশের স্ট্যাটাস কোডের তালিকা হল :

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

ব্যবহারকারী লগ-ইন না করার কারণে কন্টেন্ট প্রকাশ করা না হলে, Google সাইন-ইন কার্ড প্রকাশ করার সাজেশন দেবে। কোনও কারণে পরিষেবা প্রদানকারী সাইন-ইন কার্ড প্রকাশ করতে না পারলে, আমরা স্ট্যাটাস কোড NOT_PUBLISHED_REQUIRES_SIGN_IN সহ updatePublishStatus API কল করার সাজেশন দিই

Kotlin

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

জাভা

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationsClusters

এই API-এর মাধ্যমে সাজেশন ক্লাস্টারের কন্টেন্ট মুছে ফেলা হয়।

Kotlin

client.deleteRecommendationsClusters()

জাভা

client.deleteRecommendationsClusters();

পরিষেবাটি অনুরোধ পেলে, এটি সাজেশন ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteFeaturedCluster

ফিচার করা ক্লাস্টারের কন্টেন্ট মুছে দিতে এই API ব্যবহার করা হয়।

Kotlin

client.deleteFeaturedCluster()

জাভা

client.deleteFeaturedCluster();

পরিষেবাটি অনুরোধ পেলে, এটি ফিচার করা ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteFoodShoppingCartCluster

এই API-এর মাধ্যমে ফুড শপিং কার্ট ক্লাস্টারের কন্টেন্ট মুছে ফেলা হয়।

Kotlin

client.deleteFoodShoppingCartCluster()

জাভা

client.deleteFoodShoppingCartCluster();

পরিষেবাটি অনুরোধ পেলে, এটি Food Shopping Cart Cluster থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteFoodShoppingListCluster

এই API, ফুড শপিং লিস্ট ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহার করা হয়।

Kotlin

client.deleteFoodShoppingListCluster()

জাভা

client.deleteFoodShoppingListCluster();

পরিষেবাটি অনুরোধ পেলে, এটি Food Shopping List Cluster থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteReorderCluster

FoodReorderCluster-এর কন্টেন্ট মুছে দিতে এই API ব্যবহার করা হয়।

Kotlin

client.deleteReorderCluster()

জাভা

client.deleteReorderCluster();

পরিষেবাটি অনুরোধ পেলে, এটি Reorder Cluster থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteUserManagementCluster

UserAccountManagement ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য এই API ব্যবহার করা হয়।

Kotlin

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

পরিষেবাটি অনুরোধ পেলে, এটি UserAccountManagement ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।

deleteClusters

প্রদত্ত ক্লাস্টার টাইপের কন্টেন্ট মুছে ফেলার জন্য এই API ব্যবহার করা হয়।

Kotlin

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 থ্রেডিং সংক্রান্ত সমস্যার কারণে টাস্ক এক্সিকিউট করা যায়নি। এই ক্ষেত্রে, এটি আবার চেষ্টা করা যেতে পারে।
4 SERVICE_CALL_PERMISSION_DENIED কলারকে পরিষেবা কল করার অনুমতি দেওয়া হয়নি।
5 SERVICE_CALL_INVALID_ARGUMENT অনুরোধে ভুল ডেটা আছে (যেমন, অনুমোদিত ক্লাস্টারের সংখ্যার চেয়ে বেশি)।
6 SERVICE_CALL_INTERNAL পরিষেবার দিকে কোনও সমস্যা হয়েছে।
7 SERVICE_CALL_RESOURCE_EXHAUSTED পরিষেবা কল খুব ঘন ঘন করা হয়।

ধাপ ৩: ব্রডকাস্ট ইনটেন্ট ম্যানেজ করা

জবের মাধ্যমে কন্টেন্ট প্রকাশ করার API কল করার পাশাপাশি, কন্টেন্ট প্রকাশের অনুরোধ পাওয়ার জন্য BroadcastReceiver সেট-আপ করতে হবে।

ব্রডকাস্ট ইনটেন্টের লক্ষ্য হল মূলত অ্যাপ আবার অ্যাক্টিভেট করা এবং ডেটা সিঙ্ক করতে বাধ্য করা। ব্রডকাস্ট ইনটেন্ট খুব ঘন ঘন পাঠানোর জন্য ডিজাইন করা হয়নি। এটি শুধুমাত্র তখনই ট্রিগার করা হয় যখন Engage পরিষেবা নির্ধারণ করে যে কন্টেন্টটি বাসি হতে পারে (যেমন, এক সপ্তাহ পুরনো)। এর ফলে, ব্যবহারকারী অনেকদিন ধরে অ্যাপ্লিকেশন ব্যবহার না করলেও, তিনি যে নতুন কন্টেন্ট দেখতে পাবেন, সেই ব্যাপারে আরও বেশি নিশ্চিত হওয়া যায়।

BroadcastReceiver অবশ্যই নিম্নলিখিত দুটি উপায়ে সেট-আপ করতে হবে:

  • Context.registerReceiver() ব্যবহার করে BroadcastReceiver ক্লাসের ইনস্ট্যান্স ডায়নামিক্যালি রেজিস্টার করুন। এটি মেমরিতে এখনও লাইভ আছে এমন অ্যাপ্লিকেশন থেকে কমিউনিকেশন চালু করে।

Kotlin

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

}
  • আপনার AndroidManifest.xml ফাইলে <receiver> ট্যাগ সহ স্ট্যাটিক্যালি একটি ইমপ্লিমেন্টেশন ঘোষণা করুন। এটি অ্যাপ্লিকেশনটিকে ব্রডকাস্ট ইনটেন্ট গ্রহণ করার অনুমতি দেয় যখন এটি চলছে না এবং অ্যাপ্লিকেশনটিকে কন্টেন্ট প্রকাশ করারও অনুমতি দেয়।

<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 এই ইনটেন্ট পাওয়ার সময় publishRecommendationClusters কল শুরু করার সাজেশন দেওয়া হয়।
  • com.google.android.engage.action.PUBLISH_FEATURED এই ইনটেন্ট পাওয়ার সময় publishFeaturedCluster কল শুরু করার সাজেশন দেওয়া হয়।
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CART এই ইনটেন্ট পাওয়ার সময় publishFoodShoppingCarts কল শুরু করার সাজেশন দেওয়া হয়।
  • com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST এই ইনটেন্ট পাওয়ার সময় publishFoodShoppingLists কল শুরু করার সাজেশন দেওয়া হয়।
  • com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER এই ইনটেন্ট পাওয়ার সময় publishReorderCluster কল শুরু করার সাজেশন দেওয়া হয়।

ইন্টিগ্রেশন ওয়ার্কফ্লো

ইন্টিগ্রেশন সম্পূর্ণ হওয়ার পরে সেটি যাচাই করার জন্য ধাপে-ধাপে গাইড পেতে, Engage ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

প্রায়শই জিজ্ঞাসিত প্রশ্নের জন্য Engage SDK-এর প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।

যোগাযোগ করুন

ইন্টিগ্রেশন প্রসেস চলাকালীন কোনও প্রশ্ন থাকলে, engage-developers@google.com-এর সাথে যোগাযোগ করুন। আমাদের টিম যত তাড়াতাড়ি সম্ভব উত্তর দেবে।

পরবর্তী ধাপ

এই ইন্টিগ্রেশন সম্পূর্ণ করার পরে, আপনার পরবর্তী ধাপগুলি নিম্নরূপ:

  • engage-developers@google.com-এ ইমেল পাঠান এবং Google-এর মাধ্যমে পরীক্ষা করার জন্য প্রস্তুত আপনার ইন্টিগ্রেটেড APK অ্যাটাচ করুন।
  • ইন্টিগ্রেশন যাতে প্রত্যাশা অনুযায়ী কাজ করে তা নিশ্চিত করতে Google ইন্টার্নালি যাচাই ও পর্যালোচনা করবে। কোনও পরিবর্তন করতে হলে, Google প্রয়োজনীয় বিবরণ সহ আপনার সাথে যোগাযোগ করবে।
  • টেস্টিং সম্পূর্ণ হয়ে গেলে এবং কোনও পরিবর্তন করার প্রয়োজন না থাকলে, Google আপনার সাথে যোগাযোগ করে জানাবে যে আপনি Play Store-এ আপডেট করা ও ইন্টিগ্রেট করা APK প্রকাশ করা শুরু করতে পারেন।
  • Google আপনার আপডেট করা APK Play Store-এ প্রকাশ করা হয়েছে বলে কনফার্ম করার পরে, আপনার সাজেশন, ফিচার করা, শপিং কার্ট, শপিং লিস্ট এবং আবার অর্ডার করুন ক্লাস্টার প্রকাশ করা হবে এবং ব্যবহারকারীরা দেখতে পাবেন।