Android Developer Console API হল একটি RESTful পরিষেবা যা যাচাইকৃত ডেভেলপারদের Android Developer Console-এ Android ডেভেলপার যাচাইকরণ ওয়ার্কফ্লো অটোমেট করতে দেয়, যার মধ্যে ডেভেলপার অ্যাকাউন্ট ফিরিয়ে আনা, কী-এর যোগ্যতার প্রয়োজনীয়তা চেক করা, Android প্যাকেজের নাম রেজিস্টার করা, অ্যাপ সাইনিং কী রেজিস্টার করা এবং কী-এর মালিকানা যাচাই করা অন্তর্ভুক্ত।
ওভারভিউ, ব্যবহারের উদাহরণ ও প্রয়োগের প্রসঙ্গ
মূল ব্যবহারিক ক্ষেত্র ও ফিচার
- অটোমেটেড CI/CD প্যাকেজের নাম রেজিস্ট্রেশন: প্রোগ্রাম্যাটিকভাবে (
CreateAndroidPackage) ডজন বা শত শত Android প্যাকেজের নাম রেজিস্টার করুন। - প্রি-ফ্লাইট হিস্টোরিক্যাল কী পলিসি ইন্সপেকশন: Google আগে ইকোসিস্টেমে কোনও প্যাকেজের নাম লক্ষ্য করেছে কিনা এবং
কোনও নির্দিষ্ট সাইনিং সার্টিফিকেট রেজিস্টার করার জন্য কী-এর মালিকানা যাচাইকরণ (
GetAndroidPackageRegistrationPolicy) প্রয়োজন কিনা তা প্রোগ্রাম্যাটিকভাবে পরীক্ষা করুন। - অটোমেটিক অ্যাপ সাইনিং কী রেজিস্ট্রেশন ও মালিকানা যাচাইকরণ:
পাবলিক সাইনিং সার্টিফিকেট SHA-256 ফিঙ্গারপ্রিন্ট রেজিস্টার করুন
(
CreateAndroidPackageKey), অনন্য যাচাইকরণ চ্যালেঞ্জ টোকেন ফিরিয়ে আনুন (verificationToken) এবং সিঙ্গল-রিকোয়েস্ট বা রিজুম করা যায় এমন সাইন করা APK আপলোড ব্যবহার করে ব্যক্তিগত কী পজেশন অটোমেট করুন (VerifyAndroidPackageKeyOwnership)। - প্রোগ্রামাটিক জাস্টিফিকেশন জমা দেওয়া: মালিকানার জাস্টিফিকেশন জমা দিন
(
JustifyAndroidPackageKeyRegistration)। - স্ট্যাটাস মনিটর করা: ডেভেলপার অ্যাকাউন্ট, প্যাকেজের নাম ও অ্যাপ সাইনিং কী (
GetDeveloperAccount,ListDeveloperAccounts,GetAndroidPackage,ListAndroidPackages,GetAndroidPackageKey,ListAndroidPackageKeys) জুড়ে রেজিস্ট্রেশন স্ট্যাটাস মনিটর করুন।
এন্ড-টু-এন্ড প্রয়োগের ওয়ার্কফ্লো
- UI-তে একবার ডেভেলপারের পরিচয় যাচাই করুন: Android Developer
Console-এ ডেভেলপারের পরিচয় যাচাইকরণ (
INDIVIDUALবাORGANIZATION) সম্পূর্ণ করুন যাতেverificationState,VERIFIEDহয়। - API চালু ও যাচাই করুন: আপনার Google Cloud প্রোজেক্টে
androiddeveloperconsole.googleapis.comচালু করুন এবংhttps://www.googleapis.com/auth/androiddeveloperconsoleস্কোপ সহ ব্যবহারকারী-প্রতিনিধি OAuth 2.0 বিয়ারার অ্যাক্সেস টোকেন পান। - আপনার ডেভেলপার অ্যাকাউন্ট রিসোর্সের নাম খুঁজে নিন:
GET /v1/developerAccounts(ListDeveloperAccounts) কল করেdeveloperAccounts/{developer_account}ফিরিয়ে আনুন এবং যাচাই করুন যেverificationStateহলVERIFIED। - প্যাকেজের নামের জন্য রেজিস্ট্রেশন নীতি চেক করুন:
keySelectionStrategy(SELECT_KEY_FROM_LISTঅথবাUSE_ANY_KEY) এবং আগে থেকে জানা কোনও ঐতিহাসিক সাইনিং কী (knownKeys) পরীক্ষা করতেGET /v1/developerAccounts/{id}/androidPackages/{pkg}/registrationPolicy(GetAndroidPackageRegistrationPolicy) কল করুন। - Android প্যাকেজ রিসোর্স তৈরি করুন:
{"name": ""}বডি সহPOST /v1/developerAccounts/{id}/androidPackages?androidPackageId={pkg}(CreateAndroidPackage) কল করুন (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স্ট্রিং এম্বেড করুন, আপনার ব্যক্তিগত অ্যাপ সাইনিং কী দিয়ে এটি সাইন করুন এবংPOST /upload/v1/developerAccounts/{id}/androidPackages/{pkg}/keys/{sha256}:verify(VerifyAndroidPackageKeyOwnership) ব্যবহার করে এটি আপলোড করুন। - যুক্তি জমা দিন (প্রয়োজন হলে) এবং পোল রেজিস্ট্রেশন স্ট্যাটাস: যদি
কী
OWNERSHIP_VERIFIEDস্ট্যাটাসে থাকে এবংregistrationJustificationRequiredtrueহয়, তাহলেPOST /v1/developerAccounts/{id}/androidPackages/{pkg}/keys/{sha256}:justifyAndroidPackageKeyRegistration(JustifyAndroidPackageKeyRegistration)-এ কল করুন।state,REGISTERED-এ না পৌঁছানো পর্যন্তGetAndroidPackageএবংGetAndroidPackageKeyপোল করুন।
কী ফিঙ্গারপ্রিন্ট ও যাচাইকরণ APK প্রস্তুত করার জন্য লোকাল CLI কমান্ড
কিস্টোর (
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 UI এবং API-এর ক্ষমতা
| টাস্ক | Android Developer Console Web UI (android.google.com/developerconsole) |
Android Developer Console API |
|---|---|---|
| ডেভেলপারের পরিচয় যাচাইকরণ (KYC/KYB) এবং ফি পেমেন্ট | কাজ করে (একবারই পূর্বশর্ত পূরণ করতে হয়) | 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) |
কনসোল UI-তে স্বাক্ষরিত স্নিপেট APK আপলোড করুন | POST /upload/v1/{name}:verify (VerifyAndroidPackageKeyOwnership) |
| কী ম্যানুয়ালি পর্যালোচনা করার প্রয়োজন হলে, যুক্তি জমা দিন | কী রেজিস্ট্রেশন ওয়ার্কফ্লো চলাকালীন টেক্সট প্রম্পট | POST /v1/{name}:justifyAndroidPackageKeyRegistration (JustifyAndroidPackageKeyRegistration) |
পরিষেবা কনফিগারেশন ও যাচাইকরণ
সব API অনুরোধে HTTPS ব্যবহার করতে হবে এবং Android
Developer Console-এ ডেভেলপারের পরিচয় যাচাইকরণ সম্পূর্ণ করেছে এমন Google অ্যাকাউন্টের জন্য OAuth 2.0 ওয়েব সার্ভার ফ্লো ব্যবহার করে পাওয়া Authorization: Bearer
ACCESS_TOKEN হেডার অন্তর্ভুক্ত করতে হবে।
| প্রপার্টি | মান |
|---|---|
| বেস REST এন্ডপয়েন্ট | https://androiddeveloperconsole.googleapis.com |
| মিডিয়া আপলোড এন্ডপয়েন্ট | https://androiddeveloperconsole.googleapis.com/upload |
| API ভার্সন | v1 |
| প্রয়োজনীয় OAuth 2.0 স্কোপ | https://www.googleapis.com/auth/androiddeveloperconsole |
| ডিফল্ট কোটার সীমা | প্রতিটি Google Cloud প্রোজেক্টের প্রতিটি পদ্ধতির জন্য প্রতিদিন 2,000টি অনুরোধ |
API রিসোর্স ও এন্ডপয়েন্ট
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-এ ডেভেলপারের পরিচয় যাচাইকরণ সম্পূর্ণ করা হয়নি। |
Methods: DeveloperAccount
| পদ্ধতি | HTTP অনুরোধ | বর্ণনা |
|---|---|---|
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 তা পর্যালোচনা করছে। CreateAndroidPackageKey-এর সাথে সাথে (যখন 'কী' মালিকানা যাচাইকরণ এড়িয়ে যাওয়া হয়, যার মধ্যে একই DeveloperAccount-এ অন্য প্যাকেজের নামের জন্য 'কী' আগে থেকেই যাচাই করা থাকলে) অথবা VerifyAndroidPackageKeyOwnership এবং প্রয়োজন হলে JustifyAndroidPackageKeyRegistration সম্পূর্ণ করার পরে, প্যাকেজ DRAFT থেকে IN_REVIEW-এ ট্রানজিশন করে। |
REGISTERED |
Android ডেভেলপার যাচাইকরণের জন্য এই ডেভেলপার অ্যাকাউন্টে প্যাকেজের নাম সক্রিয়ভাবে রেজিস্টার করা আছে। |
PENDING_TRANSFER |
অন্য ডেভেলপার অ্যাকাউন্টে মালিকানা ট্রান্সফার সম্পূর্ণ করার জন্য প্যাকেজের নাম অপেক্ষা করছে। |
রিসোর্স: AndroidPackageRegistrationPolicy
GetAndroidPackageRegistrationPolicy
দ্বারা রিটার্ন করা সিঙ্গলটন রিসোর্স
যা কোনও প্যাকেজের নামের জন্য শনাক্ত করা ঐতিহাসিক পাবলিক সাইনিং কী এবং
প্রদত্ত সাইনিং কী সহ প্যাকেজের নাম রেজিস্টার করার জন্য লিখিত
যুক্তি প্রয়োজন কিনা তা বর্ণনা করে।
| ফিল্ড | ধরন | বর্ণনা |
|---|---|---|
name |
string |
শনাক্তকারী। developerAccounts/{developer_account}/androidPackages/{android_package}/registrationPolicy ফর্ম্যাটে রিসোর্সের নাম। |
knownKeys[] |
object (KnownKey) |
এই প্যাকেজের নাম সহ অ্যাপ ডিস্ট্রিবিউট করার সময় আগে লক্ষ্য করা অ্যাপ সাইনিং কী-এর তালিকা, certificateFingerprintSha256 অনুযায়ী বর্ণানুক্রমিকভাবে সাজানো। |
knownKeys[].certificateFingerprintSha256 |
string |
শুধু আউটপুট। ঐতিহাসিক সাইনিং সার্টিফিকেটের (কোলন ছাড়া) নরমালাইজ করা ৬৪-অক্ষরের ছোট হাতের হেক্সাডেসিমেল SHA-256 ফিঙ্গারপ্রিন্ট। |
knownKeys[].justificationRequirement |
enum (JustificationRequirement) |
শুধু আউটপুট। এই 'কী' রেজিস্টার করার জন্য JustifyAndroidPackageKeyRegistration (REQUIRED বা NOT_REQUIRED) কল করতে হবে কিনা তা দেখায়। একই DeveloperAccount-এর অধীনে অন্য কোনও প্যাকেজের নামে সাইনিং 'কী' আগে যাচাই করা হয়ে থাকলে, justificationRequirement-এর মান REQUIRED হলেও VerifyAndroidPackageKeyOwnership এবং JustifyAndroidPackageKeyRegistration উভয়ই এড়িয়ে যাওয়া হয়। |
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-এ ট্রানজিশন করে (অথবা CreateAndroidPackageKey-এর সাথে সাথে যদি 'কী' আগে একই DeveloperAccount-এর অধীনে অন্য প্যাকেজের নামে যাচাই করা হয়ে থাকে)। |
Enum: AndroidPackageRegistrationPolicy.KeySelectionStrategy
| মান | বর্ণনা |
|---|---|
SELECT_KEY_FROM_LIST |
কলকারীকে knownKeys-এ তালিকাভুক্ত ঐতিহাসিক কীগুলির মধ্যে একটি রেজিস্টার করতে হবে। |
USE_ANY_KEY |
knownKeys-এ থাকা যেকোনও কী ছাড়াও, কলার যেকোনও বৈধ অ্যাপ সাইনিং কী রেজিস্টার করতে পারবেন যা আগে Android ইকোসিস্টেমে দেখা যায়নি। |
পদ্ধতি: AndroidPackage
| পদ্ধতি | HTTP অনুরোধ | বর্ণনা |
|---|---|---|
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} হল কোলন ছাড়া নরমালাইজ করা ৬৪-অক্ষরের ছোট হাতের হেক্সাডেসিমেল SHA-256 ফিঙ্গারপ্রিন্ট। CreateAndroidPackageKey কল করার সময় অবশ্যই বাদ দিতে হবে বা খালি রাখতে হবে। |
certificateFingerprintSha256 |
string |
প্রয়োজনীয়। পরিবর্তন করা যাবে না। অ্যাপ সাইনিং সার্টিফিকেটের SHA-256 হ্যাশ। CreateAndroidPackageKey-এ ইনপুট হিসেবে, হয় প্লেন ৬৪-অক্ষরের হেক্স (60e860e8...) অথবা কোলন দ্বারা আলাদা করা হেক্স (60:E8:60:E8:...) গ্রহণ করে। আউটপুটে, কোলন ছাড়া ৬৪-অক্ষরের ছোট হাতের হেক্সাডেসিমাল হিসেবে সবসময় নরমালাইজ করা হয়। |
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-এর মাধ্যমে 'কী' রেজিস্ট্রেশন পর্যালোচনা করা হচ্ছে। মালিকানার প্রমাণ প্রয়োজন না হলে (যেমন, Android-এ আগে কখনও দেখা যায়নি এমন নতুন প্যাকেজের নাম অথবা একই DeveloperAccount-এর অধীনে অন্য প্যাকেজের নামে 'কী' আগে যাচাই করা হলে, যা JustifyAndroidPackageKeyRegistration-কেও এড়িয়ে যায়), VerifyAndroidPackageKeyOwnership-এর ঠিক পরে (registrationJustificationRequired, false হলে) অথবা JustifyAndroidPackageKeyRegistration-এর পরে (registrationJustificationRequired, true হলে) CreateAndroidPackageKey-এর সাথে সাথে এখানে 'কী' ট্রানজিশন করে। |
REGISTERED |
Android ডেভেলপার যাচাইকরণ-এর জন্য এই প্যাকেজের নামে অ্যাপ সাইনিং কী সক্রিয়ভাবে রেজিস্টার করা আছে। |
PENDING_TRANSFER |
অ্যাপ সাইনিং কী রেজিস্ট্রেশন ট্রান্সফার সম্পূর্ণ হওয়ার জন্য অপেক্ষা করছে। |
পদ্ধতি: AndroidPackageKey
| পদ্ধতি | HTTP অনুরোধ | বর্ণনা |
|---|---|---|
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 |
ব্যক্তিগত কী-এর মালিকানা যাচাই করতে এবং পর্যালোচনার জন্য প্রস্তুত কী জমা দিতে assets/adi-registration.properties-এ verificationToken সহ একটি স্বাক্ষরিত ন্যূনতম APK আপলোড করে। |
JustifyAndroidPackageKeyRegistration |
POST /v1/{name=developerAccounts/*/androidPackages/*/keys/*}:justifyAndroidPackageKeyRegistration |
registrationJustificationRequired-এর মান true হলে, অতিরিক্ত যুক্তিযুক্ত প্রসঙ্গ জমা দেয় এবং পর্যালোচনার জন্য যাচাই করা 'কী' জমা দেয়। |
সমস্যা ম্যানেজ করা
API অনুরোধ ব্যর্থ হলে, Android Developer Console API একটি HTTP
4xx বা 5xx স্ট্যাটাস কোড এবং একটি স্ট্যান্ডার্ড
google.rpc.Status JSON ত্রুটি বডি ফেরত দেয়:
{
"error": {
"code": 400,
"message": "Invalid certificate fingerprint SHA256 format.",
"status": "INVALID_ARGUMENT",
"details": []
}
}
HTTP স্ট্যাটাস কোড ও সাধারণ সমাধান
| HTTP কোড | gRPC স্ট্যাটাস | সাধারণ কারণ | রেজোলিউশন |
|---|---|---|---|
400 Bad Request |
INVALID_ARGUMENT |
জাভা-স্টাইল 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 বিয়ারার অ্যাক্সেস টোকেন নেই, মেয়াদ শেষ হয়ে গেছে বা ভুল অথবা API কী বা পরিষেবা অ্যাকাউন্ট ব্যবহার করে যাচাই করার চেষ্টা করা হয়েছে। | 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 |
সাময়িক ব্যাকএন্ড সমস্যা বা সাময়িকভাবে পরিষেবা উপলভ্য না থাকা। | ট্রাঙ্কেট করা এক্সপোনেনশিয়াল ব্যাকঅফ সহ আইডেমপোটেন্ট অনুরোধ আবার চেষ্টা করুন। |
HTTP অনুরোধ ও উত্তরের উদাহরণ
ACCESS_TOKEN, 1234567890,
com.example.myapp এবং 60e860e8...-এর মতো প্লেসহোল্ডার ভ্যালু আপনার নিজস্ব ভ্যালু দিয়ে পরিবর্তন করুন।
১. GetDeveloperAccount
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts/1234567890"উত্তর:
{
"name": "developerAccounts/1234567890",
"displayName": "Example Developer",
"verificationState": "VERIFIED"
}
২. ListDeveloperAccounts
curl -X GET \
-H "Authorization: Bearer ACCESS_TOKEN" \
"https://androiddeveloperconsole.googleapis.com/v1/developerAccounts"উত্তর:
{
"developerAccounts": [
{
"name": "developerAccounts/1234567890",
"displayName": "Example Developer",
"verificationState": "VERIFIED"
}
]
}
৩. 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"
}
৪. 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
}
৫. 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
}
৬. 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": ""
}
৭. 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"
}
৮. 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"
}
৯. 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": ""
}
১০. 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 বা CI/CD-এর জন্য সাজেস্ট করা হয়)
ধাপ ১: আবার চালু করা যায় এমন আপলোড সেশন শুরু করুন এবং ফেরত আসা
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"
}'ধাপ ২: UPLOAD_SESSION_URI-এ সাইন করা APK বাইনারি আপলোড করুন এবং সেশন
চূড়ান্ত করুন:
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"
}
১১. 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-এ রেজিস্টার করা