एंगेजमेंट SDK सोशल: तीसरे पक्ष के तकनीकी इंटिग्रेशन के निर्देश

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

इस गाइड में, डेवलपर पार्टनर के लिए निर्देश दिए गए हैं. इनमें बताया गया है कि Engage के कॉन्टेंट प्लैटफ़ॉर्म पर, सोशल मीडिया कॉन्टेंट कैसे डिलीवर किया जा सकता है.

कैटगरी के लिए सहायता और प्लैटफ़ॉर्म

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

स्थिति कॉन्टेंट की कैटगरी या इस्तेमाल का उदाहरण इन प्लैटफ़ॉर्म पर उपलब्ध है
इस्तेमाल किया जा सकता है
(सभी प्लैटफ़ॉर्म पर इस्तेमाल किया जा सकता है)
  • सोशल नेटवर्क
  • इमेज / मीम
  • वीडियो क्लिप / कम अवधि का वीडियो
  • असल ज़िंदगी में होने वाले मीटअप
  • क्लाउड फ़ोटो स्टोरेज
  • संग्रह
  • Play Store में ऐप्लिकेशन टैब
  • Play Store का 'आप' टैब
  • Play Store पर मौजूद स्टोर पेज
काम नहीं करता है
  • लाइव वीडियो चैट
  • फटाफट मैसेज सेवा, इंटरनेट पर मौजूदगी शेयर करना या लाइव डेटा
  • फ़ाइल शेयर और डाउनलोड करने की सुविधा देने वाले ऐप्लिकेशन
  • डेटिंग
  • अवतार जनरेटर

इंटिग्रेशन की जानकारी

यहां दिए गए सेक्शन में, इंटिग्रेशन के बारे में जानकारी दी गई है.

शब्दावली

सुझाव के क्लस्टर, किसी एक डेवलपर पार्टनर के कॉन्टेंट में से आपकी दिलचस्पी के हिसाब से सुझाव दिखाते हैं.

आपके सुझावों का स्ट्रक्चर इस तरह का होता है:

सुझाव के क्लस्टर: एक यूज़र इंटरफ़ेस (यूआई) दिखता है. इसमें एक ही डेवलपर पार्टनर के कॉन्टेंट में सुझाव दिखाए जाते हैं.

सुझाव के हर क्लस्टर में, इनमें से किसी एक तरह की इकाइयां शामिल होती हैं :

  • PortraitMediaEntity
  • SocialPostEntity

PortraitMediaEntity में पोस्ट के लिए, पोर्ट्रेट साइज़ वाली एक इमेज शामिल होनी चाहिए. प्रोफ़ाइल और इंटरैक्शन से जुड़ा मेटाडेटा देना ज़रूरी नहीं है.

  • पोस्ट करें

    • पोर्ट्रेट मोड में ली गई इमेज और टाइमस्टैंप या
    • पोर्ट्रेट मोड में इमेज + टेक्स्ट कॉन्टेंट और टाइमस्टैंप
  • प्रोफ़ाइल

    • अवतार, नाम या हैंडल, अतिरिक्त इमेज
  • इंटरैक्शन

    • सिर्फ़ गिनती और लेबल करना या
    • संख्या और विज़ुअल (आइकॉन)

SocialPostEntity में प्रोफ़ाइल, पोस्ट, और इंटरैक्शन से जुड़ा मेटाडेटा शामिल होता है.

  • प्रोफ़ाइल

    • अवतार, नाम या हैंडल, अतिरिक्त टेक्स्ट, अतिरिक्त इमेज
  • पोस्ट करें

    • टेक्स्ट और टाइमस्टैंप या
    • रिच मीडिया (इमेज या रिच यूआरएल) और टाइमस्टैंप या
    • टेक्स्ट और रिच मीडिया (इमेज या रिच यूआरएल) और टाइमस्टैंप या
    • वीडियो की झलक (थंबनेल और अवधि) और टाइमस्टैंप
  • इंटरैक्शन

    • सिर्फ़ गिनती और लेबल करना या
    • संख्या और विज़ुअल (आइकॉन)

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

कम से कम एपीआई लेवल: 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.6.0'
}

खास जानकारी

यह डिज़ाइन, सीमित सेवा को लागू करने पर आधारित है.

कोई क्लाइंट, अलग-अलग क्लस्टर टाइप के लिए, इस सीमा तक डेटा पब्लिश कर सकता है:

क्लस्टर का टाइप क्लस्टर की सीमाएं किसी क्लस्टर में इकाइयों की कम से कम संख्या किसी क्लस्टर में इकाइयों की ज़्यादा से ज़्यादा संख्या
सुझाव वाले क्लस्टर ज़्यादा से ज़्यादा सात कम से कम एक (PortraitMediaEntity या SocialPostEntity) ज़्यादा से ज़्यादा 50 (PortraitMediaEntity या SocialPostEntity)

पहला चरण: इकाई का डेटा देना

SDK टूल ने हर तरह के आइटम को दिखाने के लिए, अलग-अलग इकाइयां तय की हैं. यह SDK टूल, सोशल कैटगरी के लिए इन इकाइयों के साथ काम करता है:

  1. PortraitMediaEntity
  2. SocialPostEntity

यहां दिए गए चार्ट में, हर तरह के प्रॉडक्ट के लिए उपलब्ध एट्रिब्यूट और ज़रूरी शर्तों के बारे में बताया गया है.

PortraitMediaEntity

एट्रिब्यूट ज़रूरी शर्त ब्यौरा फ़ॉर्मैट
ऐक्शन यूआरआई Google TV के अलावा, अन्य सभी प्लैटफ़ॉर्म के लिए ज़रूरी है

सेवा देने वाली कंपनी के ऐप्लिकेशन में मौजूद इकाई का डीप लिंक.

ध्यान दें: एट्रिब्यूशन के लिए, डीप लिंक का इस्तेमाल किया जा सकता है. अक्सर पूछे जाने वाले सवाल देखें

यूआरआई
PlatformSpecificPlayback Google TV प्लैटफ़ॉर्म के लिए ज़रूरी है

Google TV और मोबाइल जैसे प्लैटफ़ॉर्म के लिए, सेवा देने वाली कंपनी के ऐप्लिकेशन में मौजूद इकाई का डीप लिंक.

PlatformSpecificPlayback ऑब्जेक्ट की सूची
सुझाव की वजह वैकल्पिक उपयोगकर्ता को कॉन्टेंट का सुझाव देने की वजह. RecommendationReason ऑब्जेक्ट
टिप्पणियों की खास जानकारी वैकल्पिक पोस्ट पर की गई टिप्पणियों की खास जानकारी. स्ट्रिंग
पोस्ट से जुड़ा मेटाडेटा (ज़रूरी है)
इमेज ज़रूरी है

इमेज पोर्ट्रेट आसपेक्ट रेशियो में होनी चाहिए.

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

अगर पोस्ट में कोई वीडियो है, तो सेवा देने वाली कंपनी को वीडियो का थंबनेल देना चाहिए, ताकि उसे इमेज के तौर पर दिखाया जा सके.

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
टेक्स्ट कॉन्टेंट वैकल्पिक किसी पोस्ट, अपडेट वगैरह का मुख्य टेक्स्ट. स्ट्रिंग (ज़्यादा से ज़्यादा 140 वर्ण इस्तेमाल करने का सुझाव दिया गया है)
टाइमस्टैंप वैकल्पिक पोस्ट पब्लिश होने का समय. मिलीसेकंड में Epoch टाइमस्टैंप
वीडियो वाला कॉन्टेंट है वैकल्पिक क्या पोस्ट में कोई वीडियो है? बूलियन
वीडियो का कुल समय वैकल्पिक वीडियो की अवधि, मिलीसेकंड में. लंबा
प्रोफ़ाइल से जुड़ा मेटाडेटा (ज़रूरी नहीं)
नाम ज़रूरी है प्रोफ़ाइल का नाम, आईडी या हैंडल, जैसे कि "John Doe", "@TeamPixel" स्ट्रिंग(ज़्यादा से ज़्यादा 25 वर्णों का सुझाव दिया जाता है)
अवतार ज़रूरी है

उपयोगकर्ता की प्रोफ़ाइल फ़ोटो या अवतार इमेज.

स्क्वेयर 1:1 इमेज

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
अन्य इमेज वैकल्पिक

प्रोफ़ाइल बैज. उदाहरण के लिए - 'पुष्टि हो चुकी है' बैज

स्क्वेयर 1:1 इमेज

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
इंटरैक्शन से जुड़ा मेटाडेटा (ज़रूरी नहीं)
गिनती वैकल्पिक

इंटरैक्शन की संख्या दिखाएं.उदाहरण के लिए, "37 लाख.".

ध्यान दें: अगर संख्या और संख्या की वैल्यू, दोनों दी गई हैं, तो संख्या का इस्तेमाल किया जाएगा.

ध्यान दें: पार्टनर को Count या CountWithOptionalLabel में से किसी एक का इस्तेमाल करना चाहिए.

स्ट्रिंग

CountWithOptionalLabel वैकल्पिक

किसी वैकल्पिक लेबल के साथ इंटरैक्शन की संख्या बताएं.उदाहरण के लिए - "37 लाख लाइक.".

ध्यान दें: अगर CountWithOptionalLabel और Count Value, दोनों दिए गए हैं, तो इनमें से किसी एक का इस्तेमाल किया जाएगा.

ध्यान दें: पार्टनर को Count या CountWithOptionalLabel में से किसी एक का इस्तेमाल करना चाहिए.

स्ट्रिंग

वैल्यू की संख्या वैकल्पिक

इंटरैक्शन की संख्या को वैल्यू के तौर पर दिखाया जाता है.

ध्यान दें: अगर आपका ऐप्लिकेशन इस लॉजिक को मैनेज नहीं करता है कि बड़ी संख्या को अलग-अलग डिसप्ले साइज़ के लिए कैसे ऑप्टिमाइज़ किया जाए, तो Count के बजाय Count Value दें. अगर Count और Count Value, दोनों दिए गए हैं, तो Count का इस्तेमाल किया जाता है.

लंबा
लेबल वैकल्पिक यह बताएं कि इंटरैक्शन लेबल किस लिए है. उदाहरण के लिए - "पसंद".

स्ट्रिंग

विज़ुअल वैकल्पिक

यह बताएं कि इंटरैक्शन किस लिए है. उदाहरण के लिए - इमेज में, पसंद करने का आइकॉन और इमोजी दिख रहा है.

एक से ज़्यादा इमेज दी जा सकती हैं. हालांकि, ऐसा हो सकता है कि सभी इमेज, डिवाइस के सभी नाप या आकार पर न दिखें.

ध्यान दें: इमेज, स्क्वेयर 1:1 साइज़ की होनी चाहिए

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
DisplayTimeWindow (ज़रूरी नहीं) - प्लैटफ़ॉर्म पर कॉन्टेंट दिखाने के लिए, समयसीमा सेट करें
शुरू होने का टाइमस्टैंप वैकल्पिक

वह Epoch टाइमस्टैंप जिसके बाद, कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जाना चाहिए.

अगर इस नीति को सेट नहीं किया जाता है, तो कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जा सकता है.

मिलीसेकंड में Epoch टाइमस्टैंप
खत्म होने का टाइमस्टैंप वैकल्पिक

वह epoch टाइमस्टैंप जिसके बाद, कॉन्टेंट को प्लैटफ़ॉर्म पर नहीं दिखाया जाता.

अगर इस नीति को सेट नहीं किया जाता है, तो कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जा सकता है.

मिलीसेकंड में Epoch टाइमस्टैंप

SocialPostEntity

एट्रिब्यूट ज़रूरी शर्त ब्यौरा फ़ॉर्मैट
ऐक्शन यूआरआई ज़रूरी है

सेवा देने वाली कंपनी के ऐप्लिकेशन में मौजूद इकाई का डीप लिंक.

ध्यान दें: एट्रिब्यूशन के लिए, डीप लिंक का इस्तेमाल किया जा सकता है. अक्सर पूछे जाने वाले सवाल देखें

यूआरआई
PlatformSpecificPlayback यूआरआई Google TV प्लैटफ़ॉर्म के लिए ज़रूरी है

Google TV और मोबाइल जैसे प्लैटफ़ॉर्म के लिए, सेवा देने वाली कंपनी के ऐप्लिकेशन में मौजूद इकाई का डीप लिंक.

PlatformSpecificPlayback ऑब्जेक्ट की सूची
सुझाव की वजह वैकल्पिक उपयोगकर्ता को कॉन्टेंट का सुझाव देने की वजह. RecommendationReason ऑब्जेक्ट
टिप्पणियों की खास जानकारी वैकल्पिक पोस्ट पर की गई टिप्पणियों की खास जानकारी. स्ट्रिंग

पोस्ट से जुड़ा मेटाडेटा (ज़रूरी है)

TextContent, Image या WebContent में से कम से कम एक का होना ज़रूरी है

इमेज वैकल्पिक

इमेज पोर्ट्रेट आसपेक्ट रेशियो में होनी चाहिए.

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

अगर पोस्ट में कोई वीडियो है, तो सेवा देने वाली कंपनी को वीडियो का थंबनेल देना चाहिए, ताकि उसे इमेज के तौर पर दिखाया जा सके.

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
टेक्स्ट कॉन्टेंट वैकल्पिक किसी पोस्ट, अपडेट वगैरह का मुख्य टेक्स्ट. स्ट्रिंग (ज़्यादा से ज़्यादा 140 वर्ण इस्तेमाल करने का सुझाव दिया गया है)
वीडियो कॉन्टेंट (ज़रूरी नहीं)
कुल समय ज़रूरी है वीडियो की अवधि, मिलीसेकंड में. लंबा
इमेज ज़रूरी है वीडियो कॉन्टेंट की इमेज की झलक. ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
लिंक की झलक (ज़रूरी नहीं)
लिंक की झलक - टाइटल ज़रूरी है वेब पेज के कॉन्टेंट का टाइटल दिखाने के लिए टेक्स्ट स्ट्रिंग
लिंक की झलक - होस्टनेम ज़रूरी है वेब पेज के मालिक के बारे में बताने वाला टेक्स्ट, जैसे कि "इनसाइडर" स्ट्रिंग
लिंक की झलक - इमेज वैकल्पिक वेब कॉन्टेंट के लिए हीरो इमेज ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
टाइमस्टैंप वैकल्पिक पोस्ट पब्लिश होने का समय. मिलीसेकंड में Epoch टाइमस्टैंप
प्रोफ़ाइल से जुड़ा मेटाडेटा (ज़रूरी नहीं)
नाम ज़रूरी है प्रोफ़ाइल का नाम, आईडी या हैंडल, जैसे कि "John Doe", "@TeamPixel." स्ट्रिंग(ज़्यादा से ज़्यादा 25 वर्णों का सुझाव दिया जाता है)
अतिरिक्त टेक्स्ट वैकल्पिक

इसका इस्तेमाल प्रोफ़ाइल आईडी, हैंडल या अतिरिक्त मेटाडेटा के तौर पर किया जा सकता है

उदाहरण के लिए, "@John-Doe", "50 लाख फ़ॉलोअर", "आपको यह पसंद आ सकता है", "ट्रेंडिंग", "पांच नई पोस्ट"

स्ट्रिंग(ज़्यादा से ज़्यादा 40 वर्णों का सुझाव दिया जाता है)
अवतार ज़रूरी है

उपयोगकर्ता की प्रोफ़ाइल फ़ोटो या अवतार इमेज.

स्क्वेयर 1:1 इमेज

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
अन्य इमेज वैकल्पिक

प्रोफ़ाइल बैज, जैसे कि 'पुष्टि हो चुकी है' बैज

स्क्वेयर 1:1 इमेज

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
इंटरैक्शन से जुड़ा मेटाडेटा (ज़रूरी नहीं)
गिनती ज़रूरी है

इंटरैक्शन की संख्या दिखाएं.उदाहरण के लिए - "37 लाख."

ध्यान दें: पार्टनर को Count या CountWithOptionalLabel में से किसी एक का इस्तेमाल करना चाहिए.

स्ट्रिंग
CountWithOptionalLabel ज़रूरी है

किसी वैकल्पिक लेबल के साथ इंटरैक्शन की संख्या बताएं.उदाहरण के लिए - "37 लाख लाइक."

ध्यान दें: पार्टनर को Count या CountWithOptionalLabel में से किसी एक का इस्तेमाल करना चाहिए.

स्ट्रिंग
लेबल

वैकल्पिक

अगर यह वैल्यू नहीं दी गई है, तो विज़ुअल की वैल्यू दी जानी चाहिए.

यह बताएं कि इंटरैक्शन किस लिए है. उदाहरण के लिए - "पसंद." स्ट्रिंग (हमारा सुझाव है कि संख्या और लेबल को मिलाकर ज़्यादा से ज़्यादा 20 वर्ण इस्तेमाल करें)
विज़ुअल

वैकल्पिक

अगर यह वैल्यू नहीं दी गई है, तो लेबल की वैल्यू दी जानी चाहिए.

यह बताएं कि इंटरैक्शन किस लिए है. उदाहरण के लिए - 'पसंद करें' आइकॉन और इमोजी दिखाने वाली इमेज.

एक से ज़्यादा इमेज दी जा सकती हैं. हालांकि, ऐसा हो सकता है कि सभी इमेज, डिवाइस के सभी नाप या आकार पर न दिखें.

स्क्वेयर 1:1 इमेज

ज़्यादा जानकारी के लिए, इमेज की खास जानकारी देखें.
DisplayTimeWindow (ज़रूरी नहीं) - प्लैटफ़ॉर्म पर कॉन्टेंट दिखाने के लिए, समयसीमा सेट करें
शुरू होने का टाइमस्टैंप वैकल्पिक

वह Epoch टाइमस्टैंप जिसके बाद, कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जाना चाहिए.

अगर इस नीति को सेट नहीं किया जाता है, तो कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जा सकता है.

मिलीसेकंड में Epoch टाइमस्टैंप
खत्म होने का टाइमस्टैंप वैकल्पिक

वह epoch टाइमस्टैंप जिसके बाद, कॉन्टेंट को प्लैटफ़ॉर्म पर नहीं दिखाया जाता.

अगर इस नीति को सेट नहीं किया जाता है, तो कॉन्टेंट को प्लैटफ़ॉर्म पर दिखाया जा सकता है.

मिलीसेकंड में Epoch टाइमस्टैंप

इमेज की जानकारी

इमेज को सार्वजनिक सीडीएन पर होस्ट किया जाना चाहिए, ताकि Google उन्हें ऐक्सेस कर सके.

फ़ाइल फ़ॉर्मैट

PNG, JPG, स्टैटिक GIF, WebP

फ़ाइल का ज़्यादा से ज़्यादा साइज़

5120 केबी

कुछ और सुझाव

  • इमेज के लिए सुझाया गया सेफ़ एरिया: अपने मुख्य कॉन्टेंट को इमेज के बीच वाले 80% हिस्से में रखें.
  • पारदर्शी बैकग्राउंड का इस्तेमाल करें, ताकि इमेज गहरे और हल्के रंग वाली थीम की सेटिंग में सही तरीके से दिखे.

दूसरा चरण: क्लस्टर डेटा उपलब्ध कराना

हमारा सुझाव है कि कॉन्टेंट पब्लिश करने का काम बैकग्राउंड में किया जाए. उदाहरण के लिए, WorkManager का इस्तेमाल करके. साथ ही, इसे नियमित तौर पर या किसी इवेंट के आधार पर शेड्यूल किया जाए. उदाहरण के लिए, हर बार जब उपयोगकर्ता ऐप्लिकेशन खोले या जब उपयोगकर्ता ने किसी नए खाते को फ़ॉलो किया हो

AppEngageSocialClient, सोशल क्लस्टर पब्लिश करने के लिए ज़िम्मेदार है.

क्लाइंट में क्लस्टर पब्लिश करने के लिए, ये एपीआई उपलब्ध हैं:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

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

आपके पास हर उस क्लस्टर टाइप के लिए सेवा की उपलब्धता देखने का विकल्प है जिसे आपको पब्लिश करना है. isServiceAvailable एपीआई, अनुरोध ऑब्जेक्ट ServiceAvailabilityRequest को स्वीकार करता है. इसमें क्लस्टर टाइप शामिल होते हैं. इनके लिए, सेवा की उपलब्धता की जांच करनी होती है. ServiceAvailabilityRequest के लिए ज़रूरी ClusterType enum वैल्यू, इस टेबल में देखी जा सकती हैं.

क्लस्टर का टाइप क्लस्टर टाइप कॉन्स्टेंट इंटिज़र वैल्यू
कोई जानकारी नहीं है TYPE_UNKNOWN 0
सुझाव वाला क्लस्टर TYPE_RECOMMENDATION 1
चुनिंदा क्लस्टर TYPE_FEATURED 2
जारी रखने वाला क्लस्टर TYPE_CONTINUATION 3
यूज़र मैनेजमेंट क्लस्टर TYPE_ENGAGEMENT 8
सदस्यता क्लस्टर TYPE_SUBSCRIPTION 12

Kotlin

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

Java

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
शर्तों के साथ सेवा की उपलब्धता की सुविधा

इंटिग्रेट किए गए कुछ ऐप्लिकेशन, खास कॉन्फ़िगरेशन का अनुरोध करते हैं. इससे Engage सेवा को समय-समय पर चालू और बंद किया जा सकता है, ताकि सेवा देने की लागत कम की जा सके. हालांकि, कॉन्टेंट को रुक-रुककर इंजेस्ट करने की इस रणनीति से, उपयोगकर्ता अनुभव पर बुरा असर पड़ता है: पुराना कॉन्टेंट नहीं दिखाया जाएगा और कुछ प्लैटफ़ॉर्म पर कॉन्टेंट नहीं दिखेगा.

Engage SDK के वर्शन 1.6.0 से, खास क्लस्टर टाइप की उपलब्धता की जांच की जा सकती है. अगर आपको किसी भी तरह के क्लस्टर के लिए इस सुविधा को ऑप्ट-इन करना है, तो engage-developers@google.com पर संपर्क करें.

SDK टूल के 1.6.0 से पहले के वर्शन के लिए (अब सेवा में नहीं है)

Kotlin

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

Java

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 ऑब्जेक्ट की सूची पब्लिश करने के लिए किया जाता है.

RecommendationCluster ऑब्जेक्ट में ये एट्रिब्यूट हो सकते हैं:

एट्रिब्यूट ज़रूरी शर्त ब्यौरा
SocialPostEntity या PortraitMediaEntity की सूची ज़रूरी है उन इकाइयों की सूची जिनसे इस सुझाव क्लस्टर के लिए सुझाव बनते हैं. एक क्लस्टर में मौजूद इकाइयां एक ही तरह की होनी चाहिए.
शीर्षक ज़रूरी है

सुझाव वाले क्लस्टर का टाइटल (उदाहरण के लिए, आपके दोस्तों की ओर से सबसे नया).

टेक्स्ट का सुझाया गया साइज़: 25 वर्णों से कम (बहुत लंबे टेक्स्ट में एलिप्सिस दिख सकते हैं)

उपशीर्षक वैकल्पिक सुझावों के क्लस्टर का सबटाइटल.
ऐक्शन यूआरआई वैकल्पिक

पार्टनर ऐप्लिकेशन में मौजूद पेज का डीप लिंक, जहां उपयोगकर्ता सुझावों की पूरी सूची देख सकते हैं.

ध्यान दें: एट्रिब्यूशन के लिए, डीप लिंक का इस्तेमाल किया जा सकता है. अक्सर पूछे जाने वाले सवाल देखें

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build());

जब सेवा को अनुरोध मिलता है, तो एक लेन-देन के अंदर ये कार्रवाइयां होती हैं:

  • सुझावों के क्लस्टर का पूरा मौजूदा डेटा हटा दिया जाता है.
  • अनुरोध से मिले डेटा को पार्स करके, नए 'सुझाव वाले क्लस्टर' में सेव किया जाता है.

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

publishUserAccountManagementRequest

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

साइन इन कार्ड में यह मेटाडेटा शामिल होता है -

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

कार्ड पर दिखाई गई इमेज

16x9 आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) और 1264x712 रिज़ॉल्यूशन वाली इमेज

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

Kotlin

var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java

SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

जब सेवा को अनुरोध मिलता है, तो एक लेन-देन के अंदर ये कार्रवाइयां होती हैं:

  • डेवलपर पार्टनर से मिला मौजूदा UserAccountManagementCluster डेटा हटा दिया जाता है.
  • अनुरोध से मिले डेटा को पार्स करके, अपडेट किए गए UserAccountManagementCluster क्लस्टर में सेव किया जाता है.

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

updatePublishStatus

अगर कारोबार से जुड़ी किसी अंदरूनी वजह से, कोई भी क्लस्टर पब्लिश नहीं किया गया है, तो हमारा सुझाव है कि आप updatePublishStatus एपीआई का इस्तेमाल करके, पब्लिश करने की स्थिति को अपडेट करें. यह इसलिए ज़रूरी है, क्योंकि :

  • सभी स्थितियों में स्टेटस की जानकारी देना ज़रूरी है. भले ही, कॉन्टेंट पब्लिश हो गया हो (STATUS == PUBLISHED). इससे उन डैशबोर्ड को पॉप्युलेट करने में मदद मिलती है जो आपके इंटिग्रेशन की परफ़ॉर्मेंस और अन्य मेट्रिक की जानकारी देने के लिए, इस स्टेटस का इस्तेमाल करते हैं.
  • अगर कोई कॉन्टेंट पब्लिश नहीं किया गया है, लेकिन इंटिग्रेशन की स्थिति नहीं टूटी है (STATUS == NOT_PUBLISHED), तो Google, ऐप्लिकेशन की परफ़ॉर्मेंस के डैशबोर्ड में सूचनाएं ट्रिगर करने से बच सकता है. इससे यह पुष्टि होती है कि कॉन्टेंट को पब्लिश न करने की वजह, सेवा देने वाली कंपनी की ओर से उम्मीद के मुताबिक स्थिति है.
  • इससे डेवलपर को यह जानकारी मिलती है कि डेटा कब पब्लिश किया गया और कब नहीं.
  • Google, स्टेटस कोड का इस्तेमाल करके उपयोगकर्ता को ऐप्लिकेशन में कुछ कार्रवाइयां करने के लिए कह सकता है. इससे उपयोगकर्ता, ऐप्लिकेशन का कॉन्टेंट देख सकते हैं या समस्या को हल कर सकते हैं.

पब्लिश करने की ज़रूरी शर्तें पूरी करने वाले स्टेटस कोड की सूची :

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

अगर किसी उपयोगकर्ता के लॉग इन न होने की वजह से कॉन्टेंट पब्लिश नहीं होता है, तो Google, साइन इन कार्ड पब्लिश करने का सुझाव देगा. अगर किसी वजह से सेवा देने वाली कंपनियां, साइन इन कार्ड पब्लिश नहीं कर पाती हैं, तो हमारा सुझाव है कि वे updatePublishStatus एपीआई को कॉल करें. इसके लिए, उन्हें स्टेटस कोड NOT_PUBLISHED_REQUIRES_SIGN_IN का इस्तेमाल करना होगा

Kotlin

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationsClusters

इस एपीआई का इस्तेमाल, सुझाव वाले क्लस्टर का कॉन्टेंट मिटाने के लिए किया जाता है.

Kotlin

client.deleteRecommendationsClusters()

Java

client.deleteRecommendationsClusters();

अनुरोध मिलने पर, सेवा सुझाव क्लस्टर से मौजूदा डेटा को हटा देती है. किसी गड़बड़ी के मामले में, पूरा अनुरोध अस्वीकार कर दिया जाता है और मौजूदा स्थिति बनी रहती है.

deleteUserManagementCluster

इस एपीआई का इस्तेमाल, UserAccountManagement क्लस्टर का कॉन्टेंट मिटाने के लिए किया जाता है.

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

अनुरोध मिलने पर, सेवा UserAccountManagement क्लस्टर से मौजूदा डेटा को हटा देती है. कोई गड़बड़ी होने पर, पूरा अनुरोध अस्वीकार कर दिया जाता है और मौजूदा स्थिति बनी रहती है.

deleteClusters

इस एपीआई का इस्तेमाल, किसी क्लस्टर टाइप का कॉन्टेंट मिटाने के लिए किया जाता है.

Kotlin

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

Java

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

जब सेवा को अनुरोध मिलता है, तो वह बताए गए क्लस्टर टाइप से मैच करने वाले सभी क्लस्टर से मौजूदा डेटा हटा देती है. क्लाइंट, एक या कई क्लस्टर टाइप पास करने का विकल्प चुन सकते हैं. किसी गड़बड़ी के मामले में, पूरा अनुरोध अस्वीकार कर दिया जाता है और मौजूदा स्थिति बनी रहती है.

गड़बड़ी ठीक करना

हमारा सुझाव है कि पब्लिश एपीआई से टास्क के नतीजे को सुनें, ताकि टास्क को फिर से सबमिट करने और उसे पूरा करने के लिए फ़ॉलो-अप कार्रवाई की जा सके.

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 सेवा को बहुत ज़्यादा बार कॉल किया गया है.

तीसरा चरण: ब्रॉडकास्ट इंटेंट को मैनेज करना

किसी जॉब के ज़रिए कॉन्टेंट पब्लिश करने वाले एपीआई कॉल करने के अलावा, कॉन्टेंट पब्लिश करने का अनुरोध पाने के लिए, BroadcastReceiver सेट अप करना भी ज़रूरी है.

ब्रॉडकास्ट इंटेंट का मकसद, मुख्य रूप से ऐप्लिकेशन को फिर से चालू करना और डेटा को सिंक करने के लिए मजबूर करना है. ब्रॉडकास्ट इंटेंट को बार-बार भेजने के लिए डिज़ाइन नहीं किया गया है. यह सिर्फ़ तब ट्रिगर होता है, जब Engage Service को लगता है कि कॉन्टेंट पुराना हो सकता है. उदाहरण के लिए, एक हफ़्ते पुराना. इससे यह भरोसा बढ़ता है कि उपयोगकर्ता को नया कॉन्टेंट देखने को मिलेगा. भले ही, ऐप्लिकेशन को लंबे समय से इस्तेमाल न किया गया हो.

BroadcastReceiver को इन दो तरीकों से सेट अप करना ज़रूरी है:

  • Context.registerReceiver() का इस्तेमाल करके, BroadcastReceiver क्लास के इंस्टेंस को डाइनैमिक तरीके से रजिस्टर करें. इससे उन ऐप्लिकेशन से बातचीत की जा सकती है जो अब भी मेमोरी में लाइव हैं.

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION
  // broadcast is received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
}
  • अपनी AndroidManifest.xml फ़ाइल में, <receiver> टैग के साथ स्टैटिक तौर पर एलान करें कि आपने इस सुविधा को लागू किया है. इससे ऐप्लिकेशन को ब्रॉडकास्ट इंटेंट मिलते हैं, भले ही वह चालू न हो. साथ ही, ऐप्लिकेशन को कॉन्टेंट पब्लिश करने की अनुमति भी मिलती है.

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
   </receiver>
</application>

सेवा, ये इंटेंट भेजेगी:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION यह इंटेंट मिलने पर, publishRecommendationClusters कॉल शुरू करने का सुझाव दिया जाता है.

इंटिग्रेशन वर्कफ़्लो

इंटिग्रेशन पूरा होने के बाद, उसकी पुष्टि करने के सिलसिलेवार निर्देशों के लिए, Engage डेवलपर इंटिग्रेशन वर्कफ़्लो देखें.

अक्सर पूछे जाने वाले सवाल

अक्सर पूछे जाने वाले सवालों के लिए, Engage SDK के बारे में अक्सर पूछे जाने वाले सवाल देखें.

संपर्क

अगर इंटिग्रेशन की प्रोसेस के दौरान आपको कोई सवाल पूछना है, तो engage-developers@google.com से संपर्क करें. हमारी टीम जल्द से जल्द जवाब देगी.

अगले चरण

इस इंटिग्रेशन को पूरा करने के बाद, आपको ये काम करने होंगे:

  • engage-developers@google.com पर ईमेल भेजें और इंटिग्रेट किया गया APK अटैच करें, ताकि Google उसकी जांच कर सके.
  • Google, इंटिग्रेशन की पुष्टि करता है और इसकी समीक्षा करता है, ताकि यह पक्का किया जा सके कि इंटिग्रेशन उम्मीद के मुताबिक काम कर रहा है. अगर बदलावों की ज़रूरत होगी, तो Google आपसे संपर्क करेगा और ज़रूरी जानकारी देगा.
  • जांच पूरी होने और किसी बदलाव की ज़रूरत न होने पर, Google आपसे संपर्क करके यह सूचना देता है कि अपडेट किए गए और इंटिग्रेट किए गए APK को Play Store पर पब्लिश किया जा सकता है.
  • जब Google इस बात की पुष्टि कर देगा कि आपका अपडेट किया गया APK, Play Store पर पब्लिश हो गया है, तब आपके सुझाव और क्लस्टर पब्लिश कर दिए जाएंगे. साथ ही, वे उपयोगकर्ताओं को दिखने लगेंगे.