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

Google একটি অন-ডিভাইস পৃষ্ঠ তৈরি করছে যা ব্যবহারকারীদের অ্যাপগুলিকে উল্লম্বভাবে সংগঠিত করে এবং ব্যক্তিগতকৃত অ্যাপ সামগ্রী ব্যবহার এবং আবিষ্কারের জন্য একটি নতুন নিমজ্জিত অভিজ্ঞতা সক্ষম করে৷ এই ফুলস্ক্রিন অভিজ্ঞতা ডেভেলপার অংশীদারদের তাদের অ্যাপের বাইরে একটি ডেডিকেটেড চ্যানেলে তাদের সেরা সমৃদ্ধ সামগ্রী প্রদর্শন করার সুযোগ দেয়।

এই নির্দেশিকাটিতে বিকাশকারী অংশীদারদের তাদের ভিডিও বিষয়বস্তু সংহত করার নির্দেশাবলী রয়েছে, এই নতুন পৃষ্ঠ এলাকা এবং বিদ্যমান Google সারফেস উভয়ই পূরণ করতে Engage SDK ব্যবহার করে৷

ইন্টিগ্রেশন বিস্তারিত

পরিভাষা

এই ইন্টিগ্রেশনে নিম্নলিখিত তিনটি ক্লাস্টার প্রকার রয়েছে: সুপারিশ , ধারাবাহিকতা , এবং বৈশিষ্ট্যযুক্ত

  • প্রস্তাবনা ক্লাস্টারগুলি একটি পৃথক বিকাশকারী অংশীদার থেকে দেখার জন্য সামগ্রীর জন্য ব্যক্তিগতকৃত পরামর্শগুলি দেখায়৷

    আপনার সুপারিশগুলি নিম্নলিখিত কাঠামো গ্রহণ করে:

    • সুপারিশ ক্লাস্টার: একটি UI ভিউ যাতে একই বিকাশকারী অংশীদারের কাছ থেকে সুপারিশের একটি গোষ্ঠী রয়েছে৷

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

      চিত্র 2. এন্টারটেইনমেন্ট স্পেস UI একটি একক অংশীদারের সুপারিশ ক্লাস্টারের মধ্যে একটি একক সত্তা দেখাচ্ছে৷
  • কন্টিনিউয়েশন ক্লাস্টার একটি UI গ্রুপিংয়ে একাধিক বিকাশকারী অংশীদারদের থেকে অসমাপ্ত ভিডিও এবং প্রাসঙ্গিক সদ্য প্রকাশিত পর্বগুলি দেখায়৷ প্রতিটি বিকাশকারী অংশীদারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বাধিক 10টি সত্তা সম্প্রচার করার অনুমতি দেওয়া হবে। গবেষণায় দেখা গেছে যে ব্যক্তিগতকৃত কন্টিনিউয়েশন কন্টেন্টের সাথে ব্যক্তিগতকৃত সুপারিশগুলি সর্বোত্তম ব্যবহারকারীর ব্যস্ততা তৈরি করে।

    চিত্র 3. এন্টারটেইনমেন্ট স্পেস UI একাধিক অংশীদারদের থেকে অসমাপ্ত সুপারিশ সহ একটি ধারাবাহিক ক্লাস্টার দেখাচ্ছে (কেবলমাত্র একটি সুপারিশ বর্তমানে দৃশ্যমান)।
  • বৈশিষ্ট্যযুক্ত ক্লাস্টারটি একটি UI গ্রুপিংয়ে একাধিক বিকাশকারী অংশীদারদের থেকে সত্তার একটি নির্বাচন প্রদর্শন করে৷ একটি একক বৈশিষ্ট্যযুক্ত ক্লাস্টার থাকবে, যা সমস্ত সুপারিশ ক্লাস্টারের উপরে একটি অগ্রাধিকার প্লেসমেন্ট সহ UI এর শীর্ষের কাছে প্রদর্শিত হবে৷ প্রতিটি বিকাশকারী অংশীদারকে বৈশিষ্ট্যযুক্ত ক্লাস্টারে 10টি পর্যন্ত সম্প্রচার করার অনুমতি দেওয়া হবে।

    চিত্র 4. এন্টারটেইনমেন্ট স্পেস UI একাধিক অংশীদারদের সুপারিশ সহ একটি বৈশিষ্ট্যযুক্ত ক্লাস্টার দেখাচ্ছে (কেবলমাত্র একটি সুপারিশ বর্তমানে দৃশ্যমান)।

প্রাক কাজ

ন্যূনতম API স্তর: 19

আপনার অ্যাপে com.google.android.engage:engage-core লাইব্রেরি যোগ করুন:

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

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

সারাংশ

নকশা একটি আবদ্ধ সেবা বাস্তবায়ন উপর ভিত্তি করে.

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

ক্লাস্টার টাইপ ক্লাস্টার সীমা একটি ক্লাস্টারে সত্তার সর্বোচ্চ সীমা
সুপারিশ ক্লাস্টার(গুলি) সর্বাধিক 5 সর্বাধিক 50
ধারাবাহিকতা ক্লাস্টার সর্বোচ্চ 1 সর্বাধিক 10
বৈশিষ্ট্যযুক্ত ক্লাস্টার সর্বোচ্চ 1 সর্বাধিক 10

ধাপ 0: বিদ্যমান মিডিয়া হোম SDK ইন্টিগ্রেশন থেকে মাইগ্রেশন

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

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

MediaHomeVideoContract ইন্টিগ্রেশন সমতুল্য 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

মিডিয়া হোম SDK বনাম Engage SDK-এ ক্লাস্টার প্রকাশ করা

মিডিয়া হোম 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 কলে একত্রিত হয়। একটি ক্লাস্টারের অন্তর্গত সমস্ত সত্তা সেই ক্লাস্টারের সাথে একসাথে প্রকাশিত হয়:

কোটলিন

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

ধাপ 1: সত্তা তথ্য প্রদান

প্রতিটি আইটেমের প্রকারের প্রতিনিধিত্ব করার জন্য SDK বিভিন্ন সত্তাকে সংজ্ঞায়িত করেছে। আমরা ওয়াচ বিভাগের জন্য নিম্নলিখিত সংস্থাগুলিকে সমর্থন করি:

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

নিম্নলিখিত চার্ট প্রতিটি ধরনের জন্য বৈশিষ্ট্য এবং প্রয়োজনীয়তা রূপরেখা.

MovieEntity

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

প্লেব্যাক ইউরি প্রয়োজন

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

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

তথ্য পাতা uri ঐচ্ছিক

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

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

মুক্তির তারিখ প্রয়োজন যুগের মিলিসেকেন্ডে।
প্রাপ্যতা প্রয়োজন

উপলভ্য: বিষয়বস্তু ব্যবহারকারীর কাছে আর কোনো পদক্ষেপ ছাড়াই উপলব্ধ।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী একটি সদস্যতা কেনার পরে সামগ্রীটি উপলব্ধ হয়৷

PAID_CONTENT: সামগ্রীটির জন্য ব্যবহারকারীর ক্রয় বা ভাড়া প্রয়োজন৷

ক্রয় করা: সামগ্রীটি ব্যবহারকারীর দ্বারা কেনা বা ভাড়া করা হয়েছে৷

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

TvShowEntity

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

তথ্য পাতা uri প্রয়োজন

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

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

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

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

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

প্রথম পর্ব প্রচারের তারিখ প্রয়োজন যুগের মিলিসেকেন্ডে।
সর্বশেষ পর্বের সম্প্রচারের তারিখ ঐচ্ছিক যুগের মিলিসেকেন্ডে।
প্রাপ্যতা প্রয়োজন

উপলভ্য: বিষয়বস্তু ব্যবহারকারীর কাছে আর কোনো পদক্ষেপ ছাড়াই উপলব্ধ।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী একটি সদস্যতা কেনার পরে সামগ্রীটি উপলব্ধ হয়৷

PAID_CONTENT: সামগ্রীটির জন্য ব্যবহারকারীর ক্রয় বা ভাড়া প্রয়োজন৷

ক্রয় করা: সামগ্রীটি ব্যবহারকারীর দ্বারা কেনা বা ভাড়া করা হয়েছে৷

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

TvSeasonEntity

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

তথ্য পাতা uri প্রয়োজন

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

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

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

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

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

সিজন নম্বর প্রদর্শন করুন

ঐচ্ছিক

v1.3.1 এ উপলব্ধ

স্ট্রিং
প্রথম পর্ব প্রচারের তারিখ প্রয়োজন যুগের মিলিসেকেন্ডে।
সর্বশেষ পর্বের সম্প্রচারের তারিখ ঐচ্ছিক যুগের মিলিসেকেন্ডে।
প্রাপ্যতা প্রয়োজন

উপলভ্য: বিষয়বস্তু ব্যবহারকারীর কাছে আর কোনো পদক্ষেপ ছাড়াই উপলব্ধ।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী একটি সদস্যতা কেনার পরে সামগ্রীটি উপলব্ধ হয়৷

PAID_CONTENT: সামগ্রীটির জন্য ব্যবহারকারীর ক্রয় বা ভাড়া প্রয়োজন৷

ক্রয় করা: সামগ্রীটি ব্যবহারকারীর দ্বারা কেনা বা ভাড়া করা হয়েছে৷

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

TvEpisodeEntity

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

প্লেব্যাক ইউরি প্রয়োজন

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

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

তথ্য পাতা uri ঐচ্ছিক

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

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

পর্ব সংখ্যা প্রদর্শন করুন

ঐচ্ছিক

v1.3.1 এ উপলব্ধ

স্ট্রিং
এয়ার ডেট প্রয়োজন যুগের মিলিসেকেন্ডে।
প্রাপ্যতা প্রয়োজন

উপলভ্য: বিষয়বস্তু ব্যবহারকারীর কাছে আর কোনো পদক্ষেপ ছাড়াই উপলব্ধ।

FREE_WITH_SUBSCRIPTION: ব্যবহারকারী একটি সদস্যতা কেনার পরে সামগ্রীটি উপলব্ধ হয়৷

PAID_CONTENT: সামগ্রীটির জন্য ব্যবহারকারীর ক্রয় বা ভাড়া প্রয়োজন৷

ক্রয় করা: সামগ্রীটি ব্যবহারকারীর দ্বারা কেনা বা ভাড়া করা হয়েছে৷

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

LiveStreamingVideoEntity

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

প্লেব্যাক ইউরি প্রয়োজন

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

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

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

VideoClipEntity

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

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.

প্লেব্যাক ইউরি প্রয়োজন

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

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

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

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

চালিয়ে যান: ব্যবহারকারী ইতিমধ্যে এই সামগ্রীটির 1 মিনিটের বেশি দেখেছেন৷

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

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

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

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

ইমেজ স্পেসিফিকেশন

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

ফাইল ফরম্যাট

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

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

5120 KB

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

  • ছবি নিরাপদ এলাকা: ছবির 80% কেন্দ্রে আপনার গুরুত্বপূর্ণ বিষয়বস্তু রাখুন।

উদাহরণ

কোটলিন

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

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

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

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

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

isServiceAvailable

পরিষেবাটি ইন্টিগ্রেশনের জন্য উপলব্ধ কিনা এবং ডিভাইসে সামগ্রী উপস্থাপন করা যেতে পারে কিনা তা পরীক্ষা করতে এই API ব্যবহার করা হয়।

কোটলিন

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

জাভা

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

publishRecommendationClusters

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

কোটলিন

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

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

কোটলিন

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

জাভা

client.publishFeaturedCluster(
            new PublishFeaturedClustersRequest.Builder()
                .addFeaturedCluster(
                    new FeaturedCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build());

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

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

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

publishContinuationCluster

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

কোটলিন

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 একটি সাইন ইন কার্ড প্রকাশ করতে ব্যবহৃত হয়। সাইন ইন অ্যাকশন ব্যবহারকারীদের অ্যাপের সাইন ইন পৃষ্ঠায় নির্দেশ করে যাতে অ্যাপটি সামগ্রী প্রকাশ করতে পারে (বা আরও ব্যক্তিগতকৃত সামগ্রী সরবরাহ করতে পারে)

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

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

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

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

যদি কোনও অভ্যন্তরীণ ব্যবসায়িক কারণে, ক্লাস্টারগুলির কোনওটিই প্রকাশিত না হয়, আমরা দৃঢ়ভাবে আপডেট পাবলিশ স্ট্যাটাস 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

যদি কোনো ব্যবহারকারী লগ ইন না করার কারণে বিষয়বস্তু প্রকাশিত না হয়, তাহলে Google সাইন ইন কার্ড প্রকাশ করার সুপারিশ করবে। যদি কোনো কারণে প্রদানকারীরা সাইন ইন কার্ড প্রকাশ করতে না পারে তাহলে আমরা স্ট্যাটাস কোড 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

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

কোটলিন

client.deleteRecommendationClusters()

জাভা

client.deleteRecommendationClusters();

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

deleteFeaturedCluster

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

কোটলিন

client.deleteFeaturedCluster()

জাভা

client.deleteFeaturedCluster();

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

deleteContinuationCluster

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

কোটলিন

client.deleteContinuationCluster()

জাভা

client.deleteContinuationCluster();

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

deleteUserManagementCluster

UserAccountManagement Cluster-এর বিষয়বস্তু মুছতে এই API ব্যবহার করা হয়।

কোটলিন

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

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

deleteClusters

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

কোটলিন

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

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

ত্রুটি হ্যান্ডলিং

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

কোটলিন

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 পরিষেবা কল খুব ঘন ঘন করা হয়.

ধাপ 3: সম্প্রচারের উদ্দেশ্য পরিচালনা করুন

একটি কাজের মাধ্যমে প্রকাশ সামগ্রী API কল করার পাশাপাশি, একটি বিষয়বস্তু প্রকাশের জন্য অনুরোধ পাওয়ার জন্য একটি 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))

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED))

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION))
}

জাভা

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

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • আপনার AndroidManifest.xml ফাইলে <receiver> ট্যাগ দিয়ে স্থিরভাবে একটি বাস্তবায়ন ঘোষণা করুন। এটি অ্যাপ্লিকেশনটিকে সম্প্রচারের অভিপ্রায় প্রাপ্ত করার অনুমতি দেয় যখন এটি চলছে না, এবং অ্যাপ্লিকেশনটিকে সামগ্রী প্রকাশ করার অনুমতি দেয়৷
<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      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 ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।

FAQs

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

যোগাযোগ

ইন্টিগ্রেশন প্রক্রিয়া চলাকালীন কোনো প্রশ্ন থাকলে entering-developers@google.com- এ যোগাযোগ করুন।

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

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

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