Google একটি অন-ডিভাইস পৃষ্ঠ তৈরি করছে যা ব্যবহারকারীদের অ্যাপগুলিকে উল্লম্বভাবে সংগঠিত করে এবং ব্যক্তিগতকৃত অ্যাপ সামগ্রী ব্যবহার এবং আবিষ্কারের জন্য একটি নতুন নিমজ্জিত অভিজ্ঞতা সক্ষম করে৷ এই ফুলস্ক্রিন অভিজ্ঞতা ডেভেলপার অংশীদারদের তাদের অ্যাপের বাইরে একটি ডেডিকেটেড চ্যানেলে তাদের সেরা সমৃদ্ধ সামগ্রী প্রদর্শন করার সুযোগ দেয়।
এই নির্দেশিকাটিতে বিকাশকারী অংশীদারদের তাদের ভিডিও বিষয়বস্তু সংহত করার নির্দেশাবলী রয়েছে, এই নতুন পৃষ্ঠ এলাকা এবং বিদ্যমান Google সারফেস উভয়ই পূরণ করতে Engage SDK ব্যবহার করে৷
ইন্টিগ্রেশন বিস্তারিত
পরিভাষা
এই ইন্টিগ্রেশনে নিম্নলিখিত তিনটি ক্লাস্টার প্রকার রয়েছে: সুপারিশ , ধারাবাহিকতা , এবং বৈশিষ্ট্যযুক্ত ৷
প্রস্তাবনা ক্লাস্টারগুলি একটি পৃথক বিকাশকারী অংশীদার থেকে দেখার জন্য সামগ্রীর জন্য ব্যক্তিগতকৃত পরামর্শগুলি দেখায়৷
আপনার সুপারিশগুলি নিম্নলিখিত কাঠামো গ্রহণ করে:
সুপারিশ ক্লাস্টার: একটি UI ভিউ যাতে একই বিকাশকারী অংশীদারের কাছ থেকে সুপারিশের একটি গোষ্ঠী রয়েছে৷
সত্তা: একটি বস্তু একটি ক্লাস্টারে একটি একক আইটেম প্রতিনিধিত্ব করে। একটি সত্তা একটি চলচ্চিত্র, একটি টিভি শো, একটি টিভি সিরিজ, লাইভ ভিডিও এবং আরও অনেক কিছু হতে পারে৷ সমর্থিত সত্তা প্রকারের তালিকার জন্য সত্তা ডেটা প্রদান বিভাগটি দেখুন।
কন্টিনিউয়েশন ক্লাস্টার একটি UI গ্রুপিংয়ে একাধিক বিকাশকারী অংশীদারদের থেকে অসমাপ্ত ভিডিও এবং প্রাসঙ্গিক সদ্য প্রকাশিত পর্বগুলি দেখায়৷ প্রতিটি বিকাশকারী অংশীদারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বাধিক 10টি সত্তা সম্প্রচার করার অনুমতি দেওয়া হবে। গবেষণায় দেখা গেছে যে ব্যক্তিগতকৃত কন্টিনিউয়েশন কন্টেন্টের সাথে ব্যক্তিগতকৃত সুপারিশগুলি সর্বোত্তম ব্যবহারকারীর ব্যস্ততা তৈরি করে।
বৈশিষ্ট্যযুক্ত ক্লাস্টারটি একটি UI গ্রুপিংয়ে একাধিক বিকাশকারী অংশীদারদের থেকে সত্তার একটি নির্বাচন প্রদর্শন করে৷ একটি একক বৈশিষ্ট্যযুক্ত ক্লাস্টার থাকবে, যা সমস্ত সুপারিশ ক্লাস্টারের উপরে একটি অগ্রাধিকার প্লেসমেন্ট সহ UI এর শীর্ষের কাছে প্রদর্শিত হবে৷ প্রতিটি বিকাশকারী অংশীদারকে বৈশিষ্ট্যযুক্ত ক্লাস্টারে 10টি পর্যন্ত সম্প্রচার করার অনুমতি দেওয়া হবে।
প্রাক কাজ
ন্যূনতম 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 বিভিন্ন সত্তাকে সংজ্ঞায়িত করেছে। আমরা ওয়াচ বিভাগের জন্য নিম্নলিখিত সংস্থাগুলিকে সমর্থন করি:
নিম্নলিখিত চার্ট প্রতিটি ধরনের জন্য বৈশিষ্ট্য এবং প্রয়োজনীয়তা রূপরেখা.
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 প্লে স্টোরে প্রকাশ করা হয়েছে তা নিশ্চিত করার পরে, আপনার সুপারিশ , বৈশিষ্ট্যযুক্ত এবং ধারাবাহিকতা ক্লাস্টারগুলি প্রকাশ করা হতে পারে এবং ব্যবহারকারীদের কাছে দৃশ্যমান হতে পারে৷