टीवी इंटिग्रेशन के लिए Engage SDK टूल की गाइड

'देखना जारी रखें' सुविधा, कंटिन्यूएशन क्लस्टर का इस्तेमाल करती है. इससे एक ही यूज़र इंटरफ़ेस (यूआई) ग्रुपिंग में, अलग-अलग ऐप्लिकेशन से अधूरे वीडियो और टीवी सीज़न के अगले एपिसोड दिखाए जाते हैं. इस क्लस्टर में, उनकी इकाइयों को हाइलाइट किया जा सकता है. Engage SDK का इस्तेमाल करके, 'देखना जारी रखें' सुविधा के ज़रिए यूज़र ऐक्टिविटी को बढ़ाने का तरीका जानने के लिए, यह गाइड पढ़ें.

सेशन की तैयारी

शुरू करने से पहले, यह तरीका अपनाएं:

  1. टारगेट एपीआई 19 या उसके बाद के वर्शन पर अपडेट करें

  2. अपने ऐप्लिकेशन में 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
      }
    
  3. AndroidManifest.xml फ़ाइल में, Engage सेवा के एनवायरमेंट को प्रोडक्शन पर सेट करें.

    मोबाइल

    
    <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" />
    
  4. टीवी ऐप्लिकेशन के APK के लिए, WRITE_EPG_DATA की अनुमति जोड़ें

    <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
    
  5. बैकग्राउंड सेवा का इस्तेमाल करके, भरोसेमंद कॉन्टेंट पब्लिश करने की पुष्टि करें. जैसे, शेड्यूल करने के लिए androidx.work.

  6. बिना रुकावट वीडियो देखने का बेहतर अनुभव देने के लिए, इन इवेंट के होने पर 'देखना जारी रखें' सुविधा से जुड़ा डेटा पब्लिश करें:

    1. पहली बार लॉगिन करना: जब कोई उपयोगकर्ता पहली बार लॉगिन करता है, तो डेटा पब्लिश करें, ताकि यह पक्का किया जा सके कि उसका देखने का इतिहास तुरंत उपलब्ध हो.
    2. प्रोफ़ाइल बनाना या स्विच करना (एक से ज़्यादा प्रोफ़ाइल वाले ऐप्लिकेशन): अगर आपका ऐप्लिकेशन एक से ज़्यादा प्रोफ़ाइलें इस्तेमाल करने की सुविधा देता है, तो उपयोगकर्ता के प्रोफ़ाइल बनाने या स्विच करने पर डेटा पब्लिश करें.
    3. वीडियो चलाने में रुकावट: जब उपयोगकर्ता वीडियो को रोकते हैं या बंद करते हैं या जब वीडियो चलाने के दौरान ऐप्लिकेशन बंद हो जाता है, तब डेटा पब्लिश करें. इससे उपयोगकर्ताओं को वीडियो वहीं से शुरू करने में मदद मिलती है जहां उन्होंने उसे छोड़ा था.
    4. 'देखना जारी रखें' ट्रे में किए गए अपडेट (अगर सुविधा उपलब्ध है): जब कोई उपयोगकर्ता 'देखना जारी रखें' ट्रे से कोई आइटम हटाता है, तो अपडेट किया गया डेटा पब्लिश करके उस बदलाव को दिखाएं.
    5. वीडियो पूरा देखा गया:
      1. फ़िल्मों के लिए, 'देखना जारी रखें' ट्रे से पूरी हो चुकी फ़िल्म को हटाएं. अगर फ़िल्म किसी सीरीज़ का हिस्सा है, तो अगली फ़िल्म जोड़ें, ताकि उपयोगकर्ता की दिलचस्पी बनी रहे.
      2. एपिसोड के लिए, पूरे सुने जा चुके एपिसोड को हटा दें. अगर सीरीज़ का अगला एपिसोड उपलब्ध है, तो उसे जोड़ें. इससे लोगों को आगे भी एपिसोड सुनने के लिए बढ़ावा मिलेगा.

SDK टूल इंटिग्रेशन

AccountProfile

Google TV पर, "देखना जारी रखें" सुविधा को आपकी पसंद के मुताबिक बनाने के लिए, खाते और प्रोफ़ाइल की जानकारी दें. AccountProfile का इस्तेमाल करके, ये जानकारी दें:

  1. खाता आईडी: यह एक यूनीक आइडेंटिफ़ायर है. यह आपके ऐप्लिकेशन में उपयोगकर्ता के खाते को दिखाता है. यह असली खाता आईडी या सही तरीके से छिपाया गया वर्शन हो सकता है.

  2. प्रोफ़ाइल आईडी (ज़रूरी नहीं): अगर आपके ऐप्लिकेशन में एक ही खाते से कई प्रोफ़ाइलें इस्तेमाल की जा सकती हैं, तो किसी खास उपयोगकर्ता प्रोफ़ाइल के लिए यूनीक आइडेंटिफ़ायर दें. यह आइडेंटिफ़ायर, असली या छिपाया गया होना चाहिए.

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

इकाइयां बनाना

एसडीके ने हर आइटम टाइप को दिखाने के लिए अलग-अलग इकाइयां तय की हैं. जारी रखने वाले क्लस्टर में, इन इकाइयों का इस्तेमाल किया जा सकता है:

  1. MovieEntity
  2. TvEpisodeEntity
  3. LiveStreamingVideoEntity
  4. VideoClipEntity

इन इकाइयों के लिए, प्लैटफ़ॉर्म के हिसाब से यूआरआई और पोस्टर इमेज तय करें.

अगर आपने अब तक हर प्लैटफ़ॉर्म—जैसे कि Android TV, Android या iOS—के लिए, वीडियो चलाने के यूआरआई नहीं बनाए हैं, तो उन्हें बनाएं. इसलिए, जब कोई उपयोगकर्ता हर प्लैटफ़ॉर्म पर वीडियो देखना जारी रखता है, तो ऐप्लिकेशन, वीडियो कॉन्टेंट चलाने के लिए टारगेट किए गए प्लेबैक यूआरआई का इस्तेमाल करता है.

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

पोस्टर इमेज के लिए, यूआरआई और पिक्सल डाइमेंशन (ऊंचाई और चौड़ाई) की ज़रूरत होती है. अलग-अलग फ़ॉर्म फ़ैक्टर को टारगेट करने के लिए, एक से ज़्यादा पोस्टर इमेज उपलब्ध कराएं. हालांकि, यह पुष्टि करें कि सभी इमेज का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) 16:9 हो और "देखना जारी रखें" इकाई को सही तरीके से दिखाने के लिए, उनकी ऊंचाई कम से कम 200 पिक्सल हो. खास तौर पर, Google के Entertainment Space में ऐसा होना ज़रूरी है. ऐसा हो सकता है कि 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

इस उदाहरण में, सभी ज़रूरी फ़ील्ड के साथ 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", या "episode 2", या "s1" या "season 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, YouTube वीडियो जैसी उपयोगकर्ता की बनाई गई क्लिप को दिखाता है.

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

यहां सभी ज़रूरी फ़ील्ड के साथ 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()

आपके पास लाइव स्ट्रीमिंग इकाई के लिए, शुरू होने का समय, ब्रॉडकास्टर, ब्रॉडकास्टर आइकॉन या उपलब्धता की समयावधि सेट करने का विकल्प होता है.

एट्रिब्यूट और ज़रूरी शर्तों के बारे में ज़्यादा जानकारी के लिए, एपीआई का संदर्भ देखें.

जारी रखने के लिए क्लस्टर का डेटा उपलब्ध कराना

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 का डेटा सिर्फ़ वयस्क खातों के लिए उपलब्ध होना चाहिए. सिर्फ़ तब पब्लिश करें, जब AccountProfile किसी वयस्क की हो.

अलग-अलग डिवाइसों पर सिंक करने की सुविधा

SyncAcrossDevices फ़्लैग से यह कंट्रोल होता है कि उपयोगकर्ता का ContinuationCluster डेटा, टीवी, फ़ोन, टैबलेट वगैरह जैसे डिवाइसों पर सिंक किया जाता है या नहीं. क्रॉस-डिवाइस सिंक करने की सुविधा डिफ़ॉल्ट रूप से बंद होती है.

वैल्यू:

  • true: 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% की बढ़ोतरी देखने को मिली. ऐसा इसलिए हुआ, क्योंकि उनका कॉन्टेंट कई डिवाइसों पर दिखाया गया था.

वीडियो डिस्कवरी का डेटा मिटाना

उपयोगकर्ता के डेटा को Google TV सर्वर से मैन्युअल तरीके से मिटाने के लिए, client.deleteClusters() तरीके का इस्तेमाल करें. ऐसा, डेटा के रखरखाव की स्टैंडर्ड अवधि (60 दिन) से पहले किया जा सकता है. अनुरोध मिलने पर, सेवा खाते की प्रोफ़ाइल या पूरे खाते के लिए, वीडियो डिस्कवरी से जुड़ा मौजूदा डेटा मिटा देगी.

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 टूल का इंटिग्रेशन सही तरीके से काम कर रहा है. यह Android ऐप्लिकेशन, आपको अपने डेटा की पुष्टि करने के लिए टूल उपलब्ध कराता है. साथ ही, यह पुष्टि करने में मदद करता है कि ब्रॉडकास्ट इंटेंट को सही तरीके से हैंडल किया जा रहा है.

पब्लिश एपीआई को चालू करने के बाद, पुष्टि करने वाले ऐप्लिकेशन में जाकर यह पुष्टि करें कि आपका डेटा सही तरीके से पब्लिश किया जा रहा है. आपका कंटिन्यूएशन क्लस्टर, ऐप्लिकेशन के इंटरफ़ेस में अलग लाइन के तौर पर दिखना चाहिए.

  • अपने ऐप्लिकेशन की Android मेनिफ़ेस्ट फ़ाइल में, सिर्फ़ नॉन-प्रोडक्शन बिल्ड के लिए Engage Service Flag सेट करें.
  • Engage Verify ऐप्लिकेशन इंस्टॉल करें और खोलें
  • अगर isServiceAvailable false है, तो चालू करने के लिए "टॉगल करें" बटन पर क्लिक करें.
  • अपने ऐप्लिकेशन का पैकेज नाम डालें, ताकि पब्लिश करने की प्रोसेस शुरू करने के बाद, पब्लिश किया गया डेटा अपने-आप दिखने लगे.
  • अपने ऐप्लिकेशन में इन कार्रवाइयों को टेस्ट करें:
    • साइन इन करें.
    • अगर लागू हो, तो एक से दूसरी प्रोफ़ाइल पर स्विच करें.
    • वीडियो चलाना शुरू करें, उसे रोकें या होम पेज पर वापस जाएं.
    • वीडियो चलाने के दौरान ऐप्लिकेशन बंद करें.
    • "देखना जारी रखें" लाइन से कोई आइटम हटाएं (अगर यह सुविधा उपलब्ध है).
  • हर कार्रवाई के बाद, पुष्टि करें कि आपके ऐप्लिकेशन ने publishContinuationClusters एपीआई को शुरू किया हो और पुष्टि करने वाले ऐप्लिकेशन में डेटा सही तरीके से दिख रहा हो.
  • पुष्टि करने वाला ऐप्लिकेशन, सही तरीके से लागू की गई इकाइयों के लिए हरे रंग का "सब ठीक है" निशान दिखाएगा.

    पुष्टि करने वाले ऐप्लिकेशन के इस्तेमाल से पुष्टि होने की जानकारी देने वाला स्क्रीनशॉट
    पहली इमेज. Verification App Success
  • पुष्टि करने वाला ऐप्लिकेशन, समस्या वाली किसी भी इकाई को फ़्लैग कर देगा.

    पुष्टि करने वाले ऐप्लिकेशन में गड़बड़ी का स्क्रीनशॉट
    दूसरी इमेज. पुष्टि करने वाले ऐप्लिकेशन में गड़बड़ी हुई
  • गड़बड़ियों वाली इकाइयों की समस्या हल करने के लिए, टीवी के रिमोट का इस्तेमाल करके पुष्टि करने वाले ऐप्लिकेशन में इकाई को चुनें और उस पर क्लिक करें. आपको खास समस्याएं दिखेंगी. साथ ही, समीक्षा के लिए उन्हें लाल रंग में हाइलाइट किया जाएगा. नीचे दिया गया उदाहरण देखें.

    पुष्टि करने वाले ऐप्लिकेशन से जुड़ी गड़बड़ी की जानकारी
    तीसरी इमेज. पुष्टि करने वाले ऐप्लिकेशन से जुड़ी गड़बड़ी की जानकारी

REST API

Engage SDK, REST API उपलब्ध कराता है. इससे, iOS और Roku TV जैसे नॉन-Android प्लैटफ़ॉर्म पर, 'देखना जारी रखें' सुविधा का इस्तेमाल किया जा सकता है. इस एपीआई की मदद से डेवलपर, ऑप्ट-इन करने वाले उपयोगकर्ताओं के लिए "देखना जारी रखें" की स्थिति को अपडेट कर सकते हैं. ऐसा, Android के अलावा अन्य प्लैटफ़ॉर्म से किया जा सकता है.

ज़रूरी शर्तें

  • आपको सबसे पहले, ऑन-डिवाइस Engage SDK टूल पर आधारित इंटिग्रेशन पूरा करना होगा. इस ज़रूरी चरण से, Google के उपयोगकर्ता आईडी और आपके ऐप्लिकेशन के AccountProfile के बीच ज़रूरी संबंध बनता है.
  • एपीआई का ऐक्सेस और पुष्टि करना: Google Cloud प्रोजेक्ट में एपीआई को देखने और चालू करने के लिए, आपको अनुमति वाली सूची में शामिल होना होगा. एपीआई के सभी अनुरोधों के लिए पुष्टि करना ज़रूरी है.

ऐक्सेस पाना

Google Cloud Console में एपीआई को देखने और चालू करने का ऐक्सेस पाने के लिए, आपके खाते का रजिस्टर होना ज़रूरी है.

  1. Google Workspace का ग्राहक आईडी उपलब्ध होना चाहिए. अगर यह सुविधा उपलब्ध नहीं है, तो आपको Google Workspace के साथ-साथ उन सभी Google खातों को सेट अप करना पड़ सकता है जिनका इस्तेमाल करके आपको एपीआई को कॉल करना है.
  2. Google Workspace से जुड़े ईमेल पते का इस्तेमाल करके, Google Cloud Console में खाता सेट अप करें.
  3. नया प्रोजेक्ट बनाना
  4. एपीआई की पुष्टि करने के लिए, एक सेवा खाता बनाएं. सेवा खाता बनाने के बाद, आपको दो आइटम मिलेंगे:
    • सेवा खाते का आईडी.
    • आपके सेवा खाते की कुंजी वाली JSON फ़ाइल. इस फ़ाइल को सुरक्षित रखें. आपको इसकी ज़रूरत बाद में, एपीआई के लिए अपने क्लाइंट की पुष्टि करने के लिए पड़ेगी.
  5. Workspace और उससे जुड़े Google खाते, अब REST API का इस्तेमाल कर सकते हैं. बदलाव लागू होने के बाद, आपको सूचना दी जाएगी कि एपीआई को आपके सेवा खातों से कॉल किया जा सकता है या नहीं.
  6. डेलिगेट किए गए एपीआई कॉल करने की तैयारी करने के लिए, यह तरीका अपनाएं.

पब्लिश कॉन्टिन्यूएशन क्लस्टर

वीडियो डिस्कवरी डेटा पब्लिश करने के लिए, यहां दिए गए सिंटैक्स का इस्तेमाल करके publishContinuationCluster एपीआई पर POST अनुरोध करें.

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/publishContinuationCluster

यहां:

  • package_name: मीडिया सेवा देने वाली कंपनी के पैकेज का नाम
  • accountId: आपके सिस्टम में उपयोगकर्ता के खाते का यूनीक आईडी. यह ऑन-डिवाइस पाथ में इस्तेमाल किए गए accountId से मेल खाना चाहिए.
  • profileId: आपके सिस्टम में मौजूद खाते में, उपयोगकर्ता की प्रोफ़ाइल का यूनीक आईडी. यह डिवाइस पर मौजूद पाथ में इस्तेमाल किए गए profileId से मेल खाना चाहिए.

बिना प्रोफ़ाइल वाले खाते का यूआरएल यह है:

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/publishContinuationCluster

अनुरोध के पेलोड को entities फ़ील्ड में दिखाया गया है. entities कॉन्टेंट की इकाइयों की सूची दिखाता है. ये इकाइयां MovieEntity या TVEpisodeEntity हो सकती हैं. यह एक आवश्यक फ़ील्ड है.

अनुरोध का मुख्य हिस्सा

फ़ील्ड

Type

ज़रूरी है

ब्यौरा

इकाइयां

MediaEntity ऑब्जेक्ट की सूची

हां

कॉन्टेंट इकाइयों की सूची (ज़्यादा से ज़्यादा पांच). सिर्फ़ टॉप पांच इकाइयों को बनाए रखा जाएगा और बाकी को हटा दिया जाएगा. खाली सूची का इस्तेमाल किया जा सकता है. इससे पता चलता है कि उपयोगकर्ता ने सभी इकाइयां देख ली हैं.

entities फ़ील्ड में अलग-अलग movieEntity और tvEpisodeEntity शामिल हैं.

फ़ील्ड

Type

ज़रूरी है

ब्यौरा

movieEntity

MovieEntity

हां

यह एक ऐसा ऑब्जेक्ट है जो ContinuationCluster में मौजूद किसी फ़िल्म को दिखाता है.

tvEpisodeEntity

TvEpisodeEntity

हां

यह एक ऑब्जेक्ट है. यह ContinuationCluster में मौजूद टीवी एपिसोड के बारे में बताता है.

entities ऐरे में मौजूद हर ऑब्जेक्ट, उपलब्ध MediaEntity टाइप में से एक होना चाहिए. जैसे, MovieEntity और TvEpisodeEntity. साथ ही, इसमें सामान्य और टाइप के हिसाब से फ़ील्ड होने चाहिए.

यहां दिए गए कोड स्निपेट में, 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 यूआरएल का इस्तेमाल करें. जारी रखने की सुविधा से जुड़े क्लस्टर का डेटा मिटाने के लिए, clearClusters एपीआई पर POST अनुरोध करें. इसके लिए, यहां दिया गया सिंटैक्स इस्तेमाल करें.

https://tvvideodiscovery.googleapis.com/v1/packages/{package_name}/accounts/{account_id}/profiles/{profile_id}/clearClusters

यहां:

  • package_name: मीडिया सेवा देने वाली कंपनी के पैकेज का नाम.
  • accountId: आपके सिस्टम में उपयोगकर्ता के खाते का यूनीक आईडी. यह ऑन-डिवाइस पाथ में इस्तेमाल किए गए accountId से मेल खाना चाहिए.
  • profileId: आपके सिस्टम में मौजूद खाते में, उपयोगकर्ता की प्रोफ़ाइल का यूनीक आईडी. यह डिवाइस पर मौजूद पाथ में इस्तेमाल किए गए profileId से मेल खाना चाहिए.

clearClusters एपीआई के पेलोड में सिर्फ़ एक फ़ील्ड, reason होता है. इसमें DeleteReason होता है, जो डेटा हटाने की वजह बताता है.

{
  "reason": "DELETE_REASON_LOSS_OF_CONSENT"
}

टेस्ट करना

डेटा पोस्ट करने के बाद, उपयोगकर्ता के टेस्ट खाते का इस्तेमाल करके यह पुष्टि करें कि Google TV और Android और iOS पर Google TV के मोबाइल ऐप्लिकेशन जैसे टारगेट किए गए Google प्लैटफ़ॉर्म पर, "देखना जारी रखें" लाइन में उम्मीद के मुताबिक कॉन्टेंट दिख रहा है.

टेस्टिंग के दौरान, कुछ मिनटों का समय दें, ताकि बदलाव लागू हो सकें. साथ ही, वीडियो देखने से जुड़ी ज़रूरी शर्तों का पालन करें. जैसे, किसी फ़िल्म का कुछ हिस्सा देखना या किसी एपिसोड को पूरा देखना. ज़्यादा जानकारी के लिए, ऐप्लिकेशन डेवलपर के लिए 'अगला वीडियो देखें' सुविधा से जुड़े दिशा-निर्देश देखें.