Android Developer Console API एक RESTful सेवा है. इसकी मदद से, पुष्टि किए गए डेवलपर, Android Developer Console में Android डेवलपर की पहचान की पुष्टि करने के वर्कफ़्लो को ऑटोमेट कर सकते हैं. इसमें डेवलपर खाते वापस पाना, कुंजी से जुड़ी ज़रूरी शर्तों की जांच करना, Android पैकेज के नाम रजिस्टर करना, ऐप्लिकेशन साइनिंग पासकोड रजिस्टर करना, और कुंजी के मालिकाना हक की पुष्टि करना शामिल है.
खास जानकारी, इस्तेमाल के उदाहरण, और लागू करने का तरीका
इस्तेमाल के मुख्य उदाहरण और सुविधाएं
- सीआई/सीडी पैकेज के नाम अपने-आप रजिस्टर होने की सुविधा: प्रोग्राम के हिसाब से, Android पैकेज के दर्जनों या सैकड़ों नाम रजिस्टर करें (
CreateAndroidPackage). - ऐप्लिकेशन पब्लिश करने से पहले, पासकोड की नीति के इतिहास की जांच: प्रोग्राम के हिसाब से जांच करना कि क्या Google ने पहले कभी पैकेज के नाम को इकोसिस्टम में देखा है. साथ ही, यह जांच करना कि क्या किसी खास साइनिंग सर्टिफ़िकेट को रजिस्टर करने के लिए, पासकोड के मालिकाना हक की पुष्टि (
GetAndroidPackageRegistrationPolicy) करना ज़रूरी है. - ऐप्लिकेशन साइनिंग पासकोड का रजिस्ट्रेशन और मालिकाना हक की पुष्टि अपने-आप होने की सुविधा:
सार्वजनिक साइनिंग सर्टिफ़िकेट के SHA-256 फ़िंगरप्रिंट रजिस्टर करें
(
CreateAndroidPackageKey), पुष्टि करने के लिए यूनीक चैलेंज टोकन पाएं (verificationToken), और निजी पासकोड के मालिकाना हक के सबूत की पुष्टि अपने-आप होने की सुविधा चालू करें. इसके लिए, एक बार में या फिर से शुरू किए जा सकने वाले साइन किए गए APK अपलोड करें (VerifyAndroidPackageKeyOwnership). - प्रोग्राम के तहत, मालिकाना हक की पुष्टि करने के लिए दस्तावेज़ सबमिट करना: मालिकाना हक की पुष्टि करने के लिए दस्तावेज़ सबमिट करें (
JustifyAndroidPackageKeyRegistration). - स्टेटस मॉनिटर करना: डेवलपर खातों, पैकेज के नामों, और ऐप्लिकेशन साइनिंग पासकोड (
GetDeveloperAccount,ListDeveloperAccounts,GetAndroidPackage,ListAndroidPackages,GetAndroidPackageKey,ListAndroidPackageKeys) के लिए, रजिस्ट्रेशन का स्टेटस मॉनिटर करें.
शुरू से आखिर तक लागू करने का वर्कफ़्लो
- यूज़र इंटरफ़ेस (यूआई) में डेवलपर की पहचान की पुष्टि एक बार करें: Android Developer Console में डेवलपर की पहचान की पुष्टि (
INDIVIDUALयाORGANIZATION) करें, ताकिverificationStateVERIFIEDहो सके. - एपीआई चालू करें और पुष्टि करें: अपने Google Cloud प्रोजेक्ट में
androiddeveloperconsole.googleapis.comचालू करें. साथ ही,https://www.googleapis.com/auth/androiddeveloperconsoleस्कोप के साथ उपयोगकर्ता को ऐक्सेस देने वाला OAuth 2.0 Bearer ऐक्सेस टोकन पाएं. - अपने डेवलपर खाते के संसाधन का नाम ढूंढें:
developerAccounts/{developer_account}को वापस पाने के लिए,GET /v1/developerAccounts(ListDeveloperAccounts) को कॉल करें और पुष्टि करें किverificationState,VERIFIEDहै. - पैकेज के नाम के लिए रजिस्ट्रेशन की नीति देखें:
keySelectionStrategy(SELECT_KEY_FROM_LISTयाUSE_ANY_KEY) और साइनिंग पासकोड के इतिहास (knownKeys) की जांच करने के लिए,GET /v1/developerAccounts/{id}/androidPackages/{pkg}/registrationPolicy(GetAndroidPackageRegistrationPolicy) को कॉल करें. - Android पैकेज संसाधन बनाएं:
POST /v1/developerAccounts/{id}/androidPackages?androidPackageId={pkg}(CreateAndroidPackage) को कॉल करें. इसके लिए, मुख्य हिस्से में{"name": ""}का इस्तेमाल करें. इससेDRAFTस्थिति में संसाधन बनता है. - अपने ऐप्लिकेशन साइनिंग पासकोड का फ़िंगरप्रिंट रजिस्टर करें: JSON बॉडी
{"certificateFingerprintSha256": "..."}के साथPOST /v1/developerAccounts/{id}/androidPackages/{pkg}/keys(CreateAndroidPackageKey) को कॉल करें. वापस किए गए स्टेटस की जांच करें:DRAFT: निजी पासकोड के मालिकाना हक का सबूत देना ज़रूरी है. जवाब में, सातवें चरण के लिए एक यूनीकverificationTokenशामिल होता है.IN_REVIEW: मालिकाना हक का सबूत और वजह बताने की प्रोसेस को अपने-आप स्किप कर दिया जाता है. उदाहरण के लिए, जब कोई ऐसा नया पैकेज नाम रजिस्टर किया जाता है जो Android पर पहले कभी नहीं देखा गया हो या जब आपने उसीDeveloperAccountमें किसी दूसरे पैकेज नाम के लिए, इस साइनिंग पासकोड के मालिकाना हक की पुष्टि पहले ही कर ली हो. सातवें चरण और आठवें चरण में वजह बताने की प्रोसेस को स्किप करें. इसके बाद, सीधेGetAndroidPackageऔरGetAndroidPackageKeyको पोल करने पर जाएं.
- पुष्टि करने वाला APK बनाएं और अपलोड करें (अगर स्थिति
DRAFTहै):packageNameसे मैच करने वाले APK में,assets/adi-registration.propertiesके अंदर, वापस मिलीverificationTokenस्ट्रिंग को एम्बेड करें. इसके बाद, ऐप्लिकेशन साइनिंग पासकोड का इस्तेमाल करके, APK पर साइन करें औरPOST /upload/v1/developerAccounts/{id}/androidPackages/{pkg}/keys/{sha256}:verify(VerifyAndroidPackageKeyOwnership) का इस्तेमाल करके उसे अपलोड करें. - अगर ज़रूरी हो, तो वजह बताएं और पोल रजिस्ट्रेशन की स्थिति सबमिट करें: अगर पासकोड
OWNERSHIP_VERIFIEDस्थिति में है औरregistrationJustificationRequired,trueहै, तोPOST /v1/developerAccounts/{id}/androidPackages/{pkg}/keys/{sha256}:justifyAndroidPackageKeyRegistration(JustifyAndroidPackageKeyRegistration) को कॉल करें.GetAndroidPackageऔरGetAndroidPackageKeyको तब तक पोल करें, जब तकstate,REGISTEREDतक न पहुंच जाए.
कुंजी के फ़िंगरप्रिंट और पुष्टि करने वाले APK तैयार करने के लिए, लोकल सीएलआई कमांड
कीस्टोर (
keytool) से SHA-256 सर्टिफ़िकेट फ़िंगरप्रिंट निकालना:keytool -list -v -keystore release-key.jks -alias my-key-aliasबनाए गए APK (
apksigner) पर, SHA-256 साइनिंग सर्टिफ़िकेट डाइजेस्ट की पुष्टि करना:apksigner verify --print-certs app-release.apkअपलोड करने से पहले, APK पैकेज के नाम और एम्बेड की गई टोकन फ़ाइल की जांच करें (
aapt2औरunzip):aapt2 dump badging app-release.apk | head -n 1 unzip -p app-release.apk assets/adi-registration.properties
Android Developer Console के यूज़र इंटरफ़ेस (यूआई) और एपीआई की सुविधाएं
| टास्क | Android Developer Console का वेब यूज़र इंटरफ़ेस (android.google.com/developerconsole) |
Android Developer Console API |
|---|---|---|
| डेवलपर की पहचान की पुष्टि (केवाईसी/केवाईबी) और शुल्क का पेमेंट | इस्तेमाल किया जा सकता है (इसके लिए, एक बार ज़रूरी शर्त पूरी करनी होगी) | एपीआई का इस्तेमाल करके, इस सुविधा का इस्तेमाल नहीं किया जा सकता. हालांकि, GetDeveloperAccount और ListDeveloperAccounts का इस्तेमाल करके, रीड-ओनली स्टेटस देखा जा सकता है |
| लिंक किए गए डेवलपर खाते देखना | कंसोल हेडर में खाता बदलने का बटन | GET /v1/developerAccounts (ListDeveloperAccounts) |
| किसी पैकेज के नाम के लिए, साइनिंग पासकोड के इतिहास और नीति की जांच करना | "पैकेज का नाम रजिस्टर करें" विज़र्ड के दौरान दिखता है | GET /v1/.../registrationPolicy (GetAndroidPackageRegistrationPolicy) |
| Android पैकेज का नया नाम रजिस्टर करना | पैकेज के नाम > पैकेज का नाम रजिस्टर करें | POST /v1/{parent}/androidPackages?androidPackageId=... (CreateAndroidPackage) |
| रजिस्टर किए गए और ड्राफ़्ट के तौर पर सेव किए गए पैकेज के नाम देखना या उनकी सूची बनाना | पैकेज के नाम डैशबोर्ड टेबल | GET /v1/{name} (GetAndroidPackage), GET /v1/{parent}/androidPackages (ListAndroidPackages) |
| ऐप्लिकेशन साइनिंग पासकोड जोड़ना और चैलेंज टोकन जनरेट करना | पैकेज की जानकारी > साइनिंग पासकोड जोड़ें | POST /v1/{parent}/keys (CreateAndroidPackageKey) |
निजी पासकोड के मालिकाना हक की पुष्टि करना (adi-registration.properties) |
Console के यूज़र इंटरफ़ेस (यूआई) में, साइन किया हुआ स्निपेट APK अपलोड करना | POST /upload/v1/{name}:verify (VerifyAndroidPackageKeyOwnership) |
| जब कुंजी की मैन्युअल तरीके से समीक्षा करने की ज़रूरत हो, तब वजह सबमिट करना | कुंजी के रजिस्ट्रेशन वर्कफ़्लो के दौरान टेक्स्ट प्रॉम्प्ट | POST /v1/{name}:justifyAndroidPackageKeyRegistration (JustifyAndroidPackageKeyRegistration) |
सेवा का कॉन्फ़िगरेशन और पुष्टि करना
सभी एपीआई अनुरोधों में एचटीटीपीएस का इस्तेमाल किया जाना चाहिए. साथ ही, इनमें Authorization: Bearer
ACCESS_TOKEN हेडर शामिल होना चाहिए. यह हेडर, OAuth 2.0 वेब सर्वर फ़्लो का इस्तेमाल करके, उस Google खाते के लिए मिलता है जिसने Android Developer Console में डेवलपर के तौर पर अपनी पहचान की पुष्टि की हो.
| प्रॉपर्टी | वैल्यू |
|---|---|
| बुनियादी REST एंडपॉइंट | https://androiddeveloperconsole.googleapis.com |
| मीडिया अपलोड एंडपॉइंट | https://androiddeveloperconsole.googleapis.com/upload |
| एपीआई वर्शन | v1 |
| OAuth 2.0 का ज़रूरी दायरा | https://www.googleapis.com/auth/androiddeveloperconsole |
| कोटे की डिफ़ॉल्ट सीमा | हर तरीके के लिए, हर Google Cloud प्रोजेक्ट के हिसाब से हर दिन 2,000 अनुरोध |
एपीआई के संसाधन और एंडपॉइंट
Android Developer Console API, संसाधनों को इस क्रम में व्यवस्थित करता है:
DeveloperAccount(developerAccounts/{developer_account})AndroidPackage(developerAccounts/{developer_account}/androidPackages/{android_package})AndroidPackageRegistrationPolicy(developerAccounts/{developer_account}/androidPackages/{android_package}/registrationPolicy)AndroidPackageKey(developerAccounts/{developer_account}/androidPackages/{android_package}/keys/{key})
संसाधन: DeveloperAccount
यह Android Developer Console में मौजूद उस खाते को दिखाता है जो किसी डेवलपर की पहचान से जुड़ा होता है.
| फ़ील्ड | प्रकार | ब्यौरा |
|---|---|---|
name |
string |
आइडेंटिफ़ायर. developerAccounts/{developer_account} फ़ॉर्मैट में संसाधन का नाम. |
displayName |
string |
सिर्फ़ आउटपुट के लिए. डेवलपर खाते से जुड़ा ऐसा नाम जिसे कोई व्यक्ति आसानी से पढ़ सके. जैसे, किसी व्यक्ति या संगठन का नाम. |
verificationState |
enum (VerificationState) |
सिर्फ़ आउटपुट के लिए. खाते के लिए, डेवलपर की पहचान की पुष्टि की मौजूदा स्थिति. |
Enum: DeveloperAccount.VerificationState
| वैल्यू | ब्यौरा |
|---|---|
VERIFIED |
डेवलपर की पहचान की पुष्टि हो गई है. इस खाते से, पैकेज के नाम और ऐप्लिकेशन साइनिंग पासकोड रजिस्टर किए जा सकते हैं. |
NOT_VERIFIED |
Android Developer Console में, डेवलपर के तौर पर अपनी पहचान की पुष्टि करने की प्रक्रिया पूरी नहीं की गई है. |
तरीके: DeveloperAccount
| तरीका | एचटीटीपी अनुरोध | ब्यौरा |
|---|---|---|
GetDeveloperAccount |
GET /v1/{name=developerAccounts/*} |
किसी एक DeveloperAccount के लिए, मेटाडेटा और पुष्टि की स्थिति की जानकारी हासिल करता है. |
ListDeveloperAccounts |
GET /v1/developerAccounts |
यह पुष्टि किए गए Google खाते से ऐक्सेस किए जा सकने वाले सभी DeveloperAccount ऑब्जेक्ट की सूची दिखाता है. इसमें पेज नंबर नहीं होते. |
संसाधन: AndroidPackage
यह DeveloperAccount के तहत रजिस्टर किए गए या रजिस्टर किए जा रहे Android पैकेज के नाम को दिखाता है.
| फ़ील्ड | प्रकार | ब्यौरा |
|---|---|---|
name |
string |
आइडेंटिफ़ायर. संसाधन का नाम developerAccounts/{developer_account}/androidPackages/{android_package} फ़ॉर्मैट में होना चाहिए, जहां {android_package}, Android पैकेज का नाम है (उदाहरण के लिए, com.example.myapp). |
packageName |
string |
सिर्फ़ आउटपुट के लिए. Android पैकेज का नाम (उदाहरण के लिए, com.example.myapp). |
state |
enum (AndroidPackage.State) |
सिर्फ़ आउटपुट के लिए. पैकेज के नाम के रजिस्ट्रेशन की लाइफ़साइकल की मौजूदा स्थिति. |
registeredAppStore |
boolean |
सिर्फ़ आउटपुट के लिए. इससे पता चलता है कि पैकेज का यह नाम, फ़िलहाल रजिस्टर किए गए ऐप स्टोर के तौर पर चालू है या नहीं. |
Enum: AndroidPackage.State
| वैल्यू | ब्यौरा |
|---|---|
DRAFT |
पैकेज के नाम का संसाधन बना लिया गया है. साथ ही, ऐप्लिकेशन साइनिंग पासकोड के रजिस्ट्रेशन या मालिकाना हक की पुष्टि की प्रोसेस अब भी जारी है. |
IN_REVIEW |
पैकेज के नाम का रजिस्ट्रेशन और ज़रूरी पासकोड की जानकारी सबमिट कर दी गई है. Google इसकी समीक्षा कर रहा है. कोई पैकेज DRAFT से IN_REVIEW में बदल जाता है. ऐसा CreateAndroidPackageKey के तुरंत बाद होता है. ऐसा तब होता है, जब पासकोड के मालिकाना हक की पुष्टि करने की प्रोसेस को छोड़ दिया जाता है. इसमें वह स्थिति भी शामिल है जब पासकोड की पुष्टि, उसी DeveloperAccount में किसी दूसरे पैकेज के नाम के लिए पहले ही की जा चुकी हो. इसके अलावा, VerifyAndroidPackageKeyOwnership और ज़रूरत पड़ने पर JustifyAndroidPackageKeyRegistration को पूरा करने के बाद भी ऐसा होता है. |
REGISTERED |
पैकेज का नाम, Android डेवलपर की पहचान की पुष्टि के लिए इस डेवलपर खाते में रजिस्टर किया गया है. |
PENDING_TRANSFER |
पैकेज के नाम का मालिकाना हक का ट्रांसफ़र, किसी दूसरे डेवलपर खाते को किया जा रहा है. |
संसाधन: AndroidPackageRegistrationPolicy
GetAndroidPackageRegistrationPolicy से मिला सिंगलटन रिसॉर्स. इससे, किसी पैकेज के नाम के लिए, साइन करने के लिए इस्तेमाल किए गए पुराने सार्वजनिक पासकोड की जानकारी मिलती है. साथ ही, यह पता चलता है कि साइन करने के लिए इस्तेमाल किए गए किसी पासकोड के साथ पैकेज का नाम रजिस्टर करने के लिए, लिखित में वजह बताने की ज़रूरत है या नहीं.
| फ़ील्ड | प्रकार | ब्यौरा |
|---|---|---|
name |
string |
आइडेंटिफ़ायर. developerAccounts/{developer_account}/androidPackages/{android_package}/registrationPolicy फ़ॉर्मैट में संसाधन का नाम. |
knownKeys[] |
object (KnownKey) |
ऐप्लिकेशन साइनिंग पासकोड के पुराने वर्शन की सूची. इस सूची में वे पासकोड शामिल हैं जिनका इस्तेमाल करके, इस पैकेज नाम वाले ऐप्लिकेशन पहले उपलब्ध कराए गए थे. इस सूची को certificateFingerprintSha256 के हिसाब से वर्णमाला के क्रम में लगाया गया है. |
knownKeys[].certificateFingerprintSha256 |
string |
सिर्फ़ आउटपुट के लिए. पुराने साइनिंग सर्टिफ़िकेट का नॉर्मलाइज़ किया गया 64-वर्ण वाला लोअरकेस हेक्साडेसिमल SHA-256 फ़िंगरप्रिंट (बिना कोलन के). |
knownKeys[].justificationRequirement |
enum (JustificationRequirement) |
सिर्फ़ आउटपुट के लिए. इससे पता चलता है कि इस पासकोड को रजिस्टर करने के लिए, JustifyAndroidPackageKeyRegistration (REQUIRED या NOT_REQUIRED) को कॉल करना ज़रूरी है या नहीं. अगर साइनिंग पासकोड की पुष्टि पहले ही उसी DeveloperAccount के तहत किसी दूसरे पैकेज के नाम पर की जा चुकी है, तो VerifyAndroidPackageKeyOwnership और JustifyAndroidPackageKeyRegistration, दोनों को छोड़ दिया जाता है. भले ही, justificationRequirement, REQUIRED हो. |
keySelectionStrategy |
enum (KeySelectionStrategy) |
सिर्फ़ आउटपुट के लिए. इस पैकेज का नाम रजिस्टर करने के लिए, कुंजी चुनने की नीति: SELECT_KEY_FROM_LIST (knownKeys से कोई कुंजी रजिस्टर करनी होगी) या USE_ANY_KEY (डेवलपर के मालिकाना हक वाली, ऐप्लिकेशन साइनिंग की कोई भी मान्य कुंजी रजिस्टर की जा सकती है). |
Enum: KnownKey.JustificationRequirement
| वैल्यू | ब्यौरा |
|---|---|
REQUIRED |
इस कुंजी को रजिस्टर करने के लिए, आपको VerifyAndroidPackageKeyOwnership को पूरा करने के बाद, JustifyAndroidPackageKeyRegistration का इस्तेमाल करके लिखित में वजह बतानी होगी. हालांकि, अगर इस कुंजी की पुष्टि पहले ही उसी DeveloperAccount के तहत किसी दूसरे पैकेज के नाम पर की जा चुकी है, तो VerifyAndroidPackageKeyOwnership और JustifyAndroidPackageKeyRegistration, दोनों को छोड़ दिया जाता है. |
NOT_REQUIRED |
इस जानी-पहचानी कुंजी को रजिस्टर करने के लिए, कोई वजह बताने की ज़रूरत नहीं है. VerifyAndroidPackageKeyOwnership के बाद, पासकोड सीधे IN_REVIEW पर ट्रांसफ़र हो जाता है. अगर पासकोड की पुष्टि पहले ही उसी DeveloperAccount के तहत किसी दूसरे पैकेज के नाम पर की जा चुकी है, तो CreateAndroidPackageKey के बाद पासकोड तुरंत ट्रांसफ़र हो जाता है. |
Enum: AndroidPackageRegistrationPolicy.KeySelectionStrategy
| वैल्यू | ब्यौरा |
|---|---|
SELECT_KEY_FROM_LIST |
कॉलर को knownKeys में मौजूद, पहले से इस्तेमाल की जा रही कुंजियों में से किसी एक को रजिस्टर करना होगा. |
USE_ANY_KEY |
knownKeys में मौजूद किसी भी पासकोड के अलावा, कॉलर किसी भी ऐसे मान्य ऐप्लिकेशन साइनिंग पासकोड को रजिस्टर कर सकता है जो Android ईकोसिस्टम में पहले नहीं देखा गया है. |
तरीके: AndroidPackage
| तरीका | एचटीटीपी अनुरोध | ब्यौरा |
|---|---|---|
GetAndroidPackageRegistrationPolicy |
GET /v1/{name=developerAccounts/*/androidPackages/*/registrationPolicy} |
यह पैकेज के नाम के लिए, पासकोड चुनने की रणनीति और पहले इस्तेमाल किए गए साइनिंग पासकोड की जानकारी हासिल करता है. |
CreateAndroidPackage |
POST /v1/{parent=developerAccounts/*}/androidPackages?androidPackageId={package_name} |
पैकेज का नाम रजिस्टर करने के लिए, DRAFT स्थिति में नया AndroidPackage संसाधन बनाता है. |
GetAndroidPackage |
GET /v1/{name=developerAccounts/*/androidPackages/*} |
यह किसी मौजूदा AndroidPackage के लिए, जानकारी और मौजूदा रजिस्ट्रेशन की स्थिति को फिर से हासिल करता है. |
ListAndroidPackages |
GET /v1/{parent=developerAccounts/*}/androidPackages |
DeveloperAccount के तहत AndroidPackage ऑब्जेक्ट की सूची दिखाता है (pageSize ज़्यादा से ज़्यादा 1000, pageToken). |
संसाधन: AndroidPackageKey
यह AndroidPackage से जुड़े सार्वजनिक ऐप्लिकेशन साइनिंग सर्टिफ़िकेट के फ़िंगरप्रिंट को दिखाता है. साथ ही, मालिकाना हक की पुष्टि और रजिस्ट्रेशन की समीक्षा की स्थिति को ट्रैक करता है.
| फ़ील्ड | प्रकार | ब्यौरा |
|---|---|---|
name |
string |
आइडेंटिफ़ायर. सर्वर से असाइन किए गए संसाधन का नाम developerAccounts/{developer_account}/androidPackages/{android_package}/keys/{key} फ़ॉर्मैट में होता है. इसमें {key}, कोलन के बिना 64-वर्ण वाला लोअरकेस हेक्साडेसिमल SHA-256 फ़िंगरप्रिंट होता है. CreateAndroidPackageKey को कॉल करते समय, इसे शामिल नहीं किया जाना चाहिए या खाली छोड़ देना चाहिए. |
certificateFingerprintSha256 |
string |
ज़रूरी है. इम्यूटेबल. ऐप्लिकेशन साइनिंग सर्टिफ़िकेट का SHA-256 हैश. CreateAndroidPackageKey में इनपुट के तौर पर, 64-वर्ण वाला सामान्य हेक्स (60e860e8...) या कोलन से अलग किया गया हेक्स (60:E8:60:E8:...) स्वीकार किया जाता है. आउटपुट के तौर पर, हमेशा कोलन के बिना 64-वर्ण वाले अंग्रेज़ी के छोटे अक्षरों में हेक्साडेसिमल में नॉर्मलाइज़ किया जाता है. |
state |
enum (AndroidPackageKey.State) |
सिर्फ़ आउटपुट के लिए. पासकोड की पुष्टि और रजिस्ट्रेशन की लाइफ़साइकल की मौजूदा स्थिति. |
verificationToken |
string |
सिर्फ़ आउटपुट के लिए. Google से जनरेट किया गया यूनीक चैलेंज टोकन. इसका इस्तेमाल सिर्फ़ तब किया जाता है, जब स्थिति DRAFT हो. अगर CreateAndroidPackageKey, पासकोड को सीधे IN_REVIEW में बदल देता है, तो इसे अनदेखा किया जा सकता है. जब स्थिति DRAFT हो, तो VerifyAndroidPackageKeyOwnership को पूरा करने के लिए, हस्ताक्षर किए गए APK में assets/adi-registration.properties के अंदर इस स्ट्रिंग को एम्बेड करें. |
registrationJustificationRequired |
boolean |
सिर्फ़ आउटपुट के लिए. अगर true और कुंजी OWNERSHIP_VERIFIED स्थिति में है, तो आपको रजिस्ट्रेशन की प्रोसेस IN_REVIEW पर आगे बढ़ने से पहले, JustifyAndroidPackageKeyRegistration का इस्तेमाल करके लिखित में वजह बतानी होगी. अगर CreateAndroidPackageKey, पासकी को सीधे IN_REVIEW पर ट्रांसफ़र करता है, तो वजह बताने की ज़रूरत नहीं होती. ऐसा इसलिए होता है, क्योंकि पासकी की पुष्टि पहले ही उसी DeveloperAccount में किसी दूसरे पैकेज के नाम पर की जा चुकी होती है. |
Enum: AndroidPackageKey.State
| वैल्यू | ब्यौरा |
|---|---|
DRAFT |
पासकोड का संसाधन बना दिया गया है. हालांकि, हस्ताक्षर किए गए APK को अपलोड (VerifyAndroidPackageKeyOwnership) करके, निजी पासकोड के मालिकाना हक का सबूत देना अब भी ज़रूरी है. ऐसा इसलिए, क्योंकि इस DeveloperAccount के तहत आने वाले किसी भी पैकेज के नाम पर, इस पासकोड के मालिकाना हक की पुष्टि अब तक नहीं की गई है. |
OWNERSHIP_VERIFIED |
हस्ताक्षर किए गए APK को अपलोड करके, निजी पासकोड के मालिकाना हक की पुष्टि की गई है. अगर registrationJustificationRequired, true है, तो समीक्षा शुरू होने से पहले अब भी वजह बताना ज़रूरी है. |
IN_REVIEW |
Google, डिजिटल बटन के रजिस्ट्रेशन की समीक्षा कर रहा है. कोई पासकोड इस स्थिति में तब आता है, जब CreateAndroidPackageKey के तुरंत बाद मालिकाना हक की पुष्टि करने की ज़रूरत नहीं होती. उदाहरण के लिए, पैकेज के ऐसे नए नाम पर जिसे Android पर पहले कभी इस्तेमाल नहीं किया गया है या जब पासकोड की पुष्टि पहले ही उसी DeveloperAccount के तहत किसी दूसरे पैकेज के नाम पर की जा चुकी हो. इससे JustifyAndroidPackageKeyRegistration की ज़रूरत भी नहीं पड़ती. इसके अलावा, VerifyAndroidPackageKeyOwnership के तुरंत बाद (अगर registrationJustificationRequired, false है) या JustifyAndroidPackageKeyRegistration के बाद (अगर registrationJustificationRequired, true है) भी पासकोड इस स्थिति में आता है. |
REGISTERED |
ऐप्लिकेशन साइनिंग पासकोड, इस पैकेज के नाम के साथ रजिस्टर है. इसका इस्तेमाल, Android डेवलपर की पहचान की पुष्टि के लिए किया जाता है. |
PENDING_TRANSFER |
ऐप्लिकेशन साइनिंग पासकोड का रजिस्ट्रेशन, ट्रांसफ़र पूरा होने के बाद ही किया जा सकता है. |
तरीके: AndroidPackageKey
| तरीका | एचटीटीपी अनुरोध | ब्यौरा |
|---|---|---|
CreateAndroidPackageKey |
POST /v1/{parent=developerAccounts/*/androidPackages/*}/keys |
AndroidPackage के तहत, ऐप्लिकेशन साइनिंग सर्टिफ़िकेट का नया SHA-256 फ़िंगरप्रिंट रजिस्टर करता है. यह पासकोड को DRAFT स्थिति में दिखाता है. ऐसा तब होता है, जब VerifyAndroidPackageKeyOwnership का इस्तेमाल करके मालिकाना हक का सबूत देना ज़रूरी हो. इसके अलावा, यह पासकोड को सीधे IN_REVIEW स्थिति में दिखाता है. ऐसा तब होता है, जब मालिकाना हक की पुष्टि करने की प्रोसेस को छोड़ दिया जाता है. जैसे, पैकेज के ऐसे नए नाम के लिए जिसे Android पर पहले कभी इस्तेमाल न किया गया हो या ऐसे पासकोड के लिए जिसकी पुष्टि उसी DeveloperAccount में किसी दूसरे पैकेज के नाम के लिए पहले ही की जा चुकी हो. |
GetAndroidPackageKey |
GET /v1/{name=developerAccounts/*/androidPackages/*/keys/*} |
किसी खास AndroidPackageKey की स्थिति, फ़िंगरप्रिंट, और पुष्टि करने वाला मेटाडेटा हासिल करता है. |
ListAndroidPackageKeys |
GET /v1/{parent=developerAccounts/*/androidPackages/*}/keys |
यह AndroidPackage के तहत रजिस्टर किए गए सभी AndroidPackageKey ऑब्जेक्ट की सूची दिखाता है. इसमें ज़्यादा से ज़्यादा pageSize 1000, pageToken शामिल हो सकते हैं. |
VerifyAndroidPackageKeyOwnership |
POST /upload/v1/{name=developerAccounts/*/androidPackages/*/keys/*}:verify |
निजी पासकोड के मालिकाना हक की पुष्टि करने और समीक्षा के लिए तैयार पासकोड सबमिट करने के लिए, साइन किया गया एक ऐसा APK अपलोड करें जिसमें assets/adi-registration.properties में verificationToken शामिल हो. |
JustifyAndroidPackageKeyRegistration |
POST /v1/{name=developerAccounts/*/androidPackages/*/keys/*}:justifyAndroidPackageKeyRegistration |
registrationJustificationRequired के true होने पर, अतिरिक्त जानकारी सबमिट करता है. साथ ही, पुष्टि की गई कुंजियों को समीक्षा के लिए सबमिट करता है. |
गड़बड़ी ठीक करना
जब कोई एपीआई अनुरोध पूरा नहीं हो पाता है, तो Android Developer Console API, एचटीटीपी 4xx या 5xx स्टेटस कोड और स्टैंडर्ड google.rpc.Status JSON गड़बड़ी की जानकारी दिखाता है:
{
"error": {
"code": 400,
"message": "Invalid certificate fingerprint SHA256 format.",
"status": "INVALID_ARGUMENT",
"details": []
}
}
एचटीटीपी स्टेटस कोड और आम तौर पर इस्तेमाल होने वाले समाधान
| एचटीटीपी कोड | gRPC स्टेटस | आम वजहें | रिज़ॉल्यूशन |
|---|---|---|---|
400 Bad Request |
INVALID_ARGUMENT |
Java-style androidPackageId मौजूद नहीं है या अमान्य है; certificateFingerprintSha256 फ़ॉर्मैट अमान्य है; CreateAndroidPackage या CreateAndroidPackageKey पर name फ़ील्ड खाली नहीं है; अपलोड किए गए APK पर हस्ताक्षर नहीं किया गया है, वह खराब है, उसमें assets/adi-registration.properties मौजूद नहीं है, मेल खाने वाला verificationToken मौजूद नहीं है या उस पर किसी ऐसे सर्टिफ़िकेट से हस्ताक्षर किया गया है जो मेल नहीं खाता. |
संसाधन स्कीमा के हिसाब से अनुरोध के फ़ॉर्मैट की पुष्टि करें. साथ ही, कॉल बनाने के दौरान name को शामिल न करें या खाली छोड़ें. इसके अलावा, अपलोड करने से पहले apksigner verify --print-certs और unzip -p app-release.apk assets/adi-registration.properties का इस्तेमाल करके, अपने APK के हस्ताक्षर और एम्बेड किए गए टोकन की पुष्टि करें. |
400 Bad Request |
FAILED_PRECONDITION |
DeveloperAccount में verificationState: NOT_VERIFIED है; कुंजी का चुनाव AndroidPackageRegistrationPolicy (SELECT_KEY_FROM_LIST) का उल्लंघन करता है; अमान्य स्थिति में VerifyAndroidPackageKeyOwnership या JustifyAndroidPackageKeyRegistration को कॉल किया जा रहा है. |
Android Developer Console में जाकर, डेवलपर के तौर पर अपनी पहचान की पुष्टि करें. इसके बाद, GetAndroidPackageRegistrationPolicy देखें और संसाधन की मौजूदा state की जांच करें. |
401 Unauthorized |
UNAUTHENTICATED |
OAuth 2.0 Bearer ऐक्सेस टोकन मौजूद नहीं है, इसकी समयसीमा खत्म हो गई है या यह अमान्य है. इसके अलावा, एपीआई पासकोड या सेवा खाते का इस्तेमाल करके पुष्टि करने की कोशिश की गई है. | https://www.googleapis.com/auth/androiddeveloperconsole स्कोप के साथ, उपयोगकर्ता को ऐक्सेस देने वाला नया OAuth 2.0 Bearer ऐक्सेस टोकन हासिल करें. |
403 Forbidden |
PERMISSION_DENIED |
जिस उपयोगकर्ता की पुष्टि की गई है उसके पास टारगेट DeveloperAccount या AndroidPackage की अनुमति नहीं है या Google Cloud प्रोजेक्ट पर Android Developer Console API चालू नहीं है. |
ListDeveloperAccounts का इस्तेमाल करके, खाते की सदस्यता की पुष्टि करें. साथ ही, पक्का करें कि Google Cloud Console में androiddeveloperconsole.googleapis.com चालू हो. |
404 Not Found |
NOT_FOUND |
DeveloperAccount, AndroidPackage या AndroidPackageKey के लिए बताया गया रिसॉर्स पाथ मौजूद नहीं है. |
ListDeveloperAccounts, ListAndroidPackages या ListAndroidPackageKeys का इस्तेमाल करके, संसाधन के पाथ की पुष्टि करें. पक्का करें कि {key} आईडी में कोलन के बिना लोअरकेस हेक्स का इस्तेमाल किया गया हो. |
409 Conflict |
ALREADY_EXISTS |
पैकेज का नाम या SHA-256 सर्टिफ़िकेट फ़िंगरप्रिंट, इस या किसी दूसरे डेवलपर खाते में पहले से रजिस्टर है. | GetAndroidPackage या GetAndroidPackageKey का इस्तेमाल करके, मौजूदा रजिस्ट्रेशन की जांच करें. इसके अलावा, GetAndroidPackageRegistrationPolicy का इस्तेमाल करके, मालिकाना हक का इतिहास देखें. |
429 Too Many Requests |
RESOURCE_EXHAUSTED |
हर Google Cloud प्रोजेक्ट के लिए, हर दिन 2,000 अनुरोधों का कोटा तय किया गया है. आपने इस कोटे को पार कर लिया है. |
जिटर के साथ एक्स्पोनेंशियल बैकऑफ़ लागू करें और ज़्यादा फ़्रीक्वेंसी वाले पोलिंग लूप से बचें. |
500 / 503 |
INTERNAL / UNAVAILABLE |
बैकएंड में कुछ समय के लिए गड़बड़ी होना या सेवा का कुछ समय के लिए उपलब्ध न होना. | ट्रंकेटेड एक्स्पोनेंशियल बैकऑफ़ के साथ, आइडमपोटेंट अनुरोधों को फिर से भेजें. |
एचटीटीपी अनुरोध और जवाब के उदाहरण
ACCESS_TOKEN, 1234567890, com.example.myapp, और 60e860e8... जैसी प्लेसहोल्डर वैल्यू को अपनी वैल्यू से बदलें.
1. GetDeveloperAccount
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890",
"displayName": "Example Developer",
"verificationState": "VERIFIED"
}
2. ListDeveloperAccounts
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts"रिस्पॉन्स:
{
"developerAccounts": [
{
"name": "developerAccounts/1234567890",
"displayName": "Example Developer",
"verificationState": "VERIFIED"
}
]
}
3. GetAndroidPackageRegistrationPolicy
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/registrationPolicy"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/registrationPolicy",
"knownKeys": [
{
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"justificationRequirement": "NOT_REQUIRED"
}
],
"keySelectionStrategy": "SELECT_KEY_FROM_LIST"
}
4. CreateAndroidPackage
curl -X POST \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{"name": ""}' \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages?androidPackageId=com.example.myapp"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp",
"packageName": "com.example.myapp",
"state": "DRAFT",
"registeredAppStore": false
}
5. GetAndroidPackage
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp",
"packageName": "com.example.myapp",
"state": "REGISTERED",
"registeredAppStore": false
}
6. ListAndroidPackages
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages?pageSize=100"रिस्पॉन्स:
{
"androidPackages": [
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp",
"packageName": "com.example.myapp",
"state": "REGISTERED",
"registeredAppStore": false
}
],
"nextPageToken": ""
}
7. CreateAndroidPackageKey
curl -X POST \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123"
}' \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"state": "DRAFT",
"verificationToken": "token_xyz987654321"
}
8. GetAndroidPackageKey
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"state": "REGISTERED"
}
9. ListAndroidPackageKeys
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys?pageSize=100"रिस्पॉन्स:
{
"androidPackageKeys": [
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"state": "REGISTERED"
}
],
"nextPageToken": ""
}
10. VerifyAndroidPackageKeyOwnership
पहला विकल्प: एक अनुरोध में मीडिया अपलोड करना
curl -X POST \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @app-release.apk \
"https://androiddeveloperconsole.googleapis.com/upload/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123:verify?uploadType=media"दूसरा विकल्प: फिर से अपलोड किया जा सकने वाला प्रोटोकॉल (बड़े APK या सीआई/सीडी के लिए सुझाया गया)
पहला चरण: फिर से अपलोड करने का सेशन शुरू करें और मिले X-Goog-Upload-URL हेडर को निकालें:
curl -i -X POST \
"https://androiddeveloperconsole.googleapis.com/upload/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123:verify" \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: FILE_SIZE_IN_BYTES" \
-H "X-Goog-Upload-Header-Content-Type: application/vnd.android.package-archive" \
-H "Content-Type: application/json" \
-d '{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123"
}'दूसरा चरण: साइन किए गए APK बाइनरी को UPLOAD_SESSION_URI पर अपलोड करें और सेशन को पूरा करें:
curl -X PUT \
"UPLOAD_SESSION_URI" \
-H "Content-Length: FILE_SIZE_IN_BYTES" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@app-release.apk"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"state": "IN_REVIEW"
}
11. JustifyAndroidPackageKeyRegistration
curl -X POST \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"justification": "We previously distributed com.example.myapp directly from https://downloads.example.com and are migrating to our rotated production key."
}' \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123:justifyAndroidPackageKeyRegistration"रिस्पॉन्स:
{
"name": "developerAccounts/1234567890/androidPackages/com.example.myapp/keys/60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"certificateFingerprintSha256": "60e860e8d77251234567890abcdef1234567890abcdef1234567890abcdef123",
"state": "IN_REVIEW",
"registrationJustificationRequired": true
}
अन्य संसाधन
- Android Developer Console API की मदद से पैकेज के नाम रजिस्टर करना
- Android Developer ID Status API की मदद से, ऐप्लिकेशन के रजिस्ट्रेशन का स्टेटस देखना
- Android Developer Console पर रजिस्टर करना
- Google Play Console पर रजिस्टर करना