লাইসেন্সিং রেফারেন্স

LVL ক্লাস এবং ইন্টারফেস

সারণী 1 অ্যান্ড্রয়েড SDK-এর মাধ্যমে উপলব্ধ লাইসেন্স যাচাইকরণ লাইব্রেরির (LVL) সমস্ত উত্স ফাইলের তালিকা করে৷ সমস্ত ফাইল com.android.vending.licensing প্যাকেজের অংশ।

সারণি 1. LVL লাইব্রেরি ক্লাস এবং ইন্টারফেসের সারাংশ।

শ্রেণী নাম বর্ণনা
লাইসেন্স চেক এবং ফলাফল লাইসেন্স চেকার লাইসেন্স চেক শুরু করার জন্য আপনি যে ক্লাসটি ইনস্ট্যান্ট (বা সাবক্লাস) করেন।
লাইসেন্স চেকার কলব্যাক ইন্টারফেস যা আপনি লাইসেন্স চেকের ফলাফল পরিচালনা করতে প্রয়োগ করেন।
নীতি নীতি লাইসেন্স প্রতিক্রিয়ার উপর ভিত্তি করে অ্যাপ্লিকেশনটিতে অ্যাক্সেসের অনুমতি দেওয়া হবে কিনা তা নির্ধারণ করতে আপনি যে ইন্টারফেসটি প্রয়োগ করেন৷
সার্ভার-ম্যানেজড পলিসি ডিফল্ট Policy বাস্তবায়ন। লাইসেন্স ডেটা, লাইসেন্সের বৈধতা, পুনরায় চেষ্টা করার স্থানীয় সঞ্চয়স্থান পরিচালনা করতে লাইসেন্সিং সার্ভার দ্বারা প্রদত্ত সেটিংস ব্যবহার করে।
কঠোর নীতি বিকল্প Policy বাস্তবায়ন। শুধুমাত্র সার্ভার থেকে সরাসরি লাইসেন্স প্রতিক্রিয়ার উপর ভিত্তি করে লাইসেন্সিং প্রয়োগ করে। কোন ক্যাশিং বা অনুরোধ পুনরায় চেষ্টা করুন.
ডেটা অস্পষ্টতা
(ঐচ্ছিক)
অবাস্কেটর ইন্টারফেস যা আপনি প্রয়োগ করেন যদি আপনি একটি Policy (যেমন সার্ভারম্যানেজড পলিসি) ব্যবহার করেন যা একটি স্থায়ী দোকানে লাইসেন্স প্রতিক্রিয়া ডেটা ক্যাশ করে। লেখা বা পড়া ডেটা এনকোড এবং ডিকোড করতে একটি অস্পষ্টকরণ অ্যালগরিদম প্রয়োগ করে।
AESObfuscator ডিফল্ট অবফুসকেটর ইমপ্লিমেন্টেশন যা ডেটাকে অস্পষ্ট/অস্পষ্ট করতে AES এনক্রিপশন/ডিক্রিপশন অ্যালগরিদম ব্যবহার করে।
ডিভাইসের সীমাবদ্ধতা
(ঐচ্ছিক)
ডিভাইস লিমিটার ইন্টারফেস যা আপনি প্রয়োগ করেন যদি আপনি একটি নির্দিষ্ট ডিভাইসে একটি অ্যাপ্লিকেশন ব্যবহার সীমাবদ্ধ করতে চান। লাইসেন্স ভ্যালিডেটর থেকে কল করা হয়েছে। বেশিরভাগ অ্যাপ্লিকেশনের জন্য DeviceLimiter প্রয়োগ করার সুপারিশ করা হয় না কারণ এটির জন্য একটি ব্যাকএন্ড সার্ভার প্রয়োজন এবং ব্যবহারকারী লাইসেন্সকৃত অ্যাপ্লিকেশনগুলিতে অ্যাক্সেস হারাতে পারে, যদি না যত্ন সহকারে ডিজাইন করা হয়।
NullDeviceLimeter ডিফল্ট ডিভাইসলিমিটার বাস্তবায়ন যা একটি নো-অপ (সমস্ত ডিভাইসে অ্যাক্সেসের অনুমতি দেয়)।
লাইব্রেরি কোর, কোন ইন্টিগ্রেশন প্রয়োজন প্রতিক্রিয়া ডেটা একটি লাইসেন্স প্রতিক্রিয়ার ক্ষেত্র ধারণ করে এমন ক্লাস।
লাইসেন্স ভ্যালিডেটর ক্লাস যা লাইসেন্সিং সার্ভার থেকে প্রাপ্ত প্রতিক্রিয়া ডিক্রিপ্ট করে এবং যাচাই করে।
বৈধতা ব্যতিক্রম শ্রেণী যে ত্রুটিগুলি নির্দেশ করে যা একটি Obfuscator দ্বারা পরিচালিত ডেটার অখণ্ডতা যাচাই করার সময় ঘটে৷
PreferenceObfuscator ইউটিলিটি ক্লাস যা সিস্টেমের SharedPreferences স্টোরে অস্পষ্ট ডেটা লেখে/পড়ে।
আইএলসেন্সিং সার্ভিস একমুখী IPC ইন্টারফেস যার মাধ্যমে Google Play ক্লায়েন্টের কাছে লাইসেন্স চেক অনুরোধ পাঠানো হয়।
ILlicenseResult Listener একমুখী IPC কলব্যাক বাস্তবায়ন যার উপর অ্যাপ্লিকেশন লাইসেন্সিং সার্ভার থেকে একটি অ্যাসিঙ্ক্রোনাস প্রতিক্রিয়া পায়।

সার্ভার প্রতিক্রিয়া

সারণী 2 লাইসেন্সিং সার্ভার দ্বারা প্রত্যাবর্তিত সমস্ত লাইসেন্স প্রতিক্রিয়া ক্ষেত্রগুলির তালিকা করে৷

সারণি 2. Google Play সার্ভার দ্বারা প্রত্যাবর্তিত লাইসেন্স প্রতিক্রিয়া ক্ষেত্রগুলির সারাংশ৷

মাঠ বর্ণনা
responseCode লাইসেন্সিং সার্ভার দ্বারা প্রত্যাবর্তিত প্রতিক্রিয়া কোড। প্রতিক্রিয়া কোডগুলি সার্ভার রেসপন্স কোডগুলিতে রূপরেখা দেওয়া হয়েছে।
signedData লাইসেন্সিং সার্ভার দ্বারা প্রত্যাবর্তিত ডেটা ধারণ করে একটি স্ট্রিং সংযোজন, নিম্নরূপ: responseCode|nonce|packageName|versionCode|userId|timestamp:extras
  • responseCode : লাইসেন্সিং সার্ভার দ্বারা প্রত্যাবর্তিত প্রতিক্রিয়া কোড।
  • nonce : অনুরোধের ননস শনাক্তকারী।
  • packageName : লাইসেন্স চেক করার জন্য অ্যাপের প্যাকেজের নাম।
  • versionCode : লাইসেন্স চেক করার জন্য অ্যাপের সংস্করণ কোড।
  • userId : প্রতি অ্যাপ ব্যবহারকারীর জন্য একটি অনন্য আইডি, যেখানে একই ব্যবহারকারী একটি ভিন্ন অ্যাপের জন্য আলাদা আইডি পায়।
  • timestamp : 1970-01-01 00:00:00 UTC এর যুগ থেকে অনুরোধ পর্যন্ত মিলিসেকেন্ডের সংখ্যা।
  • extras : অ্যাপের লাইসেন্স পরিচালনায় সহায়তা করার জন্য অতিরিক্ত তথ্য। অতিরিক্ত ক্ষেত্রগুলি সার্ভার রেসপন্স এক্সট্রাস -এ বর্ণিত আছে।
signature একটি অ্যাপ-নির্দিষ্ট কী ব্যবহার করে signedData স্বাক্ষর।

সার্ভার রেসপন্স কোড

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

সারণি 3. লাইসেন্স প্রতিক্রিয়ায় Google Play সার্ভার দ্বারা প্রত্যাবর্তিত প্রতিক্রিয়া কোডগুলির সারাংশ৷

প্রতিক্রিয়া কোড পূর্ণসংখ্যা-মান উপস্থাপনা বর্ণনা স্বাক্ষরিত? অতিরিক্ত মন্তব্য
LICENSED 0 অ্যাপ্লিকেশন ব্যবহারকারীর লাইসেন্স করা হয়. ব্যবহারকারী অ্যাপ্লিকেশনটি কিনেছেন, অথবা অ্যাপ্লিকেশনটির আলফা বা বিটা সংস্করণ ডাউনলোড এবং ইনস্টল করার জন্য অনুমোদিত৷ হ্যাঁ VT , GT , GR Policy সীমাবদ্ধতা অনুযায়ী অ্যাক্সেসের অনুমতি দিন।
LICENSED_OLD_KEY 2 অ্যাপ্লিকেশনটি ব্যবহারকারীর কাছে লাইসেন্সপ্রাপ্ত, তবে একটি আপডেট করা অ্যাপ্লিকেশন সংস্করণ উপলব্ধ রয়েছে যা একটি ভিন্ন কী দিয়ে স্বাক্ষরিত৷ হ্যাঁ VT , GT , GR , UT ঐচ্ছিকভাবে Policy সীমাবদ্ধতা অনুযায়ী অ্যাক্সেসের অনুমতি দিন।

ইঙ্গিত দিতে পারে যে ইনস্টল করা অ্যাপ্লিকেশন সংস্করণ দ্বারা ব্যবহৃত কী জোড়াটি অবৈধ বা আপস করা হয়েছে৷ অ্যাপ্লিকেশনটি প্রয়োজনে অ্যাক্সেসের অনুমতি দিতে পারে বা ব্যবহারকারীকে জানাতে পারে যে একটি আপগ্রেড উপলব্ধ রয়েছে এবং আপগ্রেড না হওয়া পর্যন্ত আরও ব্যবহার সীমিত করতে পারে।

NOT_LICENSED 1 অ্যাপ্লিকেশন ব্যবহারকারীর লাইসেন্স করা হয় না. না প্রবেশের অনুমতি দেবেন না।
ERROR_CONTACTING_SERVER 257 স্থানীয় ত্রুটি — Google Play অ্যাপ্লিকেশনটি লাইসেন্সিং সার্ভারে পৌঁছাতে সক্ষম হয়নি, সম্ভবত নেটওয়ার্ক উপলব্ধতার সমস্যার কারণে। না Policy পুনরায় চেষ্টা সীমা অনুযায়ী লাইসেন্স চেক পুনরায় চেষ্টা করুন.
ERROR_SERVER_FAILURE 4 সার্ভার ত্রুটি — সার্ভার লাইসেন্সের জন্য অ্যাপ্লিকেশনের কী জোড়া লোড করতে পারেনি৷ না Policy পুনরায় চেষ্টা সীমা অনুযায়ী লাইসেন্স চেক পুনরায় চেষ্টা করুন.
ERROR_INVALID_PACKAGE_NAME 258 স্থানীয় ত্রুটি — অ্যাপ্লিকেশনটি ডিভাইসে ইনস্টল করা নেই এমন একটি প্যাকেজের জন্য লাইসেন্স চেক করার অনুরোধ করেছে৷ না লাইসেন্স চেক পুনরায় চেষ্টা করবেন না.

সাধারণত একটি উন্নয়ন ত্রুটি দ্বারা সৃষ্ট.

ERROR_NON_MATCHING_UID 259 স্থানীয় ত্রুটি — অ্যাপ্লিকেশনটি এমন একটি প্যাকেজের জন্য লাইসেন্স চেক করার অনুরোধ করেছে যার UID (প্যাকেজ, ব্যবহারকারী আইডি জোড়া) অনুরোধ করা অ্যাপ্লিকেশনটির সাথে মেলে না। না লাইসেন্স চেক পুনরায় চেষ্টা করবেন না.

সাধারণত একটি উন্নয়ন ত্রুটি দ্বারা সৃষ্ট.

ERROR_NOT_MARKET_MANAGED 3 সার্ভার ত্রুটি — অ্যাপ্লিকেশন (প্যাকেজের নাম) Google Play দ্বারা স্বীকৃত হয়নি৷ না লাইসেন্স চেক পুনরায় চেষ্টা করবেন না.

ইঙ্গিত করতে পারে যে অ্যাপ্লিকেশনটি Google Play এর মাধ্যমে প্রকাশিত হয়নি বা লাইসেন্সিং বাস্তবায়নে একটি বিকাশ ত্রুটি রয়েছে৷

দ্রষ্টব্য: টেস্টিং এনভায়রনমেন্ট সেট আপ- এ নথিভুক্ত হিসাবে, প্রতিক্রিয়া কোডটি অ্যাপ্লিকেশন ডেভেলপার এবং Google Play কনসোলের মাধ্যমে নিবন্ধিত পরীক্ষা ব্যবহারকারীদের জন্য ম্যানুয়ালি ওভাররাইড করা যেতে পারে।

দ্রষ্টব্য: পূর্বে আপনি একটি অপ্রকাশিত "খসড়া" সংস্করণ আপলোড করে একটি অ্যাপ পরীক্ষা করতে পারেন। এই কার্যকারিতা আর সমর্থিত নয়; পরিবর্তে, আপনাকে অবশ্যই এটি আলফা বা বিটা বিতরণ চ্যানেলে প্রকাশ করতে হবে৷ আরও তথ্যের জন্য, খসড়া অ্যাপগুলি আর সমর্থিত নয় দেখুন৷

সার্ভার প্রতিক্রিয়া অতিরিক্ত

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

যেকোন Policy বাস্তবায়ন লাইসেন্সের প্রতিক্রিয়া থেকে অতিরিক্ত সেটিংস বের করতে পারে এবং প্রয়োজনে সেগুলি ব্যবহার করতে পারে। LVL ডিফল্ট Policy ইমপ্লিমেন্টেশন, ServerManagedPolicy , একটি কার্যকরী ইমপ্লিমেন্টেশন হিসেবে কাজ করে এবং কিভাবে সেটিংস প্রাপ্ত, সঞ্চয় এবং ব্যবহার করতে হয় তার একটি উদাহরণ হিসেবে কাজ করে।

সারণী 4. লাইসেন্স প্রতিক্রিয়ায় Google Play সার্ভার দ্বারা সরবরাহকৃত লাইসেন্স-ব্যবস্থাপনা সেটিংসের সারাংশ।

অতিরিক্ত বর্ণনা
VT লাইসেন্সের বৈধতা টাইমস্ট্যাম্প। বর্তমান (ক্যাশেড) লাইসেন্স প্রতিক্রিয়ার মেয়াদ শেষ হওয়ার তারিখ/সময় নির্দিষ্ট করে এবং লাইসেন্সিং সার্ভারে পুনরায় চেক করা আবশ্যক। লাইসেন্সের মেয়াদকাল সম্পর্কে নীচের বিভাগটি দেখুন।
GT গ্রেস পিরিয়ড টাইমস্ট্যাম্প। যে সময়ের মধ্যে একটি নীতি আবেদনে অ্যাক্সেসের অনুমতি দিতে পারে সেই সময়ের সমাপ্তি নির্দিষ্ট করে, যদিও প্রতিক্রিয়ার স্থিতি RETRY

মানটি সার্ভার দ্বারা পরিচালিত হয়, তবে একটি সাধারণ মান 5 বা তার বেশি দিন হবে৷ পুনরায় চেষ্টার সময়কাল এবং সর্বোচ্চ পুনঃপ্রচেষ্টা গণনা সম্পর্কে নীচের বিভাগটি দেখুন।

GR সর্বোচ্চ পুনঃপ্রচারের সংখ্যা। ব্যবহারকারীর অ্যাপ্লিকেশানে প্রবেশাধিকার অস্বীকার করার আগে Policy পরপর কতগুলি RETRY লাইসেন্স চেক করার অনুমতি দেবে তা নির্দিষ্ট করে৷

মানটি সার্ভার দ্বারা পরিচালিত হয়, তবে একটি সাধারণ মান "10" বা তার বেশি হবে৷ পুনরায় চেষ্টার সময়কাল এবং সর্বোচ্চ পুনঃপ্রচেষ্টা গণনা সম্পর্কে নীচের বিভাগটি দেখুন।

UT টাইমস্ট্যাম্প আপডেট করুন। সেই দিন/সময় নির্দিষ্ট করে যখন এই অ্যাপ্লিকেশনটির সবচেয়ে সাম্প্রতিক আপডেট আপলোড এবং প্রকাশিত হয়েছিল।

সার্ভারটি শুধুমাত্র LICENSED_OLD_KEYS প্রতিক্রিয়াগুলির জন্য এই অতিরিক্তটি ফেরত দেয়, যাতে অ্যাপ্লিকেশনটিতে ব্যবহারকারীর অ্যাক্সেস অস্বীকার করার আগে নতুন লাইসেন্সিং কীগুলির সাথে একটি আপডেট প্রকাশিত হওয়ার পর থেকে কত সময় অতিবাহিত হয়েছে তা নির্ধারণ করতে Policy অনুমতি দেয়৷

FILE_URL1 বা FILE_URL2 একটি সম্প্রসারণ ফাইলের URL (1 প্রধান ফাইলের জন্য, 2 হল প্যাচ ফাইল)। HTTP এর মাধ্যমে ফাইল ডাউনলোড করতে এটি ব্যবহার করুন।
FILE_NAME1 বা FILE_NAME2 সম্প্রসারণ ফাইলের নাম (1 প্রধান ফাইলের জন্য, 2 প্যাচ ফাইল)। ডিভাইসে ফাইল সংরক্ষণ করার সময় আপনাকে অবশ্যই এই নামটি ব্যবহার করতে হবে।
FILE_SIZE1 বা FILE_SIZE2 বাইটে ফাইলের আকার (1 প্রধান ফাইলের জন্য, 2 প্যাচ ফাইল)। ডাউনলোডে সহায়তা করতে এবং ডাউনলোড করার আগে ডিভাইসের শেয়ার্ড স্টোরেজ লোকেশনে পর্যাপ্ত জায়গা পাওয়া যায় কিনা তা নিশ্চিত করতে এটি ব্যবহার করুন।

লাইসেন্সের মেয়াদকাল

Google Play লাইসেন্সিং সার্ভার সমস্ত ডাউনলোড করা অ্যাপ্লিকেশনের জন্য একটি লাইসেন্স বৈধতার সময়কাল সেট করে৷ সময়কালটি সময়ের ব্যবধানকে প্রকাশ করে যার উপর একটি অ্যাপ্লিকেশনের লাইসেন্সের স্থিতি অপরিবর্তিত এবং অ্যাপ্লিকেশনটিতে লাইসেন্সিং Policy দ্বারা ক্যাশেযোগ্য হিসাবে বিবেচনা করা উচিত। লাইসেন্সিং সার্ভারটি সমস্ত লাইসেন্স চেকের প্রতিক্রিয়াতে বৈধতার সময়কাল অন্তর্ভুক্ত করে, কী VT এর অধীনে অতিরিক্ত হিসাবে প্রতিক্রিয়াটিতে বৈধতার শেষের টাইমস্ট্যাম্প যুক্ত করে। একটি Policy VT কী মান বের করতে পারে এবং বৈধতার মেয়াদ শেষ না হওয়া পর্যন্ত লাইসেন্সটি পুনরায় পরীক্ষা না করে শর্তসাপেক্ষে অ্যাপ্লিকেশনটিতে অ্যাক্সেসের অনুমতি দিতে এটি ব্যবহার করতে পারে।

লাইসেন্সের বৈধতা লাইসেন্সিং Policy সংকেত দেয় যখন এটি লাইসেন্সিং সার্ভারের সাথে লাইসেন্সের স্থিতি পুনরায় পরীক্ষা করতে হবে। একটি অ্যাপ্লিকেশন আসলে ব্যবহারের জন্য লাইসেন্স করা হয়েছে কিনা তা বোঝানোর উদ্দেশ্য নয় । অর্থাৎ, যখন একটি অ্যাপ্লিকেশনের লাইসেন্সের বৈধতার মেয়াদ শেষ হয়ে যায়, তখন এর অর্থ এই নয় যে অ্যাপ্লিকেশনটি আর ব্যবহারের জন্য লাইসেন্সপ্রাপ্ত নয় — বরং, এটি শুধুমাত্র নির্দেশ করে যে Policy সার্ভারের সাথে লাইসেন্সিং স্থিতি পুনরায় পরীক্ষা করতে হবে। এটি অনুসরণ করে যে, লাইসেন্সের বৈধতার মেয়াদ শেষ না হওয়া পর্যন্ত, সার্ভারে একটি নতুন লাইসেন্স চেক পাঠানোর পরিবর্তে স্থানীয়ভাবে প্রাথমিক লাইসেন্সের স্থিতি ক্যাশ করা এবং ক্যাশ করা লাইসেন্সের স্থিতি ফেরত দেওয়া Policy জন্য গ্রহণযোগ্য।

লাইসেন্সিং সার্ভার প্রদত্ত অ্যাপ্লিকেশনের জন্য Google Play দ্বারা প্রদত্ত রিফান্ড সময়কাল জুড়ে লাইসেন্সিং যথাযথভাবে প্রয়োগ করতে অ্যাপ্লিকেশনটিকে সহায়তা করার উপায় হিসাবে বৈধতার সময়কাল পরিচালনা করে৷ এটি আবেদনটি কেনা হয়েছিল কিনা এবং যদি তাই হয়, কতদিন আগে তার উপর ভিত্তি করে বৈধতার সময়কাল সেট করে। বিশেষত, সার্ভারটি নিম্নরূপ একটি বৈধতা সময়কাল সেট করে:

  • একটি প্রদত্ত অ্যাপ্লিকেশনের জন্য, সার্ভার প্রাথমিক লাইসেন্সের বৈধতা সময়কাল সেট করে যাতে লাইসেন্সের প্রতিক্রিয়া যতক্ষণ পর্যন্ত আবেদনটি ফেরতযোগ্য হয় ততক্ষণ পর্যন্ত বৈধ থাকে। আবেদনে একটি লাইসেন্সিং Policy প্রাথমিক লাইসেন্স চেকের ফলাফল ক্যাশ করতে পারে এবং বৈধতার মেয়াদ শেষ না হওয়া পর্যন্ত লাইসেন্সটি পুনরায় পরীক্ষা করার প্রয়োজন নেই।
  • যখন একটি অ্যাপ্লিকেশন আর ফেরতযোগ্য হয় না, সার্ভার একটি দীর্ঘ মেয়াদের সময়কাল সেট করে — সাধারণত অনেক দিন।
  • একটি বিনামূল্যের অ্যাপ্লিকেশনের জন্য, সার্ভারটি একটি অত্যন্ত উচ্চ মান ( long.MAX_VALUE ) এর বৈধতার সময়কাল সেট করে৷ এটি নিশ্চিত করে যে, যদি Policy স্থানীয়ভাবে বৈধতার টাইমস্ট্যাম্প ক্যাশ করে থাকে, তাহলে ভবিষ্যতে আবেদনের লাইসেন্সের স্থিতি পুনরায় পরীক্ষা করার প্রয়োজন হবে না।

ServerManagedPolicy পলিসি বাস্তবায়ন ব্যবহারকারীকে অ্যাপ্লিকেশান অ্যাক্সেস করার অনুমতি দেওয়ার আগে সার্ভারের সাথে লাইসেন্সের স্থিতি পুনঃচেক করতে হবে কিনা তা নির্ধারণের প্রাথমিক শর্ত হিসাবে নিষ্কাশিত টাইমস্ট্যাম্প ( mValidityTimestamp ) ব্যবহার করে৷

পুনরায় চেষ্টা করার সময়কাল এবং সর্বোচ্চ পুনঃপ্রচেষ্টা গণনা

কিছু ক্ষেত্রে, সিস্টেম বা নেটওয়ার্ক শর্তাবলী লাইসেন্সিং সার্ভারে পৌঁছাতে একটি অ্যাপ্লিকেশনের লাইসেন্স চেককে বাধা দিতে পারে, বা সার্ভারের প্রতিক্রিয়াকে Google Play ক্লায়েন্ট অ্যাপ্লিকেশনে পৌঁছাতে বাধা দিতে পারে। উদাহরণস্বরূপ, ব্যবহারকারী একটি অ্যাপ্লিকেশন চালু করতে পারে যখন কোনো সেল নেটওয়ার্ক বা ডেটা সংযোগ উপলব্ধ না থাকে—যেমন যখন একটি বিমানে থাকে—অথবা যখন নেটওয়ার্ক সংযোগটি অস্থির থাকে বা সেল সংকেত দুর্বল থাকে৷

যখন নেটওয়ার্ক সমস্যাগুলি লাইসেন্স পরীক্ষাকে বাধা দেয় বা বাধা দেয়, তখন Google Play ক্লায়েন্ট Policy processServerResponse() পদ্ধতিতে একটি RETRY প্রতিক্রিয়া কোড ফেরত দিয়ে অ্যাপ্লিকেশনটিকে অবহিত করে৷ সিস্টেম সমস্যার ক্ষেত্রে, যেমন অ্যাপ্লিকেশনটি যখন Google Play এর ILicensingService বাস্তবায়নের সাথে আবদ্ধ হতে অক্ষম হয়, তখন LicenseChecker লাইব্রেরি নিজেই একটি RETRY প্রতিক্রিয়া কোড সহ Policy processServerResponse() পদ্ধতিকে কল করে।

সাধারণভাবে, RETRY রেসপন্স কোড হল অ্যাপ্লিকেশনটির জন্য একটি সংকেত যে একটি ত্রুটি ঘটেছে যা লাইসেন্স চেক সম্পূর্ণ হতে বাধা দিয়েছে।

Google Play সার্ভার একটি অ্যাপ্লিকেশনকে ত্রুটির শর্তে লাইসেন্সিং পরিচালনা করতে একটি পুনঃচেষ্টা "অনুগ্রহের সময়কাল" সেট করে এবং একটি প্রস্তাবিত সর্বোচ্চ পুনঃপ্রচার গণনা সেট করে সহায়তা করে৷ সার্ভার সমস্ত লাইসেন্স চেক প্রতিক্রিয়াগুলিতে এই মানগুলিকে অন্তর্ভুক্ত করে, GT এবং GR কীগুলির অধীনে অতিরিক্ত হিসাবে যুক্ত করে।

অ্যাপ্লিকেশন Policy GT এবং GR অতিরিক্তগুলি বের করতে পারে এবং শর্তসাপেক্ষে অ্যাপ্লিকেশনটিতে অ্যাক্সেসের অনুমতি দেওয়ার জন্য ব্যবহার করতে পারে, নিম্নরূপ:

  • একটি লাইসেন্স চেক করার জন্য যার ফলস্বরূপ RETRY প্রতিক্রিয়া দেখা যায়, Policy RETRY প্রতিক্রিয়া কোডটি ক্যাশে করা উচিত এবং RETRY প্রতিক্রিয়াগুলির সংখ্যা বৃদ্ধি করা উচিত।
  • Policy ব্যবহারকারীকে অ্যাপ্লিকেশানটি অ্যাক্সেস করার অনুমতি দেওয়া উচিত, যদি হয় পুনঃপ্রচেষ্টার গ্রেস পিরিয়ড এখনও সক্রিয় থাকে বা সর্বোচ্চ পুনঃপ্রচারের গণনা পৌঁছানো না হয়।

ServerManagedPolicy উপরে বর্ণিত হিসাবে সার্ভার দ্বারা সরবরাহকৃত GT এবং GR মান ব্যবহার করে। নীচের উদাহরণটি allow() পদ্ধতিতে পুনরায় চেষ্টা করার প্রতিক্রিয়াগুলির শর্তসাপেক্ষ পরিচালনা দেখায়। RETRY প্রতিক্রিয়ার গণনা processServerResponse() পদ্ধতিতে বজায় রাখা হয়, দেখানো হয় না।

কোটলিন

fun allowAccess(): Boolean {
    val ts = System.currentTimeMillis()
    return when(lastResponse) {
        LICENSED -> {
            // Check if the LICENSED response occurred within the validity timeout.
            ts <= validityTimestamp  // Cached LICENSED response is still valid.
        }
        RETRY -> {
            ts < lastResponseTime + MILLIS_PER_MINUTE &&
                    // Only allow access if we are within the retry period
                    // or we haven't used up our max retries.
                    (ts <= retryUntil || retryCount <= maxRetries)
        }
        else -> false
    }
}

জাভা

public boolean allowAccess() {
    long ts = System.currentTimeMillis();
    if (lastResponse == LicenseResponse.LICENSED) {
        // Check if the LICENSED response occurred within the validity timeout.
        if (ts <= validityTimestamp) {
            // Cached LICENSED response is still valid.
            return true;
        }
    } else if (lastResponse == LicenseResponse.RETRY &&
                ts < lastResponseTime + MILLIS_PER_MINUTE) {
        // Only allow access if we are within the retry period
        // or we haven't used up our max retries.
        return (ts <= retryUntil || retryCount <= maxRetries);
    }
    return false;
}