App Store Review API की मदद से, Google Play पर रजिस्टर किए गए तीसरे पक्ष के ऐप स्टोर, अपने स्टोर पर होस्ट किए गए ऐप्लिकेशन के लिए ज़रूरी जानकारी दे सकते हैं. ये ऐप स्टोर, तीसरे पक्ष के ऐप स्टोर पर Play प्रोग्राम के ज़रिए रजिस्टर किए जाते हैं. इसमें ऐप्लिकेशन का मेटाडेटा, लिस्टिंग, APK बाइनरी, और नीति के पालन से जुड़े एलान शामिल हैं.
एंडपॉइंट, तरीकों, और संसाधन स्कीमा की पूरी सूची देखने के लिए, App Store Review API का रेफ़रंस देखें.
शुरू करने से पहले
App Store Review API को कॉल करने से पहले, आपको एपीआई का ऐक्सेस, सेवा के क्रेडेंशियल, और Google Cloud प्रोजेक्ट सेट अप करना होगा. इसके लिए, आपको शुरू करने से जुड़ी मुख्य गाइड पढ़नी होगी. App Store Review API, हर ऐप्लिकेशन स्टोर के लिए हर मिनट ज़्यादा से ज़्यादा 300 अनुरोध स्वीकार करता है.
एपीआई डिज़ाइन और आर्किटेक्चर
App Store Review API, ऐटॉमिक स्नैपशॉट पैटर्न पर काम करता है. लेन-देन वाले सेशन का इस्तेमाल करने के बजाय, फ़ाइलों को अलग-अलग अपलोड करें. इसके बाद, एक ही एटॉमिक कॉल में पूरी स्थिति को कमिट करें:
- अलग-अलग फ़ाइलें और ऐसेट (एपीके, इमेज, और नीति से जुड़ी फ़ाइलें) अलग-अलग डायरेक्ट कॉल में अपलोड की जाती हैं.
- उन फ़ाइलों के लिए, दिखाए गए आईडी को कैश मेमोरी में सेव करें.
- होस्ट किए गए ऐप्लिकेशन की पूरी स्थिति को एक साथ कमिट करने के लिए, एक ही फ़ाइनल
UpdateAppStoreHostedAppअनुरोध सबमिट किया जाता है.
1. रजिस्ट्रेशन
होस्ट किए गए ऐप्लिकेशन को रजिस्टर करने के लिए, createappstorehostedapp तरीके को कॉल करें. इसमें ऐप्लिकेशन के पैकेज का नाम और आपके स्टोर के पैकेज का नाम डालें.
अनुरोध और रिस्पॉन्स के स्कीमा के बारे में जानकारी के लिए, एपीआई का संदर्भ देखें.
2. बाइनरी और ऐसेट अपलोड करना
होस्ट किए गए ऐप्लिकेशन को रजिस्टर करने के बाद, आपको उसकी ऐसेट अपलोड करनी होंगी. इसके लिए, खास अपलोड एंडपॉइंट का इस्तेमाल करें:
- APKs: ऐप्लिकेशन के सभी APK बाइनरी, जिन्हें
uploadapkका इस्तेमाल करके डिस्ट्रिब्यूट किया जा रहा है. - इमेज: इमेज ऐसेट, जैसे कि ऐप्लिकेशन का आइकॉन और स्क्रीनशॉट (
uploadimageका इस्तेमाल करके). - नीतियां: (अगर ज़रूरी हो) नीति से जुड़ा दस्तावेज़ (
uploadappstoreapppolicydeclarationfileका इस्तेमाल करके).
ऐसेट को कैश मेमोरी में सेव करना और फिर से इस्तेमाल करना
बैंडविड्थ और परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, एक जैसी ऐसेट दोबारा अपलोड न करें.
लौटाए गए सभी apkId, imageId, और fileId टोकन, परसिस्टेंट होते हैं. इन आईडी को अपने बैकएंड डेटाबेस में कैश मेमोरी में सेव किया जा सकता है. साथ ही, होस्ट किए गए ऐप्लिकेशन के बाद के अपडेट में इनका फिर से इस्तेमाल किया जा सकता है. उदाहरण के लिए, अगर आपको किसी होस्ट किए गए ऐप्लिकेशन की जानकारी अपडेट करनी है, लेकिन ऐप्लिकेशन का आइकॉन और स्क्रीनशॉट नहीं बदले हैं, तो अगली बार अपडेट करने के लिए कॉल करते समय, कैश मेमोरी में सेव किए गए imageId टोकन का इस्तेमाल करें.
3. असेंबल करें और कमिट करें
सभी ऐसेट अपलोड करने और उनके आईडी पाने के बाद, आपको होस्ट किए गए ऐप्लिकेशन की पूरी स्थिति को असेंबल करना होगा. इसके बाद, updateappstorehostedapp तरीके का इस्तेमाल करके, इसे कमिट करना होगा. इस तरीके से, होस्ट किए गए ऐप्लिकेशन की पूरी जानकारी, स्थानीय भाषा में स्टोर लिस्टिंग, चालू APK सेट, और सुरक्षा से जुड़ी घोषणाएं स्वीकार की जाती हैं.
यह कॉल, पहले से चालू किसी भी स्थिति को बदलकर, अनुरोध में बताई गई नई स्थिति में बदल देता है.
अनुरोध के मुख्य हिस्से का उदाहरण
यहां एक ऐसा JSON अनुरोध बॉडी दी गई है जो सिंटैक्टिक रूप से मान्य है और जिसमें सभी मुख्य एलिमेंट शामिल हैं:
{
"appStorePackageName": "com.example.thirdparty.store",
"packageName": "com.example.hostedapp.game",
"appDetails": {
"developerName": "Adventure Games Studio Ltd.",
"contactEmail": "support@adventuregames.example.com",
"developerWebsite": "https://adventuregames.example.com"
},
"activeLocalizedStoreListings": [
{
"languageCode": "en-US",
"appName": "Super Quest Legends",
"shortDescription": "An epic fantasy RPG adventure.",
"fullDescription": "Super Quest Legends is an immersive action RPG featuring real-time battles, customizable classes, and a deep fantasy narrative. Journey through a magical realm, fight epic bosses, and team up with friends in dungeon raids.",
"appIconId": "987123",
"screenshotId": [
"102938",
"475869",
"384756"
],
"videoLink": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
{
"languageCode": "es-ES",
"appName": "Super Quest Leyendas",
"shortDescription": "Una aventura épica de RPG fantástico.",
"fullDescription": "Super Quest Leyendas es un RPG de acción inmersivo con batallas en tiempo real, clases personalizables y una profunda narrativa de fantasía. Viaja a través de un reino mágico, lucha contra jefes épicos y únete a amigos en incursiones.",
"appIconId": "987123",
"screenshotId": [
"102938",
"475869",
"384756"
]
}
],
"activeApks": {
"activeApkSets": [
{
"baseApkId": "554433"
},
{
"baseApkId": "990011"
}
]
},
"policyDeclarations": [
{
"declarationId": "POLICY_DECLARATION_ID_TARGET_AUDIENCE_CONTENT",
"responses": [
{
"questionId": "POLICY_QUESTION_ID_TAC_TARGET_AGE_GROUPS",
"multipleChoiceResponse": {
"values": [
"POLICY_RESPONSE_CHOICE_ID_TAC_AGE_EIGHTEEN_AND_ABOVE"
]
}
},
// ... other responses for TAC
]
},
{
"declarationId": "POLICY_DECLARATION_ID_ADVERTISING_ID",
"responses": [
{
"questionId": "POLICY_QUESTION_ID_AD_ID_IS_USED",
"booleanResponse": {
"value": false
}
}
// ... other responses for AD_ID
]
}
// ... other declarations
]
}
नीति का पालन करने के बारे में जानकारी
एपीआई का इस्तेमाल करके ऐप्लिकेशन की जानकारी सबमिट करते समय या उसे अपडेट करते समय, आपको नीति से जुड़े सभी ज़रूरी एलान शामिल करने होंगे.
एलान से जुड़ी ज़रूरी शर्तें
ये घोषणाएं करनी होंगी:
सभी ऐप्लिकेशन के लिए यह पुष्टि करना ज़रूरी है कि क्या अतिरिक्त एलान करने की ज़रूरत है:
- सेहत से जुड़े ऐप्लिकेशन: हमें बताएं कि ऐप्लिकेशन, सेहत से जुड़ी किन सुविधाओं का इस्तेमाल करता है. इससे हम यह जान पाएंगे कि ऐप्लिकेशन को, सेहत से जुड़े ऐप्लिकेशन के लिए बनी नीति के मुताबिक कौन-कौनसी शर्तों का पालन करना होगा.
- वित्तीय सुविधाएं: वित्तीय सुविधाएं देने वाले ऐप्लिकेशन को कुछ देशों या इलाकों में, खास नियमों का पालन करना पड़ सकता है. ऐप्लिकेशन में वित्तीय सुविधाओं की सटीक और अप-टू-डेट जानकारी सबमिट करें, ताकि हम यह पक्का कर सकें कि सही टीम आपके ऐप्लिकेशन की समीक्षा करे.
- विज्ञापन आईडी: इससे हमें यह समझने में मदद मिलती है कि ऐप्लिकेशन, विज्ञापन आईडी का इस्तेमाल करता है या नहीं.
- टेस्टिंग क्रेडेंशियल (साइन इन करने की जानकारी): अगर साइन इन करने की जानकारी, सदस्यताओं, जगह की जानकारी या पुष्टि करने के अन्य तरीकों के आधार पर ऐप्लिकेशन के किसी भी हिस्से पर पाबंदी लगी है, तो उन हिस्सों को ऐक्सेस करने के तरीके के बारे में निर्देश दें.
- निजता नीति: ऐप्लिकेशन की निजता नीति का लिंक और उसके बारे में जानकारी.
- टारगेट ऑडियंस और कॉन्टेंट: आपको बताना होगा कि आपका ऐप्लिकेशन किस उम्र समूह के लोगों के लिए बना है. साथ ही, आपको ऐप्लिकेशन के कॉन्टेंट के बारे में अन्य जानकारी देनी होगी. इससे यह पक्का करने में मदद मिलती है कि बच्चों के लिए बनाए गए ऐप्लिकेशन सुरक्षित और ठीक हैं.
- विज्ञापन: आपको यह बताना होगा कि ऐप्लिकेशन में विज्ञापन दिखाए जाते हैं या नहीं.
कुछ शर्तों के मुताबिक ज़रूरी है:
- सरकारी ऐप्लिकेशन: हमें बताएं कि क्या ऐप्लिकेशन को सरकार या किसी सरकारी विभाग के लिए बनाया गया है. इस तरह के ऐप्लिकेशन में, केंद्र और राज्य सरकारों, ज़िला प्रशासन, और स्थानीय सरकारी विभागों के लिए बने ऐप्लिकेशन शामिल होते हैं. इस जानकारी से, हम यह पक्का कर पाते हैं कि सही टीम आपके सबमिशन की समीक्षा करे. अगर यह एलान पूरा नहीं किया जाता है, तो ऐप्लिकेशन को सरकारी ऐप्लिकेशन नहीं माना जाएगा.
- बच्चों की सुरक्षा के लिए तय किए गए मानक: यह "सोशल मीडिया" या "डेटिंग" कैटगरी में आने वाले ऐप्लिकेशन के लिए ज़रूरी है. सोशल मीडिया या डेटिंग कैटगरी में आने वाले ऐप्लिकेशन के लिए, हमारी बच्चों की सुरक्षा के लिए तय किए गए मानकों से जुड़ी नीति का पालन करना ज़रूरी है. इसके लिए, डेवलपरों को ऐप्लिकेशन में सुरक्षा के लिए तय किए गए मानक और संपर्क जानकारी उपलब्ध करानी होगी.
- समाचार और पत्रिका वाले ऐप्लिकेशन: यह "समाचार और पत्रिका" कैटगरी में शामिल ऐप्लिकेशन के लिए ज़रूरी है. समाचार और पत्रिका वाले ऐप्लिकेशन के बारे में जानकारी जोड़ें, ताकि ऐप्लिकेशन को मैनेज करने वाली इकाइयों के बारे में साफ़ तौर पर जानकारी मिल सके.
एपीआई अनुरोध का स्ट्रक्चर
नीति का पालन करने के बारे में जानकारी, UpdateAppStoreHostedAppRequest के मुख्य हिस्से में मौजूद policyDeclarations ऐरे में दी जाती है.
इस कलेक्शन में मौजूद हर आइटम एक AppStoreAppPolicyDeclaration ऑब्जेक्ट होता है.
AppStoreAppPolicyDeclaration ऑब्जेक्ट:
declarationId(स्ट्रिंग, ज़रूरी है): नीति के बारे में जानकारी देने वाले दस्तावेज़ का यूनीक आइडेंटिफ़ायर (जैसे,POLICY_DECLARATION_ID_FINANCE,POLICY_DECLARATION_ID_TARGET_AUDIENCE_CONTENT).responses(PolicyResponseका कलेक्शन, ज़रूरी है): इस खास एलान में पूछे गए सवालों के जवाब की सूची.
PolicyResponse ऑब्जेक्ट:
questionId(स्ट्रिंग, ज़रूरी है): यह उस सवाल का यूनीक आइडेंटिफ़ायर होता है जिसका जवाब दिया जा रहा है. उदाहरण के लिए,POLICY_QUESTION_ID_FINANCIAL_PRODUCT_TYPES,POLICY_QUESTION_ID_TAC_TARGET_AGE_GROUPS.value(ज़रूरी है): यह जवाब है. यह इनमें से किसी एक टाइप का हो सकता है:booleanResponse: हां या नहीं वाले सवालों के लिए.value(बूलियन)
stringResponse: सामान्य टेक्स्ट वाले जवाबों के लिए, जिनमें यूआरएल भी शामिल हैं.value(स्ट्रिंग)
singleChoiceResponse: जब सूची में से सिर्फ़ एक विकल्प चुना जा सकता हो.value(स्ट्रिंग): यह चुने गए जवाब का आईडी है.
multipleChoiceResponse: जब एक से ज़्यादा विकल्प चुने जा सकते हैं.values(स्ट्रिंग की श्रेणी): चुने गए जवाबों के आईडी.
documentResponse: उन सवालों के लिए जिनमें दस्तावेज़ अपलोड करना ज़रूरी है. दस्तावेज़ अपलोड करने से जुड़ी समस्याएं हल करना लेख पढ़ें.groupResponse: नेस्ट किए गए सवालों के दोहराए जाने वाले सेट के लिए.keyedGroupResponse: किसी खास कुंजी के हिसाब से ग्रुप किए गए नेस्ट किए गए सवालों के सेट के लिए.
एलान के लिए उदाहरण स्निपेट देखने के लिए, ज़्यादा जानकारी वाली गाइड देखें.
दस्तावेज़ अपलोड करने की सुविधा को मैनेज करना
नीति से जुड़े कुछ सवालों के लिए, आपको सहायक दस्तावेज़ देने होंगे. उदाहरण के लिए, वित्तीय सुविधाओं के लिए लाइसेंस. दस्तावेज़ों को सीधे UpdateAppStoreHostedAppRequest में एम्बेड नहीं किया जा सकता.
इसके बजाय, आपको यह करना होगा:
दस्तावेज़ अपलोड करें:
UploadAppStoreAppPolicyDeclarationFileएंडपॉइंट का इस्तेमाल करें. यह मीडिया अपलोड करने का अनुरोध है.fileTypeकोDECLARATION_FILE_TYPE_DOCUMENTपर सेट किया जाना चाहिए.- एंडपॉइंट:
POST /androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload - अपलोड होने के बाद मिलने वाले जवाबों में
fileIdशामिल होगा.
- एंडपॉइंट:
दस्तावेज़ के आईडी का रेफ़रंस दें: दस्तावेज़ से जुड़े सवाल के लिए
PolicyResponseमें,documentResponseटाइप का इस्तेमाल करें. अपलोड करने के चरण से मिलेfileIdका इस्तेमाल करके,documentIdफ़ील्ड भरें.
PolicyDocumentResponse ऑब्जेक्ट:
documentId(string, ज़रूरी है): यह आईडी,UploadAppStoreAppPolicyDeclarationFileएंडपॉइंट से मिलता है.expiryDate(तारीख, ज़रूरी नहीं): दस्तावेज़ की समयसीमा खत्म होने की तारीख. यह तब लागू होती है, जब दस्तावेज़ की समयसीमा खत्म होने की तारीख दी गई हो.nonExpiring(बूलियन, ज़रूरी नहीं): अगर दस्तावेज़ की समयसीमा खत्म नहीं होती है, तो इसेtrueपर सेट करें.
दस्तावेज़ के जवाब का उदाहरण:
// Inside a PolicyResponse object
{
"questionId": "POLICY_QUESTION_ID_FINANCE_CRYPTO_US_FINCEN_LICENSE", // Example ID
"documentResponse": {
"documentId": "123456789", // The fileId from upload
"expiryDate": {
"year": 2027,
"month": 6,
"day": 1
}
}
}
4. उपलब्धता कंट्रोल करना
UpdateAppStoreHostedApp का इस्तेमाल करके, होस्ट किए गए ऐप्लिकेशन की स्थिति को सेव करने के बाद, ऐप्लिकेशन अपने-आप प्रोसेस हो जाता है. साथ ही, Google Play में तीसरे पक्ष के ऐप्लिकेशन स्टोर के लिए, इसे डिफ़ॉल्ट रूप से पब्लिश किए गए ऐप्लिकेशन के तौर पर मार्क कर दिया जाता है.
ऐप्लिकेशन को उपलब्ध कराने का फ़ैसला लेने के बाद, उसकी उपलब्धता को कंट्रोल करने के लिए, updateappstorehostedapppublishstatus तरीके का इस्तेमाल करके, उसकी स्थिति अपडेट करें:
- किसी ऐप्लिकेशन को अनपब्लिश करना: होस्ट किए गए ऐप्लिकेशन को अनुपलब्ध कराने के लिए,
publishStateफ़ील्ड कोAPP_STORE_APP_PUBLISH_STATE_UNPUBLISHEDपर सेट करें. - किसी ऐप्लिकेशन को फिर से पब्लिश करना: अगर आपको किसी ऐसे ऐप्लिकेशन को फिर से उपलब्ध कराना है जिसे पहले अनपब्लिश किया गया था, तो
publishStateफ़ील्ड कोAPP_STORE_APP_PUBLISH_STATE_PUBLISHEDपर सेट करें. इससे, आपको लिस्टिंग में बदलाव करने या ऐसेट को फिर से अपलोड करने की ज़रूरत नहीं पड़ेगी.