Continue Watching অসমাপ্ত ভিডিওগুলি দেখানোর জন্য কন্টিনিউয়েশন ক্লাস্টার এবং পরবর্তী পর্বগুলিকে একই টিভি সিজন থেকে, একটি UI গ্রুপিং-এর একাধিক অ্যাপ থেকে দেখা যাবে। আপনি এই ধারাবাহিকতা ক্লাস্টারে তাদের সত্তাগুলিকে বৈশিষ্ট্যযুক্ত করতে পারেন৷ Engage SDK ব্যবহার করে Continue Watching অভিজ্ঞতার মাধ্যমে কীভাবে ব্যবহারকারীর ব্যস্ততা বাড়ানো যায় তা শিখতে এই নির্দেশিকা অনুসরণ করুন।
প্রাক কাজ
আপনি শুরু করার আগে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:
টার্গেট API 19 বা উচ্চতর আপডেট করুন
আপনার অ্যাপে
com.google.android.engage
লাইব্রেরি যোগ করুন:ইন্টিগ্রেশনে ব্যবহার করার জন্য আলাদা SDK আছে: একটি মোবাইল অ্যাপের জন্য এবং একটি টিভি অ্যাপের জন্য।
মোবাইল
dependencies { implementation 'com.google.android.engage:engage-core:1.5.5 }
টিভি
dependencies { implementation 'com.google.android.engage:engage-tv:1.0.2 }
AndroidManifest.xml
ফাইলে প্রডাকশনে এনগেজ পরিষেবা পরিবেশ সেট করুন।মোবাইল
<meta-data android:name="com.google.android.engage.service.ENV" android:value="PRODUCTION" />
টিভি
<meta-data android:name="com.google.android.engage.service.ENV" android:value="PRODUCTION" />
টিভি apk-এর জন্য
WRITE_EPG_DATA
এর অনুমতি যোগ করুন<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
সময় নির্ধারণের জন্য
androidx.work
এর মতো ব্যাকগ্রাউন্ড পরিষেবা ব্যবহার করে নির্ভরযোগ্য বিষয়বস্তু প্রকাশনা যাচাই করুন।একটি নির্বিঘ্ন দেখার অভিজ্ঞতা প্রদান করতে, এই ঘটনাগুলি ঘটলে ডেটা দেখা চালিয়ে যান:
- প্রথম লগইন: যখন একজন ব্যবহারকারী প্রথমবার লগ ইন করেন, তখন তাদের দেখার ইতিহাস অবিলম্বে উপলব্ধ হয় তা নিশ্চিত করতে ডেটা প্রকাশ করে।
- প্রোফাইল তৈরি বা স্যুইচিং (মাল্টি-প্রোফাইল অ্যাপস): যদি আপনার অ্যাপ একাধিক প্রোফাইল সমর্থন করে, একজন ব্যবহারকারী প্রোফাইল তৈরি বা স্যুইচ করার সময় ডেটা প্রকাশ করুন।
- ভিডিও প্লেব্যাক ব্যাঘাত: ব্যবহারকারীরা যেখানে রেখেছিলেন তা শুরু করতে সাহায্য করার জন্য, যখন তারা একটি ভিডিও পজ বা বন্ধ করে, বা প্লেব্যাকের সময় অ্যাপটি বন্ধ হয়ে যায় তখন ডেটা প্রকাশ করে৷
- ট্রে আপডেটগুলি দেখা চালিয়ে যান (যদি সমর্থিত হয়): যখন কোনও ব্যবহারকারী তাদের কন্টিনিউ ওয়াচিং ট্রে থেকে একটি আইটেম সরিয়ে দেন, আপডেট করা ডেটা প্রকাশ করে সেই পরিবর্তনটি প্রতিফলিত করুন।
- ভিডিও সমাপ্তি:
- মুভির জন্য, কন্টিনিউ ওয়াচিং ট্রে থেকে সম্পূর্ণ মুভিটি সরিয়ে ফেলুন। যদি মুভিটি একটি সিরিজের অংশ হয়, ব্যবহারকারীকে নিযুক্ত রাখতে পরবর্তী মুভি যোগ করুন৷
- পর্বের জন্য, সমাপ্ত পর্বটি সরান এবং ধারাবাহিকভাবে দেখার উত্সাহিত করার জন্য, যদি উপলব্ধ থাকে তবে সিরিজের পরবর্তী পর্বটি যোগ করুন।
ইন্টিগ্রেশন
অ্যাকাউন্ট প্রোফাইল
Google TV-তে ব্যক্তিগতকৃত "দেখা চালিয়ে যান" অভিজ্ঞতার অনুমতি দিতে, অ্যাকাউন্ট এবং প্রোফাইল তথ্য প্রদান করুন। প্রদান করতে অ্যাকাউন্ট প্রোফাইল ব্যবহার করুন:
অ্যাকাউন্ট আইডি: একটি অনন্য শনাক্তকারী যা আপনার অ্যাপ্লিকেশনের মধ্যে ব্যবহারকারীর অ্যাকাউন্টের প্রতিনিধিত্ব করে। এটি প্রকৃত অ্যাকাউন্ট আইডি বা উপযুক্তভাবে অস্পষ্ট সংস্করণ হতে পারে।
প্রোফাইল আইডি (ঐচ্ছিক): যদি আপনার অ্যাপ্লিকেশনটি একক অ্যাকাউন্টের মধ্যে একাধিক প্রোফাইল সমর্থন করে, তবে নির্দিষ্ট ব্যবহারকারী প্রোফাইলের জন্য একটি অনন্য শনাক্তকারী প্রদান করুন (আবার, বাস্তব বা অস্পষ্ট)।
// If your app only supports account
val accountProfile = AccountProfile.Builder()
.setAccountId("your_users_account_id")
.build()
// If your app supports both account and profile
val accountProfile = AccountProfile.Builder()
.setAccountId("your_users_account_id")
.setProfileId("your_users_profile_id")
.build()
সত্তা তৈরি করুন
প্রতিটি আইটেমের প্রকারের প্রতিনিধিত্ব করার জন্য SDK বিভিন্ন সত্তাকে সংজ্ঞায়িত করেছে। ধারাবাহিকতা ক্লাস্টার নিম্নলিখিত সত্তা সমর্থন করে:
এই সত্তাগুলির জন্য প্ল্যাটফর্ম-নির্দিষ্ট URI এবং পোস্টার ছবিগুলি নির্দিষ্ট করুন৷
এছাড়াও, প্রতিটি প্ল্যাটফর্মের জন্য প্লেব্যাক ইউআরআই তৈরি করুন—যেমন অ্যান্ড্রয়েড টিভি, অ্যান্ড্রয়েড, বা আইওএস—যদি আপনি ইতিমধ্যে না থাকেন। সুতরাং যখন একজন ব্যবহারকারী প্রতিটি প্ল্যাটফর্মে দেখা চালিয়ে যান, অ্যাপটি ভিডিও সামগ্রী চালানোর জন্য একটি লক্ষ্যযুক্ত প্লেব্যাক ইউআরআই ব্যবহার করে।
// Required. Set this when you want continue watching entities to show up on
// Google TV
val playbackUriTv = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_ANDROID_TV)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_tv"))
.build()
// Required. Set this when you want continue watching entities to show up on
// Google TV Android app, Entertainment Space, Playstore Widget
val playbackUriAndroid = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_ANDROID_MOBILE)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_android"))
.build()
// Optional. Set this when you want continue watching entities to show up on
// Google TV iOS app
val playbackUriIos = PlatformSpecificUri.Builder()
.setPlatformType(PlatformType.TYPE_IOS)
.setActionUri(Uri.parse("https://www.example.com/entity_uri_for_ios"))
.build()
val platformSpecificPlaybackUris =
Arrays.asList(playbackUriTv, playbackUriAndroid, playbackUriIos)
পোস্টার ইমেজ একটি URI এবং পিক্সেল মাত্রা প্রয়োজন (উচ্চতা এবং প্রস্থ)। একাধিক পোস্টার ইমেজ প্রদান করে বিভিন্ন ফর্ম ফ্যাক্টরকে লক্ষ্য করুন, কিন্তু যাচাই করুন যে সমস্ত ছবি একটি 16:9 অনুপাত এবং 200 পিক্সেলের ন্যূনতম উচ্চতা বজায় রাখে যাতে "কন্টিনিউ ওয়াচিং" সত্তার সঠিক প্রদর্শনের জন্য, বিশেষ করে Google-এর বিনোদন স্পেসের মধ্যে। 200 পিক্সেলের কম উচ্চতার ছবি দেখানো নাও হতে পারে।
val images = Arrays.asList(
Image.Builder()
.setImageUri(Uri.parse("http://www.example.com/entity_image1.png"))
.setImageHeightInPixel(300)
.setImageWidthInPixel(169)
.build(),
Image.Builder()
.setImageUri(Uri.parse("http://www.example.com/entity_image2.png"))
.setImageHeightInPixel(640)
.setImageWidthInPixel(360)
.build()
// Consider adding other images for different form factors
)
মুভি এন্টিটি
এই উদাহরণটি দেখায় কিভাবে সমস্ত প্রয়োজনীয় ক্ষেত্রগুলির সাথে একটি MovieEntity
তৈরি করতে হয়:
val movieEntity = MovieEntity.Builder()
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Movie name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
// Suppose the duration is 2 hours, it is 72000000 in milliseconds
.setDurationMills(72000000)
// Suppose last playback offset is 1 hour, 36000000 in milliseconds
.setLastPlayBackPositionTimeMillis(36000000)
.build()
জেনার এবং বিষয়বস্তু রেটিং এর মত বিশদ প্রদান করা Google TV কে আপনার সামগ্রীকে আরও গতিশীল উপায়ে প্রদর্শন করার এবং সঠিক দর্শকদের সাথে সংযোগ করার ক্ষমতা দেয়৷
val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val movieEntity = MovieEntity.Builder()
...
.addGenres(genres)
.addContentRatings(contentRatings)
.build()
সত্তা স্বয়ংক্রিয়ভাবে 60 দিনের জন্য উপলব্ধ থাকে যদি না আপনি একটি সংক্ষিপ্ত মেয়াদ শেষ হওয়ার সময় উল্লেখ করেন। আপনি যদি এই ডিফল্ট সময়ের আগে সত্তাটিকে সরাতে চান তবেই কেবল একটি কাস্টম মেয়াদ সেট করুন৷
// Set the expiration time to be now plus 30 days in milliseconds
val expirationTime = DisplayTimeWindow.Builder()
.setEndTimestampMillis(now().toMillis()+2592000000).build()
val movieEntity = MovieEntity.Builder()
...
.addAvailabilityTimeWindow(expirationTime)
.build()
TvEpisodeEntity
এই উদাহরণটি দেখায় কিভাবে সমস্ত প্রয়োজনীয় ক্ষেত্রগুলির সাথে একটি TvEpisodeEntity
তৈরি করতে হয়:
val tvEpisodeEntity = TvEpisodeEntity.Builder()
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Episode name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(72000000) // 2 hours in milliseconds
// 45 minutes and 15 seconds in milliseconds is 2715000
.setLastPlayBackPositionTimeMillis(2715000)
.setEpisodeNumber("2")
.setSeasonNumber("1")
.setShowTitle("Title of the show")
.build()
এপিসোড নম্বর স্ট্রিং (যেমন "2"
), এবং সিজন নম্বর স্ট্রিং (যেমন "1"
) অবিরত দেখার কার্ডে প্রদর্শিত হওয়ার আগে সঠিক ফর্মে প্রসারিত হবে। মনে রাখবেন যে সেগুলি একটি সংখ্যাসূচক স্ট্রিং হওয়া উচিত, "e2", বা "পর্ব 2", বা "s1" বা "সিজন 1" রাখবেন না।
যদি একটি নির্দিষ্ট টিভি শোতে একটি সিজন থাকে, তাহলে সিজন নম্বর 1 হিসাবে সেট করুন।
Google TV-তে দর্শকরা আপনার সামগ্রী খুঁজে পাওয়ার সম্ভাবনাকে সর্বাধিক করতে, অতিরিক্ত ডেটা যেমন জেনার, সামগ্রীর রেটিং এবং উপলব্ধতার সময় উইন্ডো দেওয়ার কথা বিবেচনা করুন, কারণ এই বিবরণগুলি প্রদর্শন এবং ফিল্টারিং বিকল্পগুলিকে উন্নত করতে পারে৷
val genres = Arrays.asList("Action", "Science fiction")
val rating1 = RatingSystem.Builder().setAgencyName("MPAA").setRating("PG-13").build()
val contentRatings = Arrays.asList(rating1)
val tvEpisodeEntity = TvEpisodeEntity.Builder()
...
.addGenres(genres)
.addContentRatings(contentRatings)
.setSeasonTitle("Season Title")
.setShowTitle("Show Title")
.build()
VideoClipEntity
এখানে সমস্ত প্রয়োজনীয় ক্ষেত্রগুলির সাথে একটি VideoClipEntity
তৈরি করার একটি উদাহরণ রয়েছে৷
VideoClipEntity
একটি ইউটিউব ভিডিওর মতো একটি ব্যবহারকারীর তৈরি ক্লিপ উপস্থাপন করে।
val videoClipEntity = VideoClipEntity.Builder()
.setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Video clip name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(600000) //10 minutes in milliseconds
.setLastPlayBackPositionTimeMillis(300000) //5 minutes in milliseconds
.addContentRating(contentRating)
.build()
আপনি ঐচ্ছিকভাবে স্রষ্টা, স্রষ্টার চিত্র, মিলিসেকেন্ডে তৈরি সময় বা উপলব্ধতার সময় উইন্ডো সেট করতে পারেন।
লাইভস্ট্রিমিংভিডিওএন্টিটি
এখানে সমস্ত প্রয়োজনীয় ক্ষেত্রগুলির সাথে একটি LiveStreamingVideoEntity
তৈরি করার একটি উদাহরণ রয়েছে৷
val liveStreamingVideoEntity = LiveStreamingVideoEntity.Builder()
.setPlaybackUri(Uri.parse("https://www.example.com/uri_for_current_platform")
.setWatchNextType(WatchNextType.TYPE_CONTINUE)
.setName("Live streaming name")
.addPlatformSpecificPlaybackUri(platformSpecificPlaybackUris)
.addPosterImages(images)
// Timestamp in millis for sample last engagement time 12/1/2023 00:00:00
.setLastEngagementTimeMillis(1701388800000)
.setDurationMills(72000000) //2 hours in milliseconds
.setLastPlayBackPositionTimeMillis(36000000) //1 hour in milliseconds
.addContentRating(contentRating)
.build()
ঐচ্ছিকভাবে, আপনি লাইভ স্ট্রিমিং সত্তার জন্য শুরুর সময়, সম্প্রচারকারী, সম্প্রচারকারী আইকন বা উপলব্ধতার সময় উইন্ডো সেট করতে পারেন।
বৈশিষ্ট্য এবং প্রয়োজনীয়তা সম্পর্কে বিস্তারিত তথ্যের জন্য, API রেফারেন্স দেখুন।
কন্টিনিউয়েশন ক্লাস্টার ডেটা প্রদান করুন
AppEngagePublishClient
কন্টিনিউয়েশন ক্লাস্টার প্রকাশের জন্য দায়ী। আপনি একটি ContinuationCluster
অবজেক্ট প্রকাশ করতে publishContinuationCluster()
পদ্ধতি ব্যবহার করেন।
প্রথমে, পরিষেবাটি ইন্টিগ্রেশনের জন্য উপলব্ধ কিনা তা পরীক্ষা করতে আপনার isServiceAvailable() ব্যবহার করা উচিত।
client.publishContinuationCluster(
PublishContinuationClusterRequest
.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.setAccountProfile(accountProfile)
.addEntity(movieEntity1)
.addEntity(movieEntity2)
.addEntity(tvEpisodeEntity1)
.addEntity(tvEpisodeEntity2)
.setSyncAcrossDevices(true)
.build()
)
.build()
)
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, নিম্নলিখিত ক্রিয়াগুলি একটি লেনদেনের মধ্যে সঞ্চালিত হয়:
- বিকাশকারী অংশীদার থেকে বিদ্যমান
ContinuationCluster
ডেটা সরানো হয়েছে। - অনুরোধের ডেটা পার্স করা হয়েছে এবং আপডেট করা
ContinuationCluster
এ সংরক্ষণ করা হয়েছে।
একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
পাবলিশ এপিআই হল আপসার্ট এপিআই; এটি বিদ্যমান সামগ্রী প্রতিস্থাপন করে। আপনি যদি ContinuationCluster-এ একটি নির্দিষ্ট সত্তা আপডেট করতে চান, তাহলে আপনাকে আবার সমস্ত সত্তা প্রকাশ করতে হবে।
ContinuationCluster ডেটা শুধুমাত্র প্রাপ্তবয়স্কদের অ্যাকাউন্টের জন্য প্রদান করা উচিত। শুধুমাত্র তখনই প্রকাশ করুন যখন অ্যাকাউন্ট প্রোফাইলটি একজন প্রাপ্তবয়স্কের।
ক্রস-ডিভাইস সিঙ্কিং
SyncAcrossDevices
পতাকা নিয়ন্ত্রণ করে যে ব্যবহারকারীর ContinuationCluster
ডেটা টিভি, ফোন, ট্যাবলেট ইত্যাদির মতো ডিভাইস জুড়ে সিঙ্ক্রোনাইজ করা হয়েছে কিনা। ক্রস-ডিভাইস সিঙ্কিং ডিফল্টরূপে অক্ষম থাকে।
মান:
- সত্য: অবিরাম দেখার অভিজ্ঞতার জন্য ContinuationCluster ডেটা সমস্ত ব্যবহারকারীর ডিভাইস জুড়ে ভাগ করা হয়৷ সেরা ক্রস-ডিভাইস অভিজ্ঞতার জন্য আমরা দৃঢ়ভাবে এই বিকল্পটি সুপারিশ করি।
- false: ContinuationCluster ডেটা বর্তমান ডিভাইসে সীমাবদ্ধ।
সম্মতি পান:
মিডিয়া অ্যাপ্লিকেশনকে ক্রস-ডিভাইস সিঙ্কিং সক্ষম/অক্ষম করার জন্য একটি স্পষ্ট সেটিং প্রদান করতে হবে। ব্যবহারকারীর সুবিধাগুলি ব্যাখ্যা করুন এবং ব্যবহারকারীর পছন্দ একবার সংরক্ষণ করুন এবং সেই অনুযায়ী publishContinuationCluster এ প্রয়োগ করুন।
// Example to allow cross device syncing.
client.publishContinuationCluster(
PublishContinuationClusterRequest
.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.setAccountProfile(accountProfile)
.setSyncAcrossDevices(true)
.build()
)
.build()
)
আমাদের ক্রস-ডিভাইস বৈশিষ্ট্য থেকে সবচেয়ে বেশি সুবিধা পেতে, অ্যাপটি ব্যবহারকারীর সম্মতি পেয়েছে কিনা তা যাচাই করুন এবং SyncAcrossDevices
true
সক্ষম করুন। এটি সামগ্রীগুলিকে সমস্ত ডিভাইস জুড়ে নির্বিঘ্নে সিঙ্ক করার অনুমতি দেয়, যার ফলে ব্যবহারকারীর অভিজ্ঞতা আরও ভাল হয় এবং ব্যস্ততা বৃদ্ধি পায়। উদাহরণ স্বরূপ, একজন অংশীদার যিনি এটি বাস্তবায়ন করেছেন তিনি "দেখা চালিয়ে যান" ক্লিকে 40% বৃদ্ধি দেখেছেন কারণ তাদের সামগ্রী একাধিক ডিভাইসে প্রদর্শিত হয়েছে৷
ভিডিও আবিষ্কার ডেটা মুছুন
স্ট্যান্ডার্ড 60-দিন ধরে রাখার সময়ের আগে Google TV সার্ভার থেকে ব্যবহারকারীর ডেটা ম্যানুয়ালি মুছতে, client.deleteClusters() পদ্ধতি ব্যবহার করুন। অনুরোধ পাওয়ার পরে, পরিষেবাটি অ্যাকাউন্ট প্রোফাইলের জন্য বা পুরো অ্যাকাউন্টের জন্য বিদ্যমান ভিডিও আবিষ্কারের সমস্ত ডেটা মুছে ফেলবে৷
DeleteReason
enum ডেটা মুছে ফেলার কারণ নির্ধারণ করে। নিম্নলিখিত কোডটি লগআউটে ডেটা দেখা চালিয়ে যাওয়া সরিয়ে দেয়।
// If the user logs out from your media app, you must make the following call
// to remove continue watching data from the current google TV device,
// otherwise, the continue watching data will persist on the current
// google TV device until 60 days later.
client.deleteClusters(
DeleteClustersRequest.Builder()
.setAccountProfile(AccountProfile())
.setReason(DeleteReason.DELETE_REASON_USER_LOG_OUT)
.setSyncAcrossDevices(true)
.build()
)
টেস্টিং
Engage SDK ইন্টিগ্রেশন সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে যাচাইকরণ অ্যাপটি ব্যবহার করুন। এই অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি আপনাকে আপনার ডেটা যাচাই করতে এবং সম্প্রচারের উদ্দেশ্যগুলি সঠিকভাবে পরিচালনা করা হচ্ছে তা নিশ্চিত করতে সহায়তা করার জন্য সরঞ্জাম সরবরাহ করে৷
আপনি প্রকাশ API চালু করার পরে, যাচাইকরণ অ্যাপটি পরীক্ষা করে নিশ্চিত করুন যে আপনার ডেটা সঠিকভাবে প্রকাশিত হচ্ছে। আপনার ধারাবাহিকতা ক্লাস্টারটি অ্যাপের ইন্টারফেসের মধ্যে একটি স্বতন্ত্র সারি হিসাবে প্রদর্শিত হওয়া উচিত।
- আপনার অ্যাপ্লিকেশানের Android ম্যানিফেস্ট ফাইলে শুধুমাত্র নন-প্রোডাকশন বিল্ডগুলির জন্য এনগেজ সার্ভিস ফ্ল্যাগ সেট করুন৷
- Engage Verify অ্যাপটি ইনস্টল করুন এবং খুলুন
- যদি
isServiceAvailable
false
হয়, সক্রিয় করতে "টগল" বোতামে ক্লিক করুন। - আপনি প্রকাশ করা শুরু করলে স্বয়ংক্রিয়ভাবে প্রকাশিত ডেটা দেখতে আপনার অ্যাপের প্যাকেজের নাম লিখুন।
- আপনার অ্যাপে এই ক্রিয়াগুলি পরীক্ষা করুন:
- সাইন ইন করুন
- প্রোফাইলের মধ্যে স্যুইচ করুন (যদি প্রযোজ্য হয়)।
- শুরু করুন, তারপর একটি ভিডিও পজ করুন বা হোম পেজে ফিরে যান।
- ভিডিও প্লেব্যাকের সময় অ্যাপটি বন্ধ করুন।
- "দেখা চালিয়ে যান" সারি থেকে একটি আইটেম সরান (যদি সমর্থিত হয়)।
- প্রতিটি অ্যাকশনের পরে, নিশ্চিত করুন যে আপনার অ্যাপ
publishContinuationClusters
API ব্যবহার করেছে এবং ডেটা যাচাইকরণ অ্যাপে সঠিকভাবে প্রদর্শিত হয়েছে। যাচাইকরণ অ্যাপটি সঠিকভাবে বাস্তবায়িত সত্তার জন্য একটি সবুজ "অল গুড" চেক দেখাবে।
চিত্র 1. যাচাইকরণ অ্যাপের সাফল্য যাচাইকরণ অ্যাপটি কোনো সমস্যাযুক্ত সত্তাকে ফ্ল্যাগ করবে।
চিত্র 2. যাচাইকরণ অ্যাপ ত্রুটি ত্রুটিযুক্ত সত্তাগুলির সমস্যা সমাধানের জন্য, যাচাইকরণ অ্যাপে সত্তা নির্বাচন এবং ক্লিক করতে আপনার টিভি রিমোট ব্যবহার করুন৷ নির্দিষ্ট সমস্যাগুলি আপনার পর্যালোচনার জন্য লাল রঙে প্রদর্শিত এবং হাইলাইট করা হবে (নীচের উদাহরণ দেখুন)।
চিত্র 3. যাচাইকরণ অ্যাপ ত্রুটির বিবরণ
REST API
Engage SDK একটি REST API অফার করে যাতে iOS, Roku TV-এর মতো নন-Android প্ল্যাটফর্ম জুড়ে ধারাবাহিকভাবে দেখার অভিজ্ঞতা প্রদান করে। এপিআই ডেভেলপারদের নন-অ্যান্ড্রয়েড প্ল্যাটফর্ম থেকে অপ্ট-ইন করা ব্যবহারকারীদের জন্য "চালিয়ে রাখুন" স্থিতি আপডেট করার অনুমতি দেয়।
পূর্বশর্ত
- আপনাকে প্রথমে অন-ডিভাইস Engage SDK-ভিত্তিক ইন্টিগ্রেশন শেষ করতে হবে। এই গুরুত্বপূর্ণ পদক্ষেপটি Google এর ব্যবহারকারী আইডি এবং আপনার অ্যাপের
AccountProfile
মধ্যে প্রয়োজনীয় সংযোগ স্থাপন করে। - API অ্যাক্সেস এবং প্রমাণীকরণ: আপনার Google ক্লাউড প্রজেক্টে API দেখতে এবং সক্ষম করতে, আপনাকে একটি অনুমোদিত তালিকা প্রক্রিয়ার মধ্য দিয়ে যেতে হবে। সমস্ত API অনুরোধের প্রমাণীকরণ প্রয়োজন।
অ্যাক্সেস লাভ
আপনার Google ক্লাউড কনসোলে API দেখতে এবং সক্ষম করার অ্যাক্সেস পেতে, আপনার অ্যাকাউন্ট নথিভুক্ত করা প্রয়োজন৷
- Google Workspace গ্রাহক আইডি পাওয়া উচিত। যদি উপলভ্য না হয় তাহলে আপনাকে একটি Google Workspace সেট-আপ করতে হবে এবং সেইসাথে আপনি API কল করার জন্য যেকোনও Google অ্যাকাউন্ট ব্যবহার করতে চান।
- Google Workspace-এর সাথে যুক্ত একটি ইমেল ব্যবহার করে Google Cloud Console-এর সাথে একটি অ্যাকাউন্ট সেট-আপ করুন।
- একটি নতুন প্রকল্প তৈরি করুন
- API প্রমাণীকরণের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন। একবার আপনি পরিষেবা অ্যাকাউন্ট তৈরি করলে, আপনার দুটি আইটেম থাকবে:
- একটি পরিষেবা অ্যাকাউন্ট আইডি।
- আপনার পরিষেবা অ্যাকাউন্ট কী সহ একটি JSON ফাইল। এই ফাইলটি সুরক্ষিত রাখুন, আপনার ক্লায়েন্টকে পরবর্তীতে API-তে প্রমাণীকরণ করতে আপনার এটির প্রয়োজন হবে।
- ওয়ার্কস্পেস এবং সংশ্লিষ্ট Google অ্যাকাউন্টগুলি এখন REST API ব্যবহার করতে পারবে। একবার পরিবর্তনটি প্রচার হয়ে গেলে আপনাকে জানানো হবে যে API আপনার পরিষেবা অ্যাকাউন্টগুলির দ্বারা কল করার জন্য প্রস্তুত কিনা।
- একটি অর্পিত API কল করার প্রস্তুতির জন্য এই পদক্ষেপগুলি অনুসরণ করুন৷
ধারাবাহিকতা ক্লাস্টার প্রকাশ করুন
ভিডিও আবিষ্কারের ডেটা প্রকাশ করতে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করে publishContinuationCluster
API-এ একটি POST অনুরোধ করুন।
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster
কোথায়:
-
package_name
: মিডিয়া প্রদানকারীর প্যাকেজের নাম -
accountId
: আপনার সিস্টেমে ব্যবহারকারীর অ্যাকাউন্টের জন্য অনন্য আইডি। এটি অবশ্যই অন-ডিভাইস পাথে ব্যবহৃতaccountId
সাথে মেলে। -
profileId
: আপনার সিস্টেমে অ্যাকাউন্টের মধ্যে ব্যবহারকারীর প্রোফাইলের জন্য অনন্য আইডি। এটি অবশ্যই অন-ডিভাইস পাথে ব্যবহৃত প্রোফাইল আইডির সাথে মেলে।
প্রোফাইল ছাড়া অ্যাকাউন্টের URL হল:
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster
অনুরোধের পেলোড entities
ক্ষেত্রে প্রতিনিধিত্ব করা হয়। entities
বিষয়বস্তু সত্তাগুলির একটি তালিকা উপস্থাপন করে যা MovieEntity
বা TVEpisodeEntity
হতে পারে৷ এটি একটি প্রয়োজনীয় ক্ষেত্র।
রিকোয়েস্ট বডি
মাঠ | টাইপ | প্রয়োজন | বর্ণনা |
সত্তা | MediaEntity অবজেক্টের তালিকা | হ্যাঁ | বিষয়বস্তু সত্তার তালিকা (সর্বোচ্চ 5), শুধুমাত্র শীর্ষ পাঁচটি রাখা হবে এবং বাকিগুলি বাদ দেওয়া হবে৷ ব্যবহারকারী সমস্ত সত্তা দেখা শেষ করেছেন তা বোঝাতে খালি তালিকা অনুমোদিত৷ |
ক্ষেত্র entities
পৃথক movieEntity
এবং tvEpisodeEntity
ধারণ করে।
মাঠ | টাইপ | প্রয়োজন | বর্ণনা |
মুভি সত্তা | মুভি এন্টিটি | হ্যাঁ | ContinuationCluster-এর মধ্যে একটি চলচ্চিত্র প্রতিনিধিত্বকারী একটি বস্তু। |
tvEpisodeEntity | TvEpisodeEntity | হ্যাঁ | ContinuationCluster-এর মধ্যে একটি টিভি পর্বের প্রতিনিধিত্বকারী একটি বস্তু। |
এন্টিটি অ্যারের প্রতিটি অবজেক্ট অবশ্যই সাধারণ এবং টাইপ-নির্দিষ্ট ক্ষেত্রগুলির সাথে MovieEntity
এবং TvEpisodeEntity
নামে উপলব্ধ MediaEntity প্রকারগুলির একটি হতে হবে৷
নিম্নলিখিত কোড স্নিপেট publishContinuationCluster
API-এর জন্য অনুরোধের বডি পেলোড প্রদর্শন করে।
{
"entities": [
{
"movieEntity": {
"watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
"name": "Movie1",
"platform_specific_playback_uris": [
"https://www.example.com/entity_uri_for_android",
"https://www.example.com/entity_uri_for_iOS"
],
"poster_images": [
"http://www.example.com/movie1_img1.png",
"http://www.example.com/movie1_imag2.png"
],
"last_engagement_time_millis": 864600000,
"duration_millis": 5400000,
"last_play_back_position_time_millis": 3241111
}
},
{
"tvEpisodeEntity": {
"watch_next_type": "WATCH_NEXT_TYPE_CONTINUE",
"name": "TV SERIES EPISODE 1",
"platform_specific_playback_uris": [
"https://www.example.com/entity_uri_for_android",
"https://www.example.com/entity_uri_for_iOS"
],
"poster_images": [
"http://www.example.com/episode1_img1.png",
"http://www.example.com/episode1_imag2.png"
],
"last_engagement_time_millis": 864600000,
"duration_millis": 1800000,
"last_play_back_position_time_millis": 2141231,
"episode_display_number": "1",
"season_number": "1",
"show_title": "title"
}
}
]
}
ভিডিও আবিষ্কারের ডেটা মুছুন
ভিডিও আবিষ্কার ডেটা সরাতে clearClusters
API ব্যবহার করুন।
ভিডিও আবিষ্কার ডেটা থেকে সত্তাগুলি সরাতে POST URL ব্যবহার করুন৷ ধারাবাহিকতা ক্লাস্টার ডেটা মুছে ফেলতে, নিম্নলিখিত সিনট্যাক্স ব্যবহার করে clearClusters
API-এ একটি POST অনুরোধ করুন।
https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearClusters
কোথায়:
-
package_name
: মিডিয়া প্রদানকারীর প্যাকেজের নাম। -
accountId
: আপনার সিস্টেমে ব্যবহারকারীর অ্যাকাউন্টের জন্য অনন্য আইডি। এটি অবশ্যই অন-ডিভাইস পাথে ব্যবহৃতaccountId
সাথে মেলে। -
profileId
: আপনার সিস্টেমে অ্যাকাউন্টের মধ্যে ব্যবহারকারীর প্রোফাইলের জন্য অনন্য আইডি। এটি অবশ্যই অন-ডিভাইস পাথে ব্যবহৃত প্রোফাইল আইডির সাথে মেলে।
clearClusters
API-এর পেলোডে শুধুমাত্র একটি ক্ষেত্র রয়েছে, reason
, যেটিতে একটি DeleteReason
রয়েছে যা ডেটা অপসারণের কারণ উল্লেখ করে।
{
"reason": "DELETE_REASON_LOSS_OF_CONSENT"
}
টেস্টিং
সফলভাবে ডেটা পোস্ট করার পরে, প্রত্যাশিত বিষয়বস্তু Google TV এবং Android এবং iOS Google TV মোবাইল অ্যাপের মতো টার্গেট Google সারফেসগুলিতে "কন্টিনিউ ওয়াচিং" সারিতে উপস্থিত হয়েছে কিনা তা যাচাই করতে একটি ব্যবহারকারী পরীক্ষার অ্যাকাউন্ট ব্যবহার করুন৷
পরীক্ষায়, কয়েক মিনিটের একটি যুক্তিসঙ্গত প্রচার বিলম্বের অনুমতি দিন এবং দেখার প্রয়োজনীয়তাগুলি মেনে চলুন, যেমন একটি সিনেমার অংশ দেখা বা একটি পর্ব শেষ করা। বিস্তারিত জানার জন্য অ্যাপ ডেভেলপারদের জন্য পরবর্তী দেখুন নির্দেশিকা দেখুন।