অ্যাপ স্টোর রিভিউ এপিআই ডেভেলপার গাইড

অ্যাপ স্টোর রিভিউ এপিআই, ‘থার্ড-পার্টি অ্যাপ স্টোর অন প্লে’ প্রোগ্রামের মাধ্যমে গুগল প্লে-তে নিবন্ধিত থার্ড-পার্টি অ্যাপ স্টোরগুলোকে তাদের স্টোরে হোস্ট করা অ্যাপগুলোর জন্য প্রয়োজনীয় বিবরণ সরবরাহ করার সুযোগ দেয়। এর মধ্যে রয়েছে অ্যাপ মেটাডেটা, লিস্টিং, এপিকে বাইনারি এবং পলিসি কমপ্লায়েন্স ডিক্লারেশন।

এন্ডপয়েন্ট, মেথড এবং রিসোর্স স্কিমার সম্পূর্ণ তালিকার জন্য, অ্যাপ স্টোর রিভিউ এপিআই রেফারেন্স দেখুন।

শুরু করার আগে

অ্যাপ স্টোর রিভিউ এপিআই-তে কল করার আগে, আপনাকে অবশ্যই মূল ‘গেটিং স্টার্টেড গাইড’ সম্পন্ন করে আপনার এপিআই অ্যাক্সেস, সার্ভিস ক্রেডেনশিয়াল এবং গুগল ক্লাউড প্রজেক্ট সেট আপ করতে হবে। অ্যাপ স্টোর রিভিউ এপিআই প্রতিটি অ্যাপ স্টোরের জন্য প্রতি মিনিটে সর্বোচ্চ ৩০০টি অনুরোধ গ্রহণ করে।


এপিআই ডিজাইন ও আর্কিটেকচার

অ্যাপ স্টোর রিভিউ এপিআই একটি অ্যাটমিক স্ন্যাপশট প্যাটার্নে কাজ করে। ট্রানজ্যাকশনাল সেশন ব্যবহার করার পরিবর্তে, আপনি ফাইলগুলো আলাদাভাবে আপলোড করেন এবং তারপর একটিমাত্র অ্যাটমিক কলের মাধ্যমে সম্পূর্ণ স্টেট কমিট করেন:

  1. আপনি আলাদা আলাদা ফাইল এবং অ্যাসেট (এপিকে, ছবি, এবং পলিসি ফাইল) পৃথক পৃথক সরাসরি কলের মাধ্যমে আপলোড করেন।
  2. আপনি সেই ফাইলগুলির জন্য ফেরত আসা আইডিগুলি ক্যাশে করে রাখেন।
  3. সম্পূর্ণ হোস্টেড অ্যাপের স্টেট অ্যাটমিকভাবে কমিট করার জন্য আপনি একটিমাত্র চূড়ান্ত UpdateAppStoreHostedApp রিকোয়েস্ট সাবমিট করেন।

১. নিবন্ধন

একটি হোস্টেড অ্যাপ রেজিস্টার করতে, অ্যাপটির প্যাকেজ নেম এবং আপনার স্টোরের প্যাকেজ নেম উল্লেখ করে ` createappstorehostedapp মেথডটি কল করুন। রিকোয়েস্ট এবং রেসপন্স স্কিমা সম্পর্কে বিস্তারিত জানতে এপিআই রেফারেন্স দেখুন।


২. বাইনারি এবং অ্যাসেট আপলোড

হোস্টেড অ্যাপটি নিবন্ধিত হয়ে গেলে, আপনাকে অবশ্যই বিশেষায়িত আপলোড এন্ডপয়েন্টগুলো ব্যবহার করে এর অ্যাসেটগুলো আপলোড করতে হবে:

  • APK : অ্যাপটির সক্রিয়ভাবে বিতরণ করা সমস্ত APK বাইনারি ( uploadapk ব্যবহার করে)।
  • ছবি : অ্যাপ আইকন এবং স্ক্রিনশটের মতো ইমেজ অ্যাসেট ( uploadimage ব্যবহার করে)।
  • নীতিমালা : (প্রাসঙ্গিক হলে) নীতিমালা-সম্পর্কিত নথিপত্র ( uploadappstoreapppolicydeclarationfile ব্যবহার করে)।

সম্পদ ক্যাশিং এবং পুনঃব্যবহার

ব্যান্ডউইথ এবং পারফরম্যান্স অপ্টিমাইজ করতে, একই অ্যাসেট পুনরায় আপলোড করবেন না । ফেরত আসা সমস্ত apkId , imageId , এবং fileId টোকেন স্থায়ী। আপনি এই আইডিগুলো আপনার নিজস্ব ব্যাকএন্ড ডেটাবেসে ক্যাশ করে রাখতে পারেন এবং পরবর্তী হোস্টেড অ্যাপ আপডেটে সেগুলো পুনরায় ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি একটি হোস্টেড অ্যাপের বিবরণ আপডেট করেন কিন্তু অ্যাপ আইকন এবং স্ক্রিনশট অপরিবর্তিত থাকে, তাহলে আপনার পরবর্তী আপডেট কলে ক্যাশ করা imageId টোকেনগুলো ব্যবহার করুন।


৩. একত্রিত করুন এবং প্রতিশ্রুতিবদ্ধ করুন

সমস্ত অ্যাসেট সফলভাবে আপলোড করার এবং তাদের নিজ নিজ আইডি সংগ্রহ করার পর, আপনাকে অবশ্যই সম্পূর্ণ হোস্টেড অ্যাপের স্টেট একত্রিত করতে হবে এবং ` 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
  ]
}

নীতি ঘোষণা

এপিআই ব্যবহার করে অ্যাপের তথ্য জমা দেওয়া বা আপডেট করার সময়, আপনাকে অবশ্যই প্রয়োজনীয় নীতি ঘোষণাগুলো অন্তর্ভুক্ত করতে হবে।

ঘোষণার প্রয়োজনীয়তা

নিম্নলিখিত ঘোষণাগুলি আওতাভুক্ত:

অতিরিক্ত ঘোষণার প্রয়োজন আছে কিনা তা নিশ্চিত করার জন্য সমস্ত অ্যাপের জন্য আবশ্যক:

  1. স্বাস্থ্য অ্যাপ: অ্যাপটি কী কী স্বাস্থ্য বৈশিষ্ট্য ব্যবহার করে তা আমাদের জানান, যাতে আমরা বুঝতে পারি যে স্বাস্থ্য অ্যাপ নীতিমালায় অ্যাপটিকে কোন কোন শর্ত পূরণ করতে হবে।
  2. আর্থিক বৈশিষ্ট্য: যে অ্যাপগুলো আর্থিক বৈশিষ্ট্য প্রদান করে, সেগুলোকে কিছু দেশ বা অঞ্চলে নির্দিষ্ট নিয়মকানুন মেনে চলতে হতে পারে। জমা দেওয়া তথ্য সঠিক দল পর্যালোচনা করছে কিনা, তা নিশ্চিত করতে আমাদের সাহায্য করার জন্য অ্যাপের আর্থিক বৈশিষ্ট্যগুলোর সঠিক এবং হালনাগাদ বিবরণ জমা দিন।
  3. বিজ্ঞাপন আইডি: অ্যাপটি বিজ্ঞাপন আইডি ব্যবহার করে কিনা, তা বুঝতে আমাদের সাহায্য করুন।
  4. ক্রেডেনশিয়াল যাচাইকরণ (সাইন ইন বিবরণ): যদি অ্যাপের কোনো অংশ সাইন ইন বিবরণ, সদস্যপদ, অবস্থান বা অন্য কোনো ধরনের প্রমাণীকরণের উপর ভিত্তি করে সীমাবদ্ধ থাকে, তাহলে সেগুলি অ্যাক্সেস করার নির্দেশাবলী প্রদান করুন।
  5. গোপনীয়তা নীতি: অ্যাপটির গোপনীয়তা নীতির লিঙ্ক এবং বিস্তারিত তথ্য।
  6. লক্ষ্য দর্শক ও বিষয়বস্তু: আপনাকে অবশ্যই অ্যাপটির লক্ষ্য বয়সসীমা এবং এর বিষয়বস্তু সম্পর্কিত অন্যান্য তথ্য আমাদের জানাতে হবে। এটি শিশুদের জন্য তৈরি অ্যাপগুলো নিরাপদ ও উপযুক্ত কিনা তা নিশ্চিত করতে সাহায্য করে।
  7. বিজ্ঞাপন: অ্যাপটিতে বিজ্ঞাপন আছে কিনা, তা আপনাকে অবশ্যই আমাদের জানাতে হবে।

শর্তসাপেক্ষে আবশ্যক:

  1. সরকারি অ্যাপ: অ্যাপটি কোনো ধরনের সরকারের ব্যবহারের জন্য কিনা, তা আমাদের জানান। এর মধ্যে জাতীয়, রাজ্য ও নগর সরকার এবং স্থানীয় কর্তৃপক্ষ অন্তর্ভুক্ত। এটি আমাদের নিশ্চিত করতে সাহায্য করে যে সঠিক দলগুলো জমা দেওয়া অ্যাপটি পর্যালোচনা করছে। এই ঘোষণাটি পূরণ করা না হলে, অ্যাপটিকে সরকারি অ্যাপ হিসেবে বিবেচনা করা হবে না।
  2. শিশু সুরক্ষা মানদণ্ড: 'সোশ্যাল' বা 'ডেটিং' ক্যাটাগরির অ্যাপগুলির জন্য আবশ্যক। আমাদের শিশু সুরক্ষা মানদণ্ড নীতি মেনে চলার জন্য সোশ্যাল বা ডেটিং ক্যাটাগরির অ্যাপগুলিকে অবশ্যই প্রকাশিত সুরক্ষা মানদণ্ড এবং যোগাযোগের তথ্য প্রদান করতে হবে।
  3. সংবাদ ও ম্যাগাজিন অ্যাপ: "সংবাদ ও ম্যাগাজিন" বিভাগের অ্যাপগুলোর জন্য এটি আবশ্যক। অ্যাপটির নেপথ্যের সত্তাগুলো সম্পর্কে স্বচ্ছতা প্রদানের জন্য সংবাদ ও ম্যাগাজিন অ্যাপটি সম্পর্কে বিস্তারিত তথ্য যোগ করুন।

এপিআই অনুরোধের কাঠামো

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 : সাধারণ টেক্সট উত্তরের জন্য, URL সহ।
      • value (স্ট্রিং)
    • singleChoiceResponse : যখন একটি তালিকা থেকে কেবল একটি বিকল্প নির্বাচন করা যায়।
      • value (স্ট্রিং): নির্বাচিত প্রতিক্রিয়া বিকল্পের আইডি।
    • multipleChoiceResponse : যখন একাধিক বিকল্প নির্বাচন করা যায়।
      • values (স্ট্রিং-এর অ্যারে): নির্বাচিত প্রতিক্রিয়া বিকল্পগুলির আইডি।
    • documentResponse : যেসব প্রশ্নের জন্য ডকুমেন্ট আপলোড প্রয়োজন, সেগুলোর জন্য। ডকুমেন্ট আপলোড পরিচালনা দেখুন।
    • groupResponse : একাধিক নেস্টেড প্রশ্নের পুনরাবৃত্তিমূলক সেটের জন্য।
    • keyedGroupResponse : একটি নির্দিষ্ট কী দ্বারা গোষ্ঠীভুক্ত নেস্টেড প্রশ্নগুলির সেটের জন্য।

ডিক্লারেশনের উদাহরণ কোডের জন্য বিস্তারিত নির্দেশিকা দেখুন।

ডকুমেন্ট আপলোড পরিচালনা

কিছু পলিসি সংক্রান্ত প্রশ্নের জন্য আপনাকে সহায়ক নথি (যেমন, ফিনান্সিয়াল ফিচারের লাইসেন্স) প্রদান করতে হয়। নথিগুলি সরাসরি UpdateAppStoreHostedAppRequest এ এমবেড করা যায় না। পরিবর্তে, আপনাকে অবশ্যই:

  1. ডকুমেন্ট আপলোড করতে UploadAppStoreAppPolicyDeclarationFile এন্ডপয়েন্টটি ব্যবহার করুন। এটি একটি মিডিয়া আপলোড অনুরোধ। fileType অবশ্যই DECLARATION_FILE_TYPE_DOCUMENT এ সেট করতে হবে।

    • এন্ডপয়েন্ট: POST /androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload
    • সফল আপলোড প্রতিক্রিয়াগুলিতে একটি fileId অন্তর্ভুক্ত থাকবে।
  2. ডকুমেন্ট আইডি উল্লেখ করুন: ডকুমেন্ট প্রশ্নের জন্য PolicyResponse এ documentResponse টাইপটি ব্যবহার করুন। আপলোড ধাপ থেকে প্রাপ্ত fileId দিয়ে documentId ফিল্ডটি পূরণ করুন।

PolicyDocumentResponse অবজেক্ট:

  • documentId (স্ট্রিং, আবশ্যক): 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
    }
  }
}

৪. প্রাপ্যতা নিয়ন্ত্রণ করা

একবার আপনি UpdateAppStoreHostedApp ব্যবহার করে হোস্টেড অ্যাপের স্টেট কমিট করলে, অ্যাপটি স্বয়ংক্রিয়ভাবে প্রসেস হয়ে যায় এবং থার্ড-পার্টি অ্যাপ স্টোরের জন্য গুগল প্লে-তে ডিফল্টরূপে প্রকাশিত হিসেবে চিহ্নিত হয় ।

অ্যাপটি কমিট করার পর সেটির প্রাপ্যতা নিয়ন্ত্রণ করতে, এর স্টেট আপডেট করার জন্য updateappstorehostedapppublishstatus মেথডটি কল করুন:

  • অ্যাপ অপ্রকাশ করা : হোস্ট করা অ্যাপটিকে অনুপলব্ধ করতে, publishState ফিল্ডটিকে APP_STORE_APP_PUBLISH_STATE_UNPUBLISHED এ সেট করুন।
  • অ্যাপ পুনরায় প্রকাশ করা : লিস্টিং পরিবর্তন না করে বা অ্যাসেট পুনরায় আপলোড না করে পূর্বে অপ্রকাশিত কোনো অ্যাপকে আবার উপলব্ধ করতে, publishState ফিল্ডটিকে APP_STORE_APP_PUBLISH_STATE_PUBLISHED এ সেট করুন।