Engage SDK Listen: তৃতীয় পক্ষের প্রযুক্তিগত ইন্টিগ্রেশন নির্দেশাবলী

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

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

একীকরণের বিবরণ

পরিভাষা

এই ইন্টিগ্রেশনে নিম্নলিখিত তিন ধরনের ক্লাস্টার অন্তর্ভুক্ত রয়েছে: রিকমেন্ডেশন , কন্টিনিউয়েশন এবং ফিচার্ড

  • সুপারিশ ক্লাস্টারগুলো কোনো একজন নির্দিষ্ট ডেভেলপার পার্টনারের তৈরি পড়ার জন্য ব্যক্তিগতকৃত কন্টেন্টের পরামর্শ দেখায়।

    আপনার সুপারিশগুলোর কাঠামোটি নিম্নরূপ:

    • সুপারিশ ক্লাস্টার: একটি UI ভিউ যেখানে একই ডেভেলপার পার্টনারের দেওয়া একাধিক সুপারিশ থাকে।

      চিত্র ১. বিনোদন স্থানের UI, যেখানে একজন অংশীদারের পক্ষ থেকে একটি সুপারিশ ক্লাস্টার দেখানো হচ্ছে।
    • এনটিটি: একটি ক্লাস্টারের কোনো একটি আইটেমকে প্রতিনিধিত্বকারী একটি অবজেক্ট। একটি এনটিটি হতে পারে একটি প্লেলিস্ট, একটি অডিওবুক, একটি পডকাস্ট এবং আরও অনেক কিছু। সমর্থিত এনটিটি টাইপগুলোর তালিকার জন্য ‘এনটিটি ডেটা সরবরাহ করুন’ বিভাগটি দেখুন।

      চিত্র ২. এন্টারটেইনমেন্ট স্পেস UI, যেখানে একজন পার্টনারের রিকমেন্ডেশন ক্লাস্টারের মধ্যে একটিমাত্র এনটিটি দেখানো হচ্ছে।
  • কন্টিনিউয়েশন ক্লাস্টার একাধিক ডেভেলপার পার্টনারের ব্যবহারকারীদের দ্বারা সম্প্রতি ব্যবহৃত অডিও কন্টেন্ট একটি একক UI গ্রুপে প্রদর্শন করে। প্রতিটি ডেভেলপার পার্টনারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বোচ্চ ১০টি এনটিটি সম্প্রচার করার অনুমতি দেওয়া হবে।

    চিত্র ৩। এন্টারটেইনমেন্ট স্পেস UI, যেখানে একাধিক পার্টনারের অসমাপ্ত সুপারিশসহ একটি কন্টিনিউয়েশন ক্লাস্টার দেখানো হচ্ছে (বর্তমানে কেবল একটি সুপারিশ দৃশ্যমান)।
  • ফিচার্ড ক্লাস্টার একাধিক ডেভেলপার পার্টনারের নির্বাচিত কিছু আইটেমকে একটি একক UI গ্রুপে প্রদর্শন করে। একটিমাত্র ফিচার্ড ক্লাস্টার থাকবে, যা UI-এর উপরের দিকে প্রদর্শিত হবে এবং সমস্ত রিকমেন্ডেশন ক্লাস্টারের উপরে অগ্রাধিকার পাবে। প্রতিটি ডেভেলপার পার্টনার ফিচার্ড ক্লাস্টারে সর্বোচ্চ ১০টি এনটিটি ব্রডকাস্ট করতে পারবেন।

    চিত্র ৪। এন্টারটেইনমেন্ট স্পেস UI, যেখানে একাধিক পার্টনারের সুপারিশসহ একটি ফিচার্ড ক্লাস্টার দেখানো হচ্ছে (বর্তমানে কেবল একটি সুপারিশ দৃশ্যমান)।

প্রাক-কাজ

সর্বনিম্ন এপিআই স্তর: ১৯

আপনার অ্যাপে 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'
}

সারসংক্ষেপ

ডিজাইনটি একটি বাউন্ড সার্ভিসের বাস্তবায়নের উপর ভিত্তি করে তৈরি।

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

Cluster type ক্লাস্টার সীমা একটি ক্লাস্টারে সত্তার সর্বোচ্চ সীমা
সুপারিশ ক্লাস্টার(গুলি) সর্বাধিক ৭ সর্বাধিক ৫০
ধারাবাহিকতা ক্লাস্টার সর্বাধিক ১ সর্বাধিক ২০
বৈশিষ্ট্যযুক্ত ক্লাস্টার সর্বাধিক ১ সর্বাধিক ২০

ধাপ ১: সত্তার তথ্য প্রদান করুন

এসডিকে প্রতিটি আইটেমের ধরন বোঝানোর জন্য বিভিন্ন এনটিটি সংজ্ঞায়িত করেছে। আমরা 'লিসেন' ক্যাটাগরির জন্য নিম্নলিখিত এনটিটিগুলো সমর্থন করি:

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. AudiobookEntity

নিচের চার্টগুলোতে প্রতিটি প্রকারের জন্য উপলব্ধ বৈশিষ্ট্য এবং প্রয়োজনীয়তাগুলো তুলে ধরা হয়েছে।

MusicAlbumEntity

MusicAlbumEntity অবজেক্টটি একটি মিউজিক অ্যালবামকে উপস্থাপন করে (উদাহরণস্বরূপ, টেইলর সুইফটের ' মিডনাইটস ')।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় সঙ্গীত অ্যালবামটির শিরোনাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
তথ্য পৃষ্ঠা ইউআরআই প্রয়োজনীয়

মিউজিক অ্যালবামটি সম্পর্কে বিস্তারিত জানতে প্রোভাইডার অ্যাপের ডিপ লিঙ্কটি দেখুন।

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

শিল্পীরা প্রয়োজনীয় সঙ্গীত অ্যালবামের শিল্পীদের তালিকা।
প্লেব্যাক ইউআরআই ঐচ্ছিক

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে অ্যালবামটি বাজানো শুরু করে।

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

বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
গানের সংখ্যা ঐচ্ছিক মিউজিক অ্যালবামটিতে গানের সংখ্যা।
ধরণ ঐচ্ছিক মিউজিক অ্যালবামের বিভিন্ন ধরনের সঙ্গীতের তালিকা।
অ্যালবাম ফরম্যাট ঐচ্ছিক

অ্যালবাম (এলপি এবং ডাবল এলপি অন্তর্ভুক্ত)

ইপি

একক

মিক্সটেপ

সঙ্গীতের লেবেল ঐচ্ছিক অ্যালবামটির সাথে সংশ্লিষ্ট মিউজিক লেবেলগুলোর তালিকা।
ডিভাইসে ডাউনলোড করা হয়েছে ঐচ্ছিক ডিভাইসে মিউজিক অ্যালবামটি ডাউনলোড করা হয়েছে কিনা, তা নির্দেশকারী বুলিয়ান।
সুস্পষ্ট ঐচ্ছিক

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

যেসব আইটেমে আপত্তিকর বিষয়বস্তু রয়েছে বা অভিভাবকীয় সতর্কতামূলক বিজ্ঞপ্তি আছে, সেগুলোকে TRUE-তে সেট করতে হবে। আপত্তিকর আইটেমগুলো একটি "E" ট্যাগ সহ প্রদর্শিত হয়।

মুক্তির তারিখ ঐচ্ছিক অ্যালবামটির মুক্তির তারিখ (ইপক মিলিসেকেন্ডে)।
সময়কাল ঐচ্ছিক অ্যালবামটির সময়কাল মিলিসেকেন্ডে।
শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

অগ্রগতির শতাংশ সম্পন্ন ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য প্রস্তাবিত।

০ থেকে ১০০ এর মধ্যে একটি পূর্ণসংখ্যা

MusicArtistEntity

MusicArtistEntity অবজেক্টটি একজন সঙ্গীতশিল্পীকে (যেমন, অ্যাডেল) প্রতিনিধিত্ব করে।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় সংগীত শিল্পীর নাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
তথ্য পৃষ্ঠা ইউআরআই প্রয়োজনীয়

সঙ্গীত শিল্পী সম্পর্কে বিস্তারিত জানতে প্রদানকারী অ্যাপের ডিপ লিঙ্কটি দেখুন।

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

প্লেব্যাক ইউআরআই ঐচ্ছিক

যে ডিপ লিঙ্কটি প্রোভাইডার অ্যাপে শিল্পীর গানগুলো বাজানো শুরু করে।

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

বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

MusicTrackEntity

MusicTrackEntity অবজেক্টটি একটি মিউজিক ট্র্যাকের প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, কোল্ডপ্লে-এর Yellow )।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় সঙ্গীত ট্র্যাকটির শিরোনাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
প্লেব্যাক ইউআরআই প্রয়োজনীয়

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে মিউজিক ট্র্যাকটি বাজানো শুরু করে।

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

শিল্পীরা প্রয়োজনীয় মিউজিক ট্র্যাকটির শিল্পীদের তালিকা।
তথ্য পৃষ্ঠা ইউআরআই ঐচ্ছিক

মিউজিক ট্র্যাকটি সম্পর্কে বিস্তারিত জানতে প্রোভাইডার অ্যাপের একটি ডিপ লিঙ্ক।

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

বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
সময়কাল ঐচ্ছিক ট্র্যাকটির সময়কাল মিলিসেকেন্ডে।
অ্যালবাম ঐচ্ছিক গানটি যে অ্যালবামের অন্তর্গত, সেই অ্যালবামের নাম।
ডিভাইসে ডাউনলোড করা হয়েছে ঐচ্ছিক ডিভাইসে মিউজিক ট্র্যাকটি ডাউনলোড করা হয়েছে কিনা তা নির্দেশকারী বুলিয়ান।
সুস্পষ্ট ঐচ্ছিক

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

যেসব আইটেমে আপত্তিকর বিষয়বস্তু রয়েছে বা অভিভাবকীয় সতর্কতামূলক বিজ্ঞপ্তি আছে, সেগুলোকে TRUE-তে সেট করতে হবে। আপত্তিকর আইটেমগুলো একটি "E" ট্যাগ সহ প্রদর্শিত হয়।

শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

অগ্রগতির শতাংশ সম্পন্ন ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য প্রস্তাবিত।

Integer between 0 and 100

MusicVideoEntity

MusicVideoEntity অবজেক্টটি একটি মিউজিক ভিডিওকে উপস্থাপন করে (উদাহরণস্বরূপ, The Weeknd - Take My Breath (Official Music Video) )।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় মিউজিক ভিডিওটির শিরোনাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
প্লেব্যাক ইউআরআই প্রয়োজনীয়

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে মিউজিক ভিডিওটি চালানো শুরু করে।

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

তথ্য পৃষ্ঠা ইউআরআই ঐচ্ছিক

মিউজিক ভিডিওটি সম্পর্কে বিস্তারিত জানতে প্রোভাইডার অ্যাপের একটি ডিপ লিঙ্ক।

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

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

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

যেসব আইটেমে আপত্তিকর বিষয়বস্তু রয়েছে বা অভিভাবকীয় সতর্কতামূলক বিজ্ঞপ্তি আছে, সেগুলোকে TRUE-তে সেট করতে হবে। আপত্তিকর আইটেমগুলো একটি "E" ট্যাগ সহ প্রদর্শিত হয়।

শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

অগ্রগতির শতাংশ সম্পন্ন ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য প্রস্তাবিত।

০ থেকে ১০০ এর মধ্যে একটি পূর্ণসংখ্যা

PlaylistEntity

PlaylistEntity অবজেক্টটি একটি মিউজিক প্লেলিস্টের প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, ইউএস টপ ১০ প্লেলিস্ট)।

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

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে মিউজিক প্লেলিস্টটি বাজানো শুরু করে।

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

তথ্য পৃষ্ঠা ইউআরআই ঐচ্ছিক

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

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

সময়কাল ঐচ্ছিক প্লেলিস্টটির সময়কাল মিলিসেকেন্ডে।
গানের সংখ্যা ঐচ্ছিক The number of songs in the music playlist.
বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
ডিভাইসে ডাউনলোড করা হয়েছে ঐচ্ছিক প্লেলিস্টটি ডিভাইসে ডাউনলোড করা হয়েছে কিনা তা নির্দেশকারী বুলিয়ান।
সুস্পষ্ট ঐচ্ছিক

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

যেসব আইটেমে আপত্তিকর বিষয়বস্তু রয়েছে বা অভিভাবকীয় সতর্কতামূলক বিজ্ঞপ্তি আছে, সেগুলোকে TRUE-তে সেট করতে হবে। আপত্তিকর আইটেমগুলো একটি "E" ট্যাগ সহ প্রদর্শিত হয়।

শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

অগ্রগতির শতাংশ সম্পন্ন ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য প্রস্তাবিত।

০ থেকে ১০০ এর মধ্যে একটি পূর্ণসংখ্যা

PodcastSeriesEntity

PodcastSeriesEntity অবজেক্টটি একটি পডকাস্ট সিরিজকে প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, This American Life )।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় পডকাস্ট সিরিজের শিরোনাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
তথ্য পৃষ্ঠা ইউআরআই প্রয়োজনীয়

পডকাস্ট সিরিজটি সম্পর্কে বিস্তারিত জানতে প্রোভাইডার অ্যাপের একটি ডিপ লিঙ্ক।

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

প্লেব্যাক ইউআরআই ঐচ্ছিক

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে পডকাস্ট সিরিজটি চালানো শুরু করে।

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

পর্বের সংখ্যা ঐচ্ছিক পডকাস্ট সিরিজটির পর্ব সংখ্যা।
প্রযোজনার নাম ঐচ্ছিক পডকাস্ট সিরিজটির প্রযোজনার নাম।
হোস্টরা ঐচ্ছিক পডকাস্ট সিরিজটির উপস্থাপকদের তালিকা।
ধরণ ঐচ্ছিক পডকাস্ট সিরিজের ধরণগুলোর তালিকা।
ডিভাইসে ডাউনলোড করা হয়েছে ঐচ্ছিক পডকাস্টটি ডিভাইসে ডাউনলোড করা হয়েছে কিনা তা নির্দেশকারী বুলিয়ান।
বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
সুস্পষ্ট ঐচ্ছিক

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

Items that contain explicit material or have a parental advisory warning should be set to TRUE. Explicit items appears with an "E" tag.

শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

PodcastEpisodeEntity

PodcastEpisodeEntity অবজেক্টটি একটি পডকাস্ট সিরিজকে উপস্থাপন করে (উদাহরণস্বরূপ, Spark Bird, Episode 754: This American Life )।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় পডকাস্ট পর্বটির শিরোনাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
প্লেব্যাক ইউআরআই প্রয়োজনীয়

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে পডকাস্ট পর্বটি চালানো শুরু করে।

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

পডকাস্ট সিরিজের শিরোনাম প্রয়োজনীয় পডকাস্ট সিরিজের নাম, যেটির অন্তর্গত এই পর্বটি।
সময়কাল প্রয়োজনীয় পডকাস্ট পর্বটির সময়কাল মিলিসেকেন্ডে।
প্রকাশের তারিখ প্রয়োজনীয় পডকাস্ট প্রকাশের তারিখ (ইপক মিলিসেকেন্ডে)
তথ্য পৃষ্ঠা ইউআরআই ঐচ্ছিক

পডকাস্ট পর্বটি সম্পর্কে বিস্তারিত জানতে প্রোভাইডার অ্যাপের একটি ডিপ লিঙ্ক।

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

প্রযোজনার নাম ঐচ্ছিক পডকাস্ট সিরিজটির প্রযোজনার নাম।
পর্ব সূচী ঐচ্ছিক সিরিজে পর্বটির সূচক (প্রথম সূচক হলো ১)।
হোস্টরা ঐচ্ছিক পডকাস্ট পর্বটির উপস্থাপকদের তালিকা।
ধরণ ঐচ্ছিক পডকাস্ট পর্বটির ধরণগুলোর তালিকা।
ডিভাইসে ডাউনলোড করা হয়েছে ঐচ্ছিক পডকাস্ট পর্বটি ডিভাইসে ডাউনলোড হয়েছে কিনা তা নির্দেশকারী বুলিয়ান।
বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
Video Podcast ঐচ্ছিক পডকাস্ট পর্বটিতে ভিডিও কন্টেন্ট আছে কিনা তা নির্দেশকারী বুলিয়ান।
সুস্পষ্ট ঐচ্ছিক

বিষয়বস্তুটি সুস্পষ্ট কি না, তা নির্দেশকারী একটি বুলিয়ান।

যেসব আইটেমে আপত্তিকর বিষয়বস্তু রয়েছে বা অভিভাবকীয় সতর্কতামূলক বিজ্ঞপ্তি আছে, সেগুলোকে TRUE-তে সেট করতে হবে। আপত্তিকর আইটেমগুলো একটি "E" ট্যাগ সহ প্রদর্শিত হয়।

পরবর্তী প্রকার শুনুন ঐচ্ছিক

ধারাবাহিকতা ক্লাস্টারের আইটেমগুলির জন্য প্রস্তাবিত

TYPE_CONTINUE - অসমাপ্ত অডিও আইটেম পুনরায় শুরু করুন।

TYPE_NEXT - ধারাবাহিকের নতুন একটি পর্বে চালিয়ে যান।

TYPE_NEW - সদ্য প্রকাশিত।

শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

অগ্রগতির শতাংশ সম্পন্ন ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য প্রস্তাবিত।

০ থেকে ১০০ এর মধ্যে একটি পূর্ণসংখ্যা

LiveRadioStationEntity

LiveRadioStationEntity অবজেক্টটি একটি লাইভ রেডিও স্টেশনকে প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, 98.1 The Breeze)।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয় সরাসরি সম্প্রচারিত রেডিও স্টেশনটির নাম।
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
প্লেব্যাক ইউআরআই প্রয়োজনীয়

একটি ডিপ লিঙ্ক যা প্রোভাইডার অ্যাপে রেডিও স্টেশনটি বাজানো শুরু করে।

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

তথ্য পৃষ্ঠা ইউআরআই ঐচ্ছিক

রেডিও স্টেশনটির বিস্তারিত তথ্যের জন্য প্রোভাইডার অ্যাপের একটি ডিপ লিঙ্ক।

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

ফ্রিকোয়েন্সি ঐচ্ছিক যে ফ্রিকোয়েন্সিতে রেডিও স্টেশনটি সম্প্রচার করা হয় (উদাহরণস্বরূপ, "৯৮.১ এফএম")।
শিরোনাম দেখান ঐচ্ছিক রেডিও স্টেশনে বর্তমানে যে অনুষ্ঠানটি বাজছে।
হোস্টরা ঐচ্ছিক List of hosts of the radio station.
বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
শেষ বাগদানের সময় ঐচ্ছিক

কন্টিনিউয়েশন ক্লাস্টারের আইটেমগুলোর জন্য সুপারিশকৃত। র‍্যাঙ্কিংয়ের জন্য ব্যবহার করা যেতে পারে।

ইপক মিলিসেকেন্ডে

AudiobookEntity

AudiobookEntity অবজেক্টটি একটি অডিওবুককে উপস্থাপন করে (উদাহরণস্বরূপ, মিশেল ওবামার লেখা ‘ Becoming ’ বইটির অডিওবুক)।

বৈশিষ্ট্য প্রয়োজনীয়তা নোট
নাম প্রয়োজনীয়
পোস্টারের ছবি প্রয়োজনীয় কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন।
লেখক প্রয়োজনীয় অন্তত একজন লেখকের নাম অবশ্যই উল্লেখ করতে হবে।
অ্যাকশন লিঙ্ক ইউআরআই প্রয়োজনীয়

অডিওবুকটির জন্য প্রদানকারী অ্যাপের ডিপ লিঙ্ক।

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

বর্ণনাকারী ঐচ্ছিক অন্তত একজন বর্ণনাকারীর নাম অবশ্যই উল্লেখ করতে হবে।
প্রকাশের তারিখ ঐচ্ছিক প্রদান করা হলে ইপক মিলিসেকেন্ডে।
বর্ণনা ঐচ্ছিক প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে।
মূল্য ঐচ্ছিক মুক্ত পাঠ্য
সময়কাল ঐচ্ছিক প্রদান করা হলে মানটি অবশ্যই ধনাত্মক হতে হবে।
ধরণ ঐচ্ছিক বইটির সাথে সম্পর্কিত সাহিত্য প্রকারের তালিকা।
সিরিজের নাম ঐচ্ছিক অডিওবুকটি যে সিরিজের অন্তর্গত তার নাম (উদাহরণস্বরূপ, হ্যারি পটার )।
সিরিজ একক সূচক ঐচ্ছিক সিরিজের অডিওবুকগুলোর সূচী, যেখানে ১ হলো সিরিজের প্রথম অডিওবুক। উদাহরণস্বরূপ, যদি 'হ্যারি পটার অ্যান্ড দ্য প্রিজনার অফ আজকাবান' সিরিজের ৩য় বই হয়, তবে এটি ৩-এ সেট করতে হবে।
বইয়ের ধরণ চালিয়ে যান ঐচ্ছিক

TYPE_CONTINUE - অসমাপ্ত বই পুনরায় শুরু করুন।

TYPE_NEXT - ধারাবাহিকের নতুন একটি পর্বে চালিয়ে যান।

TYPE_NEW - সদ্য প্রকাশিত।

শেষ বাগদানের সময় Conditionally required

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে।

ইপক মিলিসেকেন্ডে।

অগ্রগতির শতাংশ সম্পন্ন শর্তসাপেক্ষে আবশ্যক

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে।

নতুন কেনা অডিওবুকগুলো 'পড়া চালিয়ে যান' ক্লাস্টারের অংশ হতে পারে।

মান অবশ্যই ০-এর চেয়ে বেশি এবং ১০০-এর চেয়ে কম হতে হবে।

DisplayTimeWindow - কোনো কন্টেন্ট সারফেসে প্রদর্শিত হওয়ার জন্য একটি সময়সীমা নির্ধারণ করুন।
শুরুর সময় ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

ইপক মিলিসেকেন্ডে।

শেষ টাইমস্ট্যাম্প ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

ইপক মিলিসেকেন্ডে।

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

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

আকৃতির অনুপাত প্রয়োজনীয়তা Minimum pixels প্রস্তাবিত পিক্সেল
বর্গক্ষেত্র (১x১) প্রয়োজনীয় ৩০০x৩০০ ১২০০x১২০০
ভূদৃশ্য (১.৯১x১) ঐচ্ছিক ৬০০x৩১৪ ১২০০x৬২৮
প্রতিকৃতি (৪x৫) ঐচ্ছিক ৪৮০x৬০০ ৯৬০x১২০০

ফাইল ফরম্যাট

PNG, JPG, স্ট্যাটিক GIF, WebP

সর্বোচ্চ ফাইলের আকার

৫১২০ কেবি

অতিরিক্ত সুপারিশ

  • ছবির নিরাপদ এলাকা: আপনার গুরুত্বপূর্ণ বিষয়বস্তু ছবির মাঝের ৮০% অংশে রাখুন।

উদাহরণ

MusicAlbumEntity musicAlbumEntity =
        new MusicAlbumEntity.Builder()
            .setName(NAME)
             .addPosterImage(new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(960)
                  .setImageWidthInPixel(408)
                  .build())
            .setPlayBackUri("https://play.google/album/play")
            .setInfoPageUri("https://play.google/album/info")
            .setDescription("A description of this album.")
            .addArtist("Artist")
            .addGenre("Genre")
            .addMusicLabel("Label")
            .addContentRating("Rating")
            .setSongsCount(960)
            .setReleaseDateEpochMillis(1633032895L)
            .setDurationMillis(1633L)
            .build();
AudiobookEntity audiobookEntity =
        new AudiobookEntity.Builder()
            .setName("Becoming")
            .addPosterImage(new Image.Builder()
                 .setImageUri(Uri.parse("http://www.x.com/image.png"))
                 .setImageHeightInPixel(960)
                 .setImageWidthInPixel(408)
                  .build())
            .addAuthor("Michelle Obama")
            .addNarrator("Michelle Obama")
            .setActionLinkUri(
               Uri.parse("https://play.google/audiobooks/1"))
            .setDurationMillis(16335L)
            .setPublishDateEpochMillis(1633032895L)
            .setDescription("An intimate, powerful, and inspiring memoir")
            .setPrice("$16.95")
            .addGenre("biography")
            .build();

ধাপ ২: ক্লাস্টার ডেটা প্রদান করুন

কন্টেন্ট পাবলিশ করার কাজটি ব্যাকগ্রাউন্ডে (যেমন, WorkManager ব্যবহার করে) সম্পাদন করার এবং নিয়মিতভাবে বা কোনো নির্দিষ্ট ইভেন্টের ভিত্তিতে (যেমন, প্রতিবার ব্যবহারকারী অ্যাপটি খুললে অথবা যখন ব্যবহারকারী তার কার্টে কিছু যোগ করেন) শিডিউল করার পরামর্শ দেওয়া হয়।

AppEngagePublishClient ক্লাস্টার প্রকাশ করার জন্য দায়ী। ক্লায়েন্টে নিম্নলিখিত API-গুলো উপলব্ধ আছে:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

পরিষেবাটি ইন্টিগ্রেশনের জন্য উপলব্ধ কিনা এবং কন্টেন্টটি ডিভাইসে প্রদর্শন করা যাবে কিনা, তা যাচাই করতে এই এপিআইটি ব্যবহৃত হয়।

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

ক্লাস্টার টাইপ ক্লাস্টার টাইপ ধ্রুবক পূর্ণসংখ্যার মান
অজানা TYPE_UNKNOWN
সুপারিশ ক্লাস্টার TYPE_RECOMMENDATION
বৈশিষ্ট্যযুক্ত ক্লাস্টার TYPE_FEATURED
ধারাবাহিকতা ক্লাস্টার TYPE_CONTINUATION
ব্যবহারকারী ব্যবস্থাপনা ক্লাস্টার TYPE_ENGAGEMENT
সাবস্ক্রিপশন ক্লাস্টার 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 সার্ভিসটিকে মাঝে মাঝে চালু ও বন্ধ করে। এই বিরতিহীন কন্টেন্ট গ্রহণের কৌশলটি সম্ভব হলেও, এটি ব্যবহারকারী এবং প্রোডাক্ট উভয়ের উপরই নেতিবাচক প্রভাব ফেলে – পুরনো কন্টেন্ট দেখানো হয় না এবং কিছু সারফেস একেবারেই সার্ভ করা হয় না।

v1.6.0 থেকে শুরু করে, Engage SDK নির্দিষ্ট ক্লাস্টার টাইপের প্রাপ্যতা যাচাই করার সুযোগ দেয়। এটি আরও বেশি নমনীয়তা প্রদান করে, যার ফলে যদি কোনো নির্দিষ্ট অ্যাপ্লিকেশন ইন্টারমিটেন্ট কন্টেন্ট স্ট্র্যাটেজি গ্রহণ করে, তবে কিছু ক্লাস্টার টাইপ সেই ইন্টারমিটেন্ট স্ট্র্যাটেজি অনুসরণ করতে পারে, অন্যদিকে অন্য ক্লাস্টার টাইপগুলো সর্বদা সক্রিয় থাকে (যেমন কন্টিনিউয়েশন ক্লাস্টার)।

যেকোনো কারণে যদি সমস্ত সমর্থিত ডিভাইসে Engage পরিষেবাটি 'ধারাবাহিকভাবে' সক্রিয় না থাকে এবং কোনো নির্দিষ্ট ডিভাইসের সেটের জন্য এটি সবিরাম ইনজেশনের জন্য কনফিগার করা থাকে, তাহলে ডিফল্ট কনফিগারেশন অনুযায়ী সমস্ত কন্টিনিউয়েশন ক্লাস্টার পাবলিকেশন (যেমন Continue Listening) সক্রিয় থাকবে এবং বাকি ক্লাস্টার টাইপগুলো সবিরামভাবে সক্রিয় ও নিষ্ক্রিয় হবে। যদি সবিরাম ইনজেশন আপনার ক্ষেত্রে প্রযোজ্য হয় কিন্তু এই ডিফল্ট কনফিগারেশনটি আপনার প্রয়োজনের জন্য উপযুক্ত না হয়, তাহলে অনুগ্রহ করে engage-developers@google.com-এ যোগাযোগ করুন।

v1.6.0 (অপ্রচলিত)-এর পূর্ববর্তী SDK সংস্করণগুলির জন্য

কোটলিন

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

জাভা

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

publishRecommendationClusters

এই এপিআইটি RecommendationCluster অবজেক্টগুলোর একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।

কোটলিন

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build())

জাভা

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build());

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

  • ডেভেলপার পার্টনারের বিদ্যমান RecommendationCluster ডেটা মুছে ফেলা হয়েছে।
  • অনুরোধ থেকে প্রাপ্ত ডেটা পার্স করে আপডেট করা রিকমেন্ডেশন ক্লাস্টারে সংরক্ষণ করা হয়।

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

publishFeaturedCluster

এই এপিআইটি FeaturedCluster অবজেক্টগুলোর একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।

কোটলিন

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

জাভা

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

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

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

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

publishContinuationCluster

এই এপিআইটি একটি ContinuationCluster অবজেক্ট প্রকাশ করতে ব্যবহৃত হয়।

কোটলিন

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

জাভা

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

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

  • ডেভেলপার পার্টনারের বিদ্যমান ContinuationCluster ডেটা মুছে ফেলা হয়েছে।
  • অনুরোধ থেকে প্রাপ্ত ডেটা পার্স করে আপডেট করা কন্টিনিউয়েশন ক্লাস্টারে সংরক্ষণ করা হয়।

In case of an error, the entire request is rejected and the existing state is maintained.

publishUserAccountManagementRequest

এই এপিআইটি একটি সাইন ইন কার্ড প্রকাশ করতে ব্যবহৃত হয়। সাইন ইন অ্যাকশনটি ব্যবহারকারীদের অ্যাপের সাইন ইন পৃষ্ঠায় নিয়ে যায়, যাতে অ্যাপটি কন্টেন্ট প্রকাশ করতে (বা আরও ব্যক্তিগতকৃত কন্টেন্ট সরবরাহ করতে) পারে।

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

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা
অ্যাকশন উরি প্রয়োজনীয় অ্যাকশনের জন্য ডিপলিঙ্ক (অর্থাৎ অ্যাপ সাইন ইন পেজে নিয়ে যায়)
ছবি ঐচ্ছিক - প্রদান করা না হলে, শিরোনাম অবশ্যই প্রদান করতে হবে।

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

1264x712 রেজোলিউশনের 16x9 অ্যাসপেক্ট রেশিওর ছবি

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

কোটলিন

var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

জাভা

SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

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

  • ডেভেলপার পার্টনারের বিদ্যমান UserAccountManagementCluster ডেটা মুছে ফেলা হয়েছে।
  • অনুরোধ থেকে প্রাপ্ত ডেটা পার্স করে আপডেট করা UserAccountManagementCluster ক্লাস্টারে সংরক্ষণ করা হয়।

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

updatePublishStatus

যদি কোনো অভ্যন্তরীণ ব্যবসায়িক কারণে কোনো ক্লাস্টারই প্রকাশিত না হয়, তাহলে আমরা updatePublishStatus API ব্যবহার করে প্রকাশনার অবস্থা হালনাগাদ করার জন্য দৃঢ়ভাবে সুপারিশ করছি । এটি গুরুত্বপূর্ণ কারণ:

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

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

// 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

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

কোটলিন

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

জাভা

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

deleteRecommendationClusters

এই এপিআইটি রিকমেন্ডেশন ক্লাস্টারগুলোর কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteRecommendationClusters()

জাভা

client.deleteRecommendationClusters();

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

deleteFeaturedCluster

এই এপিআইটি ফিচার্ড ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteFeaturedCluster()

জাভা

client.deleteFeaturedCluster();

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

deleteContinuationCluster

এই এপিআইটি কন্টিনিউয়েশন ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteContinuationCluster()

জাভা

client.deleteContinuationCluster();

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

deleteUserManagementCluster

এই এপিআইটি UserAccountManagement ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

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

deleteClusters

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

কোটলিন

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

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

ত্রুটি পরিচালনা

পাবলিশ এপিআই (publish 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 সার্ভিস কলটি খুব ঘন ঘন করা হয়।

ধাপ ৩: ব্রডকাস্ট ইন্টেন্ট পরিচালনা করুন

একটি জবের মাধ্যমে কন্টেন্ট পাবলিশ এপিআই কল করার পাশাপাশি, কন্টেন্ট পাবলিশের অনুরোধ গ্রহণ করার জন্য একটি BroadcastReceiver সেট আপ করা প্রয়োজন।

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

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 continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

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

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

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

জাভা

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

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

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

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

}
  • Statically declare an implementation with the <receiver> tag in your AndroidManifest.xml file. This allows the application to receive broadcast intents when it is not running, and also allows the application to publish the content.

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

পরিষেবাটির পক্ষ থেকে নিম্নলিখিত অভিপ্রায়গুলো পাঠানো হবে:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION এই ইন্টেন্টটি গ্রহণ করার সময় একটি publishRecommendationClusters কল শুরু করার পরামর্শ দেওয়া হয়।
  • com.google.android.engage.action.PUBLISH_FEATURED এই ইন্টেন্টটি গ্রহণ করার সময় একটি publishFeaturedCluster কল শুরু করার পরামর্শ দেওয়া হয়।
  • com.google.android.engage.action.PUBLISH_CONTINUATION এই ইন্টেন্টটি গ্রহণ করার পর একটি publishContinuationCluster কল শুরু করার পরামর্শ দেওয়া হয়।

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

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

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

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

যোগাযোগ করুন

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

পরবর্তী পদক্ষেপ

After completing this integration, your next steps are as follows:

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