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

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

এই গাইডে ডেভেলপার পার্টনারদের জন্য তাদের ভিডিও কন্টেন্ট ইন্টিগ্রেট করার নির্দেশাবলী রয়েছে, Engage SDK ব্যবহার করে এই নতুন সারফেস এরিয়া এবং আগে থেকে থাকা Google সারফেস উভয়ই পপুলেট করতে।

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

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

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

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

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

পরিভাষা

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

  • সাজেশন ক্লাস্টার কোনও একজন ডেভেলপার পার্টনারের থেকে দেখার জন্য কন্টেন্টের পছন্দমতো সাজেশন দেখায়।

    আপনার সাজেশন নিম্নলিখিত স্ট্রাকচার অনুযায়ী তৈরি হয়:

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

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

      ছবি ২. Entertainment Space UI-তে একটি পার্টনারের সাজেশন ক্লাস্টারের মধ্যে একটি এন্টিটি দেখানো হচ্ছে।
  • চালিয়ে যান ক্লাস্টার, একটি UI গ্রুপিংয়ে একাধিক ডেভেলপার পার্টনারের থেকে অসম্পূর্ণ ভিডিও এবং প্রাসঙ্গিক নতুন রিলিজ হওয়া পর্ব দেখায়। প্রত্যেক ডেভেলপার পার্টনারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বাধিক ১০টি এন্টিটি ব্রডকাস্ট করার অনুমতি দেওয়া হবে। গবেষণায় দেখা গেছে যে পছন্দমতো সাজেশন ও পছন্দমতো কন্টিনিউয়েশন কন্টেন্ট একসাথে ব্যবহার করলে ব্যবহারকারীর এনগেজমেন্ট সবচেয়ে ভালো হয়।

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

    ছবি ৪. Entertainment Space 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'
}

আরও তথ্যের জন্য, Android 11-এ প্যাকেজের দৃশ্যমানতা দেখুন।

সারাংশ

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

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

ক্লাস্টারের ধরন ক্লাস্টারের সীমা একটি ক্লাস্টারে সর্বাধিক এন্টিটি সীমা
সাজেশন ক্লাস্টার সর্বাধিক ৭টি সর্বাধিক ৫০টি
কন্টিনিউয়েশন ক্লাস্টার সর্বাধিক ১টি সর্বাধিক ২০টি
ফিচার করা ক্লাস্টার সর্বাধিক ১টি সর্বাধিক ২০টি

ধাপ ০: আগে থেকে থাকা Media Home SDK ইন্টিগ্রেশন থেকে মাইগ্রেট করা

এই বিভাগে আপনার আগে থেকে থাকা Media Home SDK ডেটা মডেল এবং API কল Engage SDK-তে কীভাবে মাইগ্রেট করবেন তার রূপরেখা দেওয়া হয়েছে।

আগে থেকে থাকা ইন্টিগ্রেশন থেকে ডেটা মডেল ম্যাপ করুন

আপনি যদি আগে থেকে থাকা মিডিয়া হোম ইন্টিগ্রেশন থেকে মাইগ্রেট করেন, তাহলে নিম্নলিখিত সারণীতে আগে থেকে থাকা SDK-তে ডেটা মডেলকে নতুন Engage SDK-তে কীভাবে ম্যাপ করতে হয় তা উল্লেখ করা আছে:

MediaHomeVideoContract ইন্টিগ্রেশনের সমতুল্য Engage SDK ইন্টিগ্রেশনের সমতুল্য
com.google.android.mediahome.video.PreviewChannel com.google.android.engage.common.datamodel.RecommendationCluster
com.google.android.mediahome.video.PreviewChannel.Builder com.google.android.engage.common.datamodel.RecommendationCluster.Builder
com.google.android.mediahome.video.PreviewChannelHelper com.google.android.engage.video.service.AppEngageVideoClient
com.google.android.mediahome.video.PreviewProgram আলাদা আলাদা ক্লাসে ভাগ করা হয়েছে: EventVideo, LiveStreamingVideo, Movie, TvEpisode, TvSeason, TvShow, VideoClipEntity
com.google.android.mediahome.video.PreviewProgram.Builder আলাদা ক্লাসে বিল্ডারে বিভক্ত: EventVideo, LiveStreamingVideo, Movie, TvEpisode, TvSeason, TvShow, VideoClipEntity
com.google.android.mediahome.video.VideoContract আর প্রয়োজন নেই।
com.google.android.mediahome.video.WatchNextProgram আলাদা ক্লাসে অ্যাট্রিবিউটে ভাগ করা হয়েছে: EventVideoEntity, LiveStreamingVideoEntity, MovieEntity, TvEpisodeEntity, TvSeasonEntity, TvShowEntity, VideoClipEntity
com.google.android.mediahome.video.WatchNextProgram.Builder আলাদা ক্লাসে অ্যাট্রিবিউটে ভাগ করা হয়েছে: EventVideoEntity, LiveStreamingVideoEntity, MovieEntity, TvEpisodeEntity, TvSeasonEntity, TvShowEntity, VideoClipEntity

Engage SDK-এর তুলনায় Media Home SDK-তে ক্লাস্টার প্রকাশ করা

Media Home SDK-এর মাধ্যমে, ক্লাস্টার এবং এন্টিটি আলাদা API-এর মাধ্যমে প্রকাশ করা হয়েছে:

// 1. Fetch existing channels
List<PreviewChannel> channels = PreviewChannelHelper.getAllChannels();

// 2. If there are no channels, publish new channels
long channelId = PreviewChannelHelper.publishChannel(builder.build());

// 3. If there are existing channels, decide whether to update channel contents
PreviewChannelHelper.updatePreviewChannel(channelId, builder.build());

// 4. Delete all programs in the channel
PreviewChannelHelper.deleteAllPreviewProgramsByChannelId(channelId);

// 5. publish new programs in the channel
PreviewChannelHelper.publishPreviewProgram(builder.build());

Engage SDK-এর মাধ্যমে, ক্লাস্টার এবং এন্টিটি প্রকাশনা একটি API কলে একত্রিত করা হয়। একটি ক্লাস্টারের অন্তর্গত সমস্ত এন্টিটি সেই ক্লাস্টারের সাথে একসাথে প্রকাশিত হয়:

Kotlin

RecommendationCluster.Builder()
            .addEntity(MOVIE_ENTITY)
            .addEntity(MOVIE_ENTITY)
            .addEntity(MOVIE_ENTITY)
            .setTitle("Top Picks For You")
            .build()

জাভা

new RecommendationCluster.Builder()
                        .addEntity(MOVIE_ENTITY)
                        .addEntity(MOVIE_ENTITY)
                        .addEntity(MOVIE_ENTITY)
                        .setTitle("Top Picks For You")
                        .build();

ধাপ ১: এন্টিটি ডেটা প্রদান করুন

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

  1. MovieEntity
  2. TvShowEntity
  3. TvSeasonEntity
  4. TvEpisodeEntity
  5. LiveStreamingVideoEntity
  6. VideoClipEntity

নিচের চার্টে প্রতিটি ধরনের অ্যাট্রিবিউট ও প্রয়োজনীয়তার বিবরণ দেওয়া হয়েছে।

MovieEntity

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

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

প্লেব্যাক uri প্রয়োজনীয়

মুভি চালানো শুরু করার জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

তথ্য পৃষ্ঠার uri ঐচ্ছিক

সিনেমা সম্পর্কে বিস্তারিত তথ্য দেখানোর জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

রিলিজের তারিখ ঐচ্ছিক Epoch মিলিসেকেন্ডে।
উপলভ্যতা প্রয়োজনীয়

উপলভ্য: ব্যবহারকারী কোনও অতিরিক্ত অ্যাকশন ছাড়াই কন্টেন্ট দেখতে পাবেন।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী সাবস্ক্রিপশন কেনার পরে কন্টেন্ট উপলভ্য হয়।

PAID_CONTENT: কন্টেন্টটি ব্যবহারকারীকে কিনতে বা ভাড়া নিতে হবে।

কেনা হয়েছে: ব্যবহারকারী কন্টেন্ট কিনেছেন বা ভাড়া নিয়েছেন।

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

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর ভ্যালু CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

TvShowEntity

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

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

তথ্য পৃষ্ঠার uri প্রয়োজনীয়

টিভি শোয়ের বিবরণ দেখানোর জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

প্লেব্যাক uri ঐচ্ছিক

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

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

প্রথম পর্ব সম্প্রচারের তারিখ ঐচ্ছিক Epoch মিলিসেকেন্ডে।
লেটেস্ট এপিসোড সম্প্রচারের তারিখ ঐচ্ছিক Epoch মিলিসেকেন্ডে।
উপলভ্যতা প্রয়োজনীয়

উপলভ্য: ব্যবহারকারী কোনও অতিরিক্ত অ্যাকশন ছাড়াই কন্টেন্ট দেখতে পাবেন।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী সাবস্ক্রিপশন কেনার পরে কন্টেন্ট উপলভ্য হয়।

PAID_CONTENT: কন্টেন্টটি ব্যবহারকারীকে কিনতে বা ভাড়া নিতে হবে।

কেনা হয়েছে: ব্যবহারকারী কন্টেন্ট কিনেছেন বা ভাড়া নিয়েছেন।

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

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর ভ্যালু CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

TvSeasonEntity

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

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

তথ্য পৃষ্ঠার uri প্রয়োজনীয়

টিভি শো সিজনের বিবরণ দেখানোর জন্য প্রদানকারী অ্যাপের ডিপ লিঙ্ক।

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

প্লেব্যাক uri ঐচ্ছিক

টিভি শো সিজন চালানো শুরু করার জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

সিজন নম্বর দেখান

ঐচ্ছিক

v1.3.1-এ উপলভ্য

স্ট্রিং
প্রথম পর্ব সম্প্রচারের তারিখ ঐচ্ছিক Epoch মিলিসেকেন্ডে।
লেটেস্ট এপিসোড সম্প্রচারের তারিখ ঐচ্ছিক Epoch মিলিসেকেন্ডে।
উপলভ্যতা প্রয়োজনীয়

উপলভ্য: ব্যবহারকারী কোনও অতিরিক্ত অ্যাকশন ছাড়াই কন্টেন্ট দেখতে পাবেন।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী সাবস্ক্রিপশন কেনার পরে কন্টেন্ট উপলভ্য হয়।

PAID_CONTENT: কন্টেন্টটি ব্যবহারকারীকে কিনতে বা ভাড়া নিতে হবে।

কেনা হয়েছে: ব্যবহারকারী কন্টেন্ট কিনেছেন বা ভাড়া নিয়েছেন।

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

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর ভ্যালু CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

TvEpisodeEntity

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

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

প্লেব্যাক uri প্রয়োজনীয়

এপিসোড চালানো শুরু করার জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

তথ্য পৃষ্ঠার uri ঐচ্ছিক

টিভি শোয়ের পর্ব সম্পর্কে বিস্তারিত তথ্য দেখানোর জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

এপিসোড নম্বর দেখান

ঐচ্ছিক

v1.3.1-এ উপলভ্য

স্ট্রিং
সম্প্রচারের তারিখ প্রয়োজনীয় Epoch মিলিসেকেন্ডে।
উপলভ্যতা প্রয়োজনীয়

উপলভ্য: ব্যবহারকারী কোনও অতিরিক্ত অ্যাকশন ছাড়াই কন্টেন্ট দেখতে পাবেন।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী সাবস্ক্রিপশন কেনার পরে কন্টেন্ট উপলভ্য হয়।

PAID_CONTENT: কন্টেন্টটি ব্যবহারকারীকে কিনতে বা ভাড়া নিতে হবে।

কেনা হয়েছে: ব্যবহারকারী কন্টেন্ট কিনেছেন বা ভাড়া নিয়েছেন।

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

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর ভ্যালু CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

LiveStreamingVideoEntity

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

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

প্লেব্যাক uri প্রয়োজনীয়

ভিডিও চালানো শুরু করার জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

সম্প্রচারকারী প্রয়োজনীয় ফ্রি টেক্সট
শুরুর সময় ঐচ্ছিক Epoch মিলিসেকেন্ডে।
বন্ধ হওয়ার সময় ঐচ্ছিক Epoch মিলিসেকেন্ডে।
যতবার দেখা হয়েছে ঐচ্ছিক ফ্রি টেক্সট, স্থানীয়করণ করতে হবে।
কল টু অ্যাকশন টেক্সট ঐচ্ছিক কল টু অ্যাকশন হিসেবে দেখানোর জন্য ফ্রি টেক্সট।
ট্যাগ ঐচ্ছিক সত্তাটির সাথে যুক্ত ট্যাগের তালিকা।
পরবর্তী ধরন দেখুন শর্তসাপেক্ষে প্রয়োজন

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর মান CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

VideoClipEntity

VideoClipEntity অবজেক্টটি সোশ্যাল মিডিয়া থেকে আসা ভিডিও এন্টিটিকে দেখায়, যেমন TikTok বা YouTube।

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

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

প্লেব্যাক uri প্রয়োজনীয়

ভিডিও চালানো শুরু করার জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক।

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

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

আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি প্রদান করতে হবে এবং নিম্নলিখিত চারটি ধরনের মধ্যে একটি হতে হবে:

CONTINUE: ব্যবহারকারী এই কন্টেন্ট ইতিমধ্যেই ১ মিনিটের বেশি সময় ধরে দেখেছেন।

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

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

ওয়াচলিস্ট: ব্যবহারকারী স্পষ্টভাবে কোনও সিনেমা, ইভেন্ট বা সিরিজ ওয়াচলিস্টে যোগ করার জন্য বেছে নিয়েছেন, যাতে তিনি পরে কী দেখতে চান তা ম্যানুয়ালি কিউরেট করতে পারেন।

শেষবার এনগেজ হওয়ার সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।
শেষ প্লেব্যাক পজিশনের সময় শর্তসাপেক্ষে প্রয়োজন আইটেমটি Continuation ক্লাস্টারে থাকলে এবং WatchNextType-এর ভ্যালু CONTINUE হলে, এটি প্রদান করতে হবে। Epoch মিলিসেকেন্ডে।

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

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

ফাইলের ফর্ম্যাট

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

ফাইলের সর্বাধিক সাইজ

৫১২০ কেবি

অতিরিক্ত সাজেশন

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

উদাহরণ

Kotlin

var movie = MovieEntity.Builder()
    .setName("Avengers")
    .addPosterImage(Image.Builder()
                          .setImageUri(Uri.parse("http://www.x.com/image.png"))
                          .setImageHeightInPixel(960)
                          .setImageWidthInPixel(408)
                          .build())
    .setPlayBackUri(Uri.parse("http://tv.com/playback/1"))
    .setReleaseDateEpochMillis(1633032895L)
    .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE)
    .setDurationMillis(12345678L)
    .addGenre("action")
    .addContentRating("R")
    .setWatchNextType(WatchNextType.TYPE_NEW)
    .setLastEngagementTimeMillis(1664568895L)
    .setCallToActionText("Watch Now")
    .addTag("Action")
    .build()

জাভা

MovieEntity movie = new MovieEntity.Builder()
                  .setName("Avengers")
                  .addPosterImage(
                      new Image.Builder()
                          .setImageUri(Uri.parse("http://www.x.com/image.png"))
                          .setImageHeightInPixel(960)
                          .setImageWidthInPixel(408)
                          .build())
                  .setPlayBackUri(Uri.parse("http://tv.com/playback/1"))
                  .setReleaseDateEpochMillis(1633032895L)
                  .setAvailability(ContentAvailability.AVAILABILITY_AVAILABLE)
                  .setDurationMillis(12345678L)
                  .addGenre("action")
                  .addContentRating("R")
                  .setWatchNextType(WatchNextType.TYPE_NEW)
                  .setLastEngagementTimeMillis(1664568895L)
                  .setCallToActionText("Watch Now")
                  .addTag("Action")
                  .build();

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

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

AppEngagePublishClient ক্লাস্টার প্রকাশ করার জন্য দায়বদ্ধ। ক্লায়েন্টে নিম্নলিখিত API উপলভ্য:

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

isServiceAvailable

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

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

ক্লাস্টারের ধরন ক্লাস্টারের ধরন কনস্ট্যান্ট পূর্ণসংখ্যার মান
অজানা TYPE_UNKNOWN 0
সাজেশন ক্লাস্টার TYPE_RECOMMENDATION 1
ফিচার করা ক্লাস্টার TYPE_FEATURED 2
কন্টিনিউয়েশন ক্লাস্টার TYPE_CONTINUATION 3
ব্যবহারকারী ম্যানেজমেন্ট ক্লাস্টার 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 ব্যবহার করা হয়।

Kotlin

client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("Top Picks For You")
            .build()
        )
        .build()
    )

জাভা

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Top Picks For You")
                        .build())
                .build());

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

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

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

publishFeaturedCluster

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

Kotlin

client.publishFeaturedCluster(
    PublishFeaturedClusterRequest.Builder()
      .setFeaturedCluster(
        FeaturedCluster.Builder()
          .addEntity(entity1)
          .addEntity(entity2)
          .build())
      .build())

জাভা

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

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

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

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

publishContinuationCluster

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

Kotlin

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

জাভা

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

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

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

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

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

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

জাভা

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin

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

জাভা

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

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

সমস্যা ম্যানেজ করা

প্রকাশিত API থেকে টাস্কের ফলাফল শোনার জন্য অত্যন্ত সাজেস্ট করা হয় যাতে একটি সফল টাস্ক রিকভার ও আবার জমা দেওয়ার জন্য ফলো-আপ অ্যাকশন নেওয়া যেতে পারে।

Kotlin

client.publishRecommendationClusters(
        PublishRecommendationClustersRequest.Builder()
          .addRecommendationCluster(..)
          .build())
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          // do something
        } else {
          val exception = task.exception
          if (exception is AppEngageException) {
            @AppEngageErrorCode val errorCode = exception.errorCode
            if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
              // do something
            }
          }
        }
      }

জাভা

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

সমস্যাটি AppEngageException হিসেবে দেখানো হয় এবং এর কারণ হিসেবে সমস্যার কোড উল্লেখ করা থাকে।

সমস্যার কোড সমস্যার নাম মনে রাখবেন
1 SERVICE_NOT_FOUND প্রদত্ত ডিভাইসে পরিষেবাটি উপলভ্য নয়।
2 SERVICE_NOT_AVAILABLE পরিষেবাটি প্রদত্ত ডিভাইসে উপলভ্য, তবে কল করার সময় এটি উপলভ্য নয় (যেমন, এটি স্পষ্টভাবে বন্ধ করা আছে)।
3 SERVICE_CALL_EXECUTION_FAILURE থ্রেডিং সংক্রান্ত সমস্যার কারণে টাস্ক এক্সিকিউট করা যায়নি। এই ক্ষেত্রে, এটি আবার চেষ্টা করা যেতে পারে।
4 SERVICE_CALL_PERMISSION_DENIED কলারকে পরিষেবা কল করার অনুমতি দেওয়া হয়নি।
5 SERVICE_CALL_INVALID_ARGUMENT অনুরোধে ভুল ডেটা আছে (যেমন, অনুমোদিত ক্লাস্টারের সংখ্যার চেয়ে বেশি)।
6 SERVICE_CALL_INTERNAL পরিষেবার দিকে কোনও সমস্যা হয়েছে।
7 SERVICE_CALL_RESOURCE_EXHAUSTED পরিষেবা কল খুব ঘন ঘন করা হয়।

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

জবের মাধ্যমে কন্টেন্ট প্রকাশ করার 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 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);

}
  • আপনার 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.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-এর সাথে যোগাযোগ করুন।

পরবর্তী ধাপ

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

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