সার্ভার-সাইড ভেরিফিকেশন কলব্যাক হলো গুগল দ্বারা বর্ধিত কোয়েরি প্যারামিটারসহ ইউআরএল রিকোয়েস্ট, যা গুগল একটি বাহ্যিক সিস্টেমে পাঠায় এই তথ্য জানানোর জন্য যে, কোনো ব্যবহারকারী একটি রিওয়ার্ডেড বা রিওয়ার্ডেড ইন্টারস্টিশিয়াল বিজ্ঞাপনের সাথে ইন্টারঅ্যাক্ট করার জন্য পুরস্কৃত হবেন। রিওয়ার্ডেড এসএসভি (সার্ভার-সাইড ভেরিফিকেশন) কলব্যাকগুলো ব্যবহারকারীদের পুরস্কৃত করার জন্য ক্লায়েন্ট-সাইড কলব্যাক স্পুফিংয়ের বিরুদ্ধে সুরক্ষার একটি অতিরিক্ত স্তর প্রদান করে।
এই নির্দেশিকাটি আপনাকে দেখাবে কিভাবে Tink Java Apps নামক থার্ড-পার্টি ক্রিপ্টোগ্রাফিক লাইব্রেরি ব্যবহার করে রিওয়ার্ডেড SSV কলব্যাকগুলো যাচাই করতে হয়, যাতে কলব্যাকের কোয়েরি প্যারামিটারগুলো বৈধ মান হয়। যদিও এই নির্দেশিকার জন্য Tink ব্যবহার করা হয়েছে, আপনার কাছে ECDSA সমর্থন করে এমন যেকোনো থার্ড-পার্টি লাইব্রেরি ব্যবহার করার বিকল্প রয়েছে। এছাড়াও আপনি AdMob UI-এর টেস্টিং টুল দিয়ে আপনার সার্ভার পরীক্ষা করতে পারেন।
পূর্বশর্ত
- আপনার বিজ্ঞাপন ইউনিটে পুরস্কৃত সার্ভার-সাইড যাচাইকরণ সক্রিয় করুন।
Tink Java Apps লাইব্রেরি থেকে RewardedAdsVerifier ব্যবহার করুন
Tink Java Apps GitHub রিপোজিটরিতে একটি RewardedAdsVerifier হেল্পার ক্লাস রয়েছে, যা একটি রিওয়ার্ডেড SSV কলব্যাক ভেরিফাই করার জন্য প্রয়োজনীয় কোড কমাতে সাহায্য করে। এই ক্লাসটি ব্যবহার করে আপনি নিম্নলিখিত কোডের সাহায্যে একটি কলব্যাক URL ভেরিফাই করতে পারবেন।
RewardedAdsVerifier verifier = new RewardedAdsVerifier.Builder()
.fetchVerifyingPublicKeysWith(
RewardedAdsVerifier.KEYS_DOWNLOADER_INSTANCE_PROD)
.build();
String rewardUrl = ...;
verifier.verify(rewardUrl);
যদি verify() মেথডটি কোনো এক্সেপশন তৈরি না করে এক্সিকিউট হয়, তাহলে কলব্যাক URL-টি সফলভাবে ভেরিফাই করা হয়েছে। " ব্যবহারকারীকে পুরস্কৃত করা" বিভাগে ব্যবহারকারীদের কখন পুরস্কৃত করা উচিত সে সম্পর্কিত সেরা অনুশীলনগুলো বিস্তারিতভাবে বর্ণনা করা হয়েছে। পুরস্কৃত SSV কলব্যাকগুলো ভেরিফাই করার জন্য এই ক্লাসটি যে ধাপগুলো সম্পাদন করে তার বিশদ বিবরণের জন্য, আপনি "পুরস্কৃত SSV-এর ম্যানুয়াল ভেরিফিকেশন" বিভাগটি পড়তে পারেন।
SSV কলব্যাক প্যারামিটার
সার্ভার-সাইড ভেরিফিকেশন কলব্যাকগুলিতে কোয়েরি প্যারামিটার থাকে, যা রিওয়ার্ডেড অ্যাড ইন্টারঅ্যাকশনটির বর্ণনা দেয়। প্যারামিটারের নাম, বিবরণ এবং উদাহরণ মান নিচে তালিকাভুক্ত করা হলো। প্যারামিটারগুলো বর্ণানুক্রমিকভাবে পাঠানো হয়।
| প্যারামিটার নাম | বর্ণনা | উদাহরণ মান |
|---|---|---|
| বিজ্ঞাপন_নেটওয়ার্ক | যে বিজ্ঞাপন উৎসটি এই বিজ্ঞাপনটি প্রদর্শন করেছে, তার বিজ্ঞাপন উৎস শনাক্তকারী। আইডি মানগুলির সাথে সঙ্গতিপূর্ণ বিজ্ঞাপন উৎসের নামগুলি 'বিজ্ঞাপন উৎস শনাক্তকারী' বিভাগে তালিকাভুক্ত করা হয়েছে। | ১৯৫৩৫৪৭০৭৩৫২৮০৯০৩২৫ |
| ad_unit | রিওয়ার্ডেড বিজ্ঞাপনটির অনুরোধ করতে ব্যবহৃত AdMob অ্যাড ইউনিট আইডি। | ২৭৪৭২৩৭১৩৫ |
| key_id | SSV কলব্যাক যাচাই করার জন্য ব্যবহৃত কী। এই মানটি AdMob কী সার্ভার দ্বারা প্রদত্ত একটি পাবলিক কী-এর সাথে ম্যাপ করা থাকে। | ১২৩৪৫৬৭৮৯০ |
| পুরস্কারের পরিমাণ | বিজ্ঞাপন ইউনিটের সেটিংসে উল্লেখিত পুরস্কারের পরিমাণ। | ৫ |
| পুরস্কার_আইটেম | বিজ্ঞাপন ইউনিটের সেটিংসে নির্দিষ্ট করা পুরস্কার সামগ্রী। | মুদ্রা |
| স্বাক্ষর | AdMob দ্বারা তৈরি SSV কলব্যাকের জন্য স্বাক্ষর। | MEUCIQCLJS_s4ia_sN06HqzeW7Wc3nhZi4RlW3qV0oO-6AIYdQIgGJEh-rzKreO-paNDbSCzWGMtmgJHYYW9k2_icM9LFMY |
| টাইমস্ট্যাম্প | ব্যবহারকারীকে পুরস্কৃত করার সময়কার টাইমস্ট্যাম্প, যা ইপক টাইম (মিলিসেকেন্ডে) হিসেবে পরিমাপ করা হয়। | ১৫০৭৭৭০৩৬৫২৩৭৮২৩ |
| লেনদেন_আইডি | AdMob দ্বারা তৈরি প্রতিটি পুরস্কার প্রদান ইভেন্টের জন্য একটি অনন্য হেক্স এনকোডেড শনাক্তকারী। | 18fa792de1bca816048293fc71035638 |
| ব্যবহারকারীর আইডি | SetUserId দ্বারা প্রদত্ত ব্যবহারকারী শনাক্তকারী।অ্যাপটি যদি কোনো ব্যবহারকারী শনাক্তকারী প্রদান না করে, তাহলে এই কোয়েরি প্যারামিটারটি SSV কলব্যাকে উপস্থিত থাকবে না। | ১২৩৪৫৬৭ |
বিজ্ঞাপনের উৎস শনাক্তকারী
বিজ্ঞাপনের উৎসের নাম এবং আইডি
| বিজ্ঞাপনের উৎসের নাম | বিজ্ঞাপনের উৎস আইডি |
|---|---|
| বিজ্ঞাপন তৈরি (বিডিং) | 1477265452970951479 |
| অ্যাডকলোনি | 15586990674969969776 |
| অ্যাডকলোনি (বিডিং) | 6895345910719072481 |
| অ্যাডফ্যালকন | 3528208921554210682 |
| অ্যাডমব নেটওয়ার্ক | 5450213213286189855 |
| অ্যাডমব নেটওয়ার্ক ওয়াটারফল | 1215381445328257950 |
| অ্যাপলভিন | 1063618907739174004 |
| অ্যাপলভিন (বিডিং) | 1328079684332308356 |
| চার্টবুস্ট | 2873236629771172317 |
| চকলেট প্ল্যাটফর্ম (নিলাম) | 6432849193975106527 |
| কাস্টম ইভেন্ট | 18351550913290782395 |
| ডিটি এক্সচেঞ্জ* ২০২২ সালের ২১শে সেপ্টেম্বরের আগে এই নেটওয়ার্কটি 'ফাইভার মার্কেটপ্লেস' নামে পরিচিত ছিল। | 2179455223494392917 |
| ইকুয়েটিভ (বিডিং)* ১২ জানুয়ারী, ২০২৩-এর আগে, এই নেটওয়ার্কটি "স্মার্ট অ্যাডসার্ভার" নামে পরিচিত ছিল। | 5970199210771591442 |
| ওঠানামা (নিলাম) | 8419777862490735710 |
| ফ্লারি | 3376427960656545613 |
| ফাইবার* এই বিজ্ঞাপনের উৎসটি ঐতিহাসিক প্রতিবেদনের জন্য ব্যবহৃত হয়। | 4839637394546996422 |
| আই-মোবাইল | 5208827440166355534 |
| ডিজিটাল উন্নত করুন (বিডিং) | 159382223051638006 |
| সূচক বিনিময় (নিলাম) | 4100650709078789802 |
| ইনমোবি | 7681903010231960328 |
| ইনমোবি (বিডিং) | 6325663098072678541 |
| ইনমোবি এক্সচেঞ্জ (বিডিং) | 5264320421916134407 |
| আয়রনসোর্স | 6925240245545091930 |
| ironSource বিজ্ঞাপন (বিডিং) | 1643326773739866623 |
| লিডবোল্ট | 2899150749497968595 |
| লিফটঅফ মনিটাইজ* ৩০ জানুয়ারী, ২০২৩-এর আগে এই নেটওয়ার্কটি "Vungle" নামে পরিচিত ছিল। | 1953547073528090325 |
| Liftoff Monetize (বিডিং)* ৩০ জানুয়ারী, ২০২৩-এর আগে, এই নেটওয়ার্কটি "Vungle (bidding)" নামে পরিচিত ছিল। | 4692500501762622185 |
| এলজি ইউ+এডি | 18298738678491729107 |
| লাইন অ্যাডস নেটওয়ার্ক | 3025503711505004547 |
| ম্যাগনাইট ডিভি+ (নিলাম) | 3993193775968767067 |
| মাইও | 7505118203095108657 |
| মাইও (বিডিং) | 1343336733822567166 |
| মিডিয়া.নেট (বিডিং) | 2127936450554446159 |
| মধ্যস্থতাকারীর মাধ্যমে বাড়ির বিজ্ঞাপন | 6060308706800320801 |
| মেটা অডিয়েন্স নেটওয়ার্ক* ২০২২ সালের ৬ই জুনের আগে এই নেটওয়ার্কটি "ফেসবুক অডিয়েন্স নেটওয়ার্ক" নামে পরিচিত ছিল। | 10568273599589928883 |
| মেটা অডিয়েন্স নেটওয়ার্ক (বিডিং)* ৬ জুন, ২০২২-এর আগে, এই নেটওয়ার্কটি "ফেসবুক অডিয়েন্স নেটওয়ার্ক (বিডিং)" নামে পরিচিত ছিল। | 11198165126854996598 |
| মিন্টেগ্রাল | 1357746574408896200 |
| মিন্টেগ্রাল (বিডিং) | 6250601289653372374 |
| মবফক্স (বিডিং) | 3086513548163922365 |
| MoPub ( অপ্রচলিত ) | 10872986198578383917 |
| আমার লক্ষ্য | 8450873672465271579 |
| নেন্ড | 9383070032774777750 |
| নেক্সেন (বিডিং)* ১ মে, ২০২৪-এর আগে এই নেটওয়ার্কটি "UnrulyX" নামে পরিচিত ছিল। | 2831998725945605450 |
| ওয়ানট্যাগ এক্সচেঞ্জ (বিডিং) | 4873891452523427499 |
| ওপেনএক্স (বিডিং) | 4918705482605678398 |
| প্যাঙ্গল | 4069896914521993236 |
| পঙ্গল (নিলাম) | 3525379893916449117 |
| পাবম্যাটিক (বিডিং) | 3841544486172445473 |
| সংরক্ষণ অভিযান | 7068401028668408324 |
| এসকে গ্রহ | 734341340207269415 |
| শেয়ারথ্রু (বিডিং) | 5247944089976324188 |
| Smaato (বিডিং) | 3362360112145450544 |
| সোনোবি (বিডিং) | 3270984106996027150 |
| ট্যাপজয় | 7295217276740746030 |
| ট্যাপজয় (বিডিং) | 4692500501762622178 |
| টেনসেন্ট জিডিটি | 7007906637038700218 |
| ট্রিপললিফট (বিডিং) | 8332676245392738510 |
| ইউনিটি বিজ্ঞাপন | 4970775877303683148 |
| ইউনিটি অ্যাডস (বিডিং) | 7069338991535737586 |
| ভার্ভ গ্রুপ (বিডিং) | 5013176581647059185 |
| ভিপন | 1940957084538325905 |
| ইল্ডমো (বিডিং) | 4193081836471107579 |
| YieldOne (বিডিং) | 3154533971590234104 |
| জুকস | 5506531810221735863 |
ব্যবহারকারীকে পুরস্কৃত করা
কোনো ব্যবহারকারীকে কখন পুরস্কৃত করা হবে, সেই সিদ্ধান্ত নেওয়ার সময় ব্যবহারকারীর অভিজ্ঞতা এবং পুরস্কারের বৈধতা যাচাইয়ের মধ্যে ভারসাম্য রক্ষা করা গুরুত্বপূর্ণ। সার্ভার-সাইড কলব্যাকগুলো বাহ্যিক সিস্টেমে পৌঁছানোর আগে বিলম্বের সম্মুখীন হতে পারে। তাই, প্রস্তাবিত সর্বোত্তম পদ্ধতি হলো ক্লায়েন্ট-সাইড কলব্যাক ব্যবহার করে ব্যবহারকারীকে তাৎক্ষণিকভাবে পুরস্কৃত করা এবং সার্ভার-সাইড কলব্যাক প্রাপ্তির পর সমস্ত পুরস্কারের বৈধতা যাচাই করা। এই পদ্ধতিটি প্রদত্ত পুরস্কারের বৈধতা নিশ্চিত করার পাশাপাশি একটি ভালো ব্যবহারকারীর অভিজ্ঞতাও প্রদান করে।
তবে, যেসব অ্যাপ্লিকেশনের ক্ষেত্রে পুরস্কারের বৈধতা অত্যন্ত গুরুত্বপূর্ণ (উদাহরণস্বরূপ, পুরস্কারটি আপনার অ্যাপের ইন-গেম ইকোনমিকে প্রভাবিত করে) এবং পুরস্কার প্রদানে বিলম্ব গ্রহণযোগ্য, সেখানে যাচাইকৃত সার্ভার-সাইড কলব্যাকের জন্য অপেক্ষা করাই সর্বোত্তম পন্থা হতে পারে।
কাস্টম ডেটা
যেসব অ্যাপের সার্ভার-সাইড ভেরিফিকেশন কলব্যাকে অতিরিক্ত ডেটার প্রয়োজন হয়, তাদের রিওয়ার্ডেড অ্যাডের কাস্টম ডেটা ফিচারটি ব্যবহার করা উচিত। একটি রিওয়ার্ডেড অ্যাড অবজেক্টে সেট করা যেকোনো স্ট্রিং ভ্যালু SSV কলব্যাকের custom_data কোয়েরি প্যারামিটারে পাস করা হয়। যদি কোনো কাস্টম ডেটা ভ্যালু সেট করা না থাকে, তাহলে custom_data কোয়েরি প্যারামিটারের ভ্যালুটি SSV কলব্যাকে উপস্থিত থাকবে না।
নিম্নলিখিত কোড নমুনাটি দেখায় যে কীভাবে রিওয়ার্ডেড বিজ্ঞাপনটি লোড হওয়ার পরে SSV অপশনগুলি সেট করতে হয়:
private void LoadRewardedAd(string adUnitId)
{
// Send the request to load the ad.
AdRequest adRequest = new AdRequest();
RewardedAd.Load(adUnitId, adRequest, (RewardedAd rewardedAd, LoadAdError error) =>
{
// If the operation failed with a reason.
if (error != null)
{
Debug.LogError("Rewarded ad failed to load an ad with error : " + error);
return;
}
var options = new ServerSideVerificationOptions
.Builder()
.SetCustomData("SAMPLE_CUSTOM_DATA_STRING")
.Build()
rewardedAd.SetServerSideVerificationOptions(options);
});
}
আপনি যদি নিজস্ব পুরস্কারের কোড সেট করতে চান, তবে বিজ্ঞাপনটি দেখানোর আগেই তা করতে হবে।
পুরস্কৃত এসএসভি-র ম্যানুয়াল যাচাইকরণ
একটি রিওয়ার্ডেড এসএসভি যাচাই করার জন্য RewardedAdsVerifier ক্লাস দ্বারা সম্পাদিত ধাপগুলো নিচে বর্ণনা করা হলো। যদিও অন্তর্ভুক্ত কোড স্নিপেটগুলো জাভাতে লেখা এবং এতে Tink থার্ড-পার্টি লাইব্রেরি ব্যবহার করা হয়েছে, আপনিও আপনার পছন্দের ভাষায়, ECDSA সমর্থন করে এমন যেকোনো থার্ড-পার্টি লাইব্রেরি ব্যবহার করে এই ধাপগুলো বাস্তবায়ন করতে পারেন।
পাবলিক কীগুলি আনুন
একটি পুরস্কৃত SSV কলব্যাক যাচাই করার জন্য, আপনার AdMob কর্তৃক প্রদত্ত একটি পাবলিক কী প্রয়োজন।
পুরস্কৃত SSV কলব্যাকগুলি যাচাই করার জন্য ব্যবহৃত পাবলিক কীগুলির একটি তালিকা AdMob কী সার্ভার থেকে সংগ্রহ করা যেতে পারে। পাবলিক কীগুলির তালিকাটি নিম্নলিখিতের অনুরূপ একটি বিন্যাসে JSON উপস্থাপনা হিসাবে সরবরাহ করা হয়:
{
"keys": [
{
keyId: 1916455855,
pem: "-----BEGIN PUBLIC KEY-----\nMF...YTPcw==\n-----END PUBLIC KEY-----"
base64: "MFkwEwYHKoZIzj0CAQYI...ltS4nzc9yjmhgVQOlmSS6unqvN9t8sqajRTPcw=="
},
{
keyId: 3901585526,
pem: "-----BEGIN PUBLIC KEY-----\nMF...aDUsw==\n-----END PUBLIC KEY-----"
base64: "MFYwEAYHKoZIzj0CAQYF...4akdWbWDCUrMMGIV27/3/e7UuKSEonjGvaDUsw=="
},
],
}
পাবলিক কীগুলো পুনরুদ্ধার করতে, AdMob কী সার্ভারে সংযোগ করুন এবং কীগুলো ডাউনলোড করুন। নিম্নলিখিত কোডটি এই কাজটি সম্পন্ন করে এবং কীগুলোর JSON উপস্থাপনাকে data ভেরিয়েবলে সংরক্ষণ করে।
String url = ...;
NetHttpTransport httpTransport = new NetHttpTransport.Builder().build();
HttpRequest httpRequest =
httpTransport.createRequestFactory().buildGetRequest(new GenericUrl(url));
HttpResponse httpResponse = httpRequest.execute();
if (httpResponse.getStatusCode() != HttpStatusCodes.STATUS_CODE_OK) {
throw new IOException("Unexpected status code = " + httpResponse.getStatusCode());
}
String data;
InputStream contentStream = httpResponse.getContent();
try {
InputStreamReader reader = new InputStreamReader(contentStream, UTF_8);
data = readerToString(reader);
} finally {
contentStream.close();
}
মনে রাখবেন যে পাবলিক কীগুলো নিয়মিত পরিবর্তন করা হয়। আসন্ন পরিবর্তনের বিষয়ে আপনাকে জানানোর জন্য একটি ইমেল পাঠানো হবে। আপনি যদি পাবলিক কী ক্যাশ করে রাখেন, তবে এই ইমেলটি পাওয়ার সাথে সাথে কীগুলো আপডেট করে নেবেন।
পাবলিক কীগুলো সংগ্রহ করার পর, সেগুলোকে পার্স করতে হবে। নিচের parsePublicKeysJson মেথডটি উপরের উদাহরণের মতো একটি JSON স্ট্রিং ইনপুট হিসেবে নেয় এবং key_id ভ্যালুগুলো থেকে পাবলিক কী-গুলোর একটি ম্যাপিং তৈরি করে, যেগুলো Tink লাইব্রেরি থেকে ECPublicKey অবজেক্ট হিসেবে এনক্যাপসুলেট করা থাকে।
private static Map<Integer, ECPublicKey> parsePublicKeysJson(String publicKeysJson)
throws GeneralSecurityException {
Map<Integer, ECPublicKey> publicKeys = new HashMap<>();
try {
JSONArray keys = new JSONObject(publicKeysJson).getJSONArray("keys");
for (int i = 0; i < keys.length(); i++) {
JSONObject key = keys.getJSONObject(i);
publicKeys.put(
key.getInt("keyId"),
EllipticCurves.getEcPublicKey(Base64.decode(key.getString("base64"))));
}
} catch (JSONException e) {
throw new GeneralSecurityException("failed to extract trusted signing public keys", e);
}
if (publicKeys.isEmpty()) {
throw new GeneralSecurityException("No trusted keys are available.");
}
return publicKeys;
}
বিষয়বস্তু যাচাই করুন
রিওয়ার্ডেড এসএসভি কলব্যাকের শেষ দুটি কোয়েরি প্যারামিটার সর্বদা signature এবং key_id, এই ক্রমেই থাকে। বাকি কোয়েরি প্যারামিটারগুলো যাচাই করার জন্য বিষয়বস্তু নির্দিষ্ট করে। ধরা যাক, আপনি https://www.myserver.com/mypath এ রিওয়ার্ড কলব্যাক পাঠানোর জন্য AdMob কনফিগার করেছেন। নিচের কোড স্নিপেটটিতে যাচাই করার বিষয়বস্তু হাইলাইট করা একটি উদাহরণ রিওয়ার্ডেড এসএসভি কলব্যাক দেখানো হয়েছে।
https://www.myserver.com/path?ad_network=54...55&ad_unit=12345678&reward_amount=10&reward_item=coins ×tamp=150777823&transaction_id=12...DEF&user_id=1234567&signature=ME...Z1c&key_id=1268887
নিচের কোডটিতে দেখানো হয়েছে কিভাবে একটি কলব্যাক URL থেকে যাচাই করার জন্য বিষয়বস্তুকে একটি UTF-8 বাইট অ্যারে হিসাবে পার্স করতে হয়।
public static final String SIGNATURE_PARAM_NAME = "signature=";
...
URI uri;
try {
uri = new URI(rewardUrl);
} catch (URISyntaxException ex) {
throw new GeneralSecurityException(ex);
}
String queryString = uri.getQuery();
int i = queryString.indexOf(SIGNATURE_PARAM_NAME);
if (i == -1) {
throw new GeneralSecurityException("needs a signature query parameter");
}
byte[] queryParamContentData =
queryString
.substring(0, i - 1)
// i - 1 instead of i because of & in the query string
.getBytes(Charset.forName("UTF-8"));
কলব্যাক URL থেকে সিগনেচার এবং key_id নিন
পূর্ববর্তী ধাপের queryString ভ্যালুটি ব্যবহার করে, নিচে দেখানো অনুযায়ী কলব্যাক URL থেকে signature এবং key_id কোয়েরি প্যারামিটারগুলো পার্স করুন:
public static final String KEY_ID_PARAM_NAME = "key_id=";
...
String sigAndKeyId = queryString.substring(i);
i = sigAndKeyId.indexOf(KEY_ID_PARAM_NAME);
if (i == -1) {
throw new GeneralSecurityException("needs a key_id query parameter");
}
String sig =
sigAndKeyId.substring(
SIGNATURE_PARAM_NAME.length(), i - 1 /* i - 1 instead of i because of & */);
int keyId = Integer.valueOf(sigAndKeyId.substring(i + KEY_ID_PARAM_NAME.length()));
যাচাইকরণ সম্পাদন করুন
চূড়ান্ত ধাপটি হলো উপযুক্ত পাবলিক কী দিয়ে কলব্যাক URL-এর বিষয়বস্তু যাচাই করা। parsePublicKeysJson মেথড থেকে প্রাপ্ত ম্যাপিংটি নিন এবং কলব্যাক URL-এর key_id প্যারামিটার ব্যবহার করে সেই ম্যাপিং থেকে পাবলিক কী-টি সংগ্রহ করুন। তারপর সেই পাবলিক কী দিয়ে সিগনেচারটি যাচাই করুন। এই ধাপগুলো নিচে verify মেথডে দেখানো হয়েছে।
private void verify(final byte[] dataToVerify, int keyId, final byte[] signature)
throws GeneralSecurityException {
Map<Integer, ECPublicKey> publicKeys = parsePublicKeysJson();
if (publicKeys.containsKey(keyId)) {
foundKeyId = true;
ECPublicKey publicKey = publicKeys.get(keyId);
EcdsaVerifyJce verifier = new EcdsaVerifyJce(publicKey, HashType.SHA256, EcdsaEncoding.DER);
verifier.verify(signature, dataToVerify);
} else {
throw new GeneralSecurityException("cannot find verifying key with key ID: " + keyId);
}
}
যদি মেথডটি কোনো এক্সেপশন না দেখিয়ে এক্সিকিউট হয়, তাহলে কলব্যাক ইউআরএলটি সফলভাবে ভেরিফাই করা হয়েছে।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
- আমি কি AdMob কী সার্ভার দ্বারা প্রদত্ত পাবলিক কী ক্যাশ করতে পারি?
- SSV কলব্যাক যাচাই করার জন্য প্রয়োজনীয় অপারেশনের সংখ্যা কমাতে, আমরা আপনাকে AdMob কী সার্ভার দ্বারা প্রদত্ত পাবলিক কী ক্যাশ করে রাখার পরামর্শ দিই। তবে, মনে রাখবেন যে পাবলিক কী নিয়মিতভাবে পরিবর্তন করা হয় এবং এটি ২৪ ঘণ্টার বেশি সময় ধরে ক্যাশ করে রাখা উচিত নয়।
- AdMob কী সার্ভার দ্বারা প্রদত্ত পাবলিক কীগুলি কত ঘন ঘন পরিবর্তন করা হয়?
- AdMob কী সার্ভার দ্বারা প্রদত্ত পাবলিক কীগুলো একটি পরিবর্তনশীল সময়সূচী অনুসারে আবর্তন করা হয়। SSV কলব্যাকের যাচাইকরণ যাতে উদ্দেশ্য অনুযায়ী কাজ করতে থাকে, তা নিশ্চিত করার জন্য পাবলিক কীগুলো ২৪ ঘণ্টার বেশি সময় ধরে ক্যাশ করে রাখা উচিত নয়।
- আমার সার্ভারে সংযোগ না পাওয়া গেলে কী হবে?
- গুগল এসএসভি কলব্যাকের জন্য একটি
HTTP 200 OKসফল স্ট্যাটাস রেসপন্স কোড আশা করে। যদি আপনার সার্ভারে পৌঁছানো না যায় বা এটি প্রত্যাশিত রেসপন্স না দেয়, তাহলে গুগল এক সেকেন্ডের ব্যবধানে সর্বোচ্চ পাঁচবার এসএসভি কলব্যাক পুনরায় পাঠানোর চেষ্টা করবে। - আমি কীভাবে যাচাই করতে পারি যে SSV কলব্যাকগুলো গুগল থেকেই আসছে?
- এসএসভি কলব্যাকগুলো গুগল থেকেই আসছে কিনা, তা যাচাই করতে রিভার্স ডিএনএস লুকআপ ব্যবহার করুন।