সার্ভার-সাইড যাচাইকরণ (SSV) কলব্যাকগুলি যাচাই করুন, সার্ভার-সাইড যাচাইকরণ (SSV) কলব্যাকগুলি যাচাই করুন, সার্ভার-সাইড যাচাইকরণ (SSV) কলব্যাকগুলিকে বৈধ করুন

সার্ভার-সাইড ভেরিফিকেশন কলব্যাক হলো গুগল দ্বারা বর্ধিত কোয়েরি প্যারামিটারসহ ইউআরএল রিকোয়েস্ট, যা গুগল একটি বাহ্যিক সিস্টেমে পাঠায় এই তথ্য জানানোর জন্য যে, কোনো ব্যবহারকারী একটি রিওয়ার্ডেড বা রিওয়ার্ডেড ইন্টারস্টিশিয়াল বিজ্ঞাপনের সাথে ইন্টারঅ্যাক্ট করার জন্য পুরস্কৃত হবেন। রিওয়ার্ডেড এসএসভি (সার্ভার-সাইড ভেরিফিকেশন) কলব্যাকগুলো ব্যবহারকারীদের পুরস্কৃত করার জন্য ক্লায়েন্ট-সাইড কলব্যাক স্পুফিংয়ের বিরুদ্ধে সুরক্ষার একটি অতিরিক্ত স্তর প্রদান করে।

এই নির্দেশিকাটি আপনাকে দেখাবে কিভাবে 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
&timestamp=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 কলব্যাকগুলো গুগল থেকেই আসছে?
এসএসভি কলব্যাকগুলো গুগল থেকেই আসছে কিনা, তা যাচাই করতে রিভার্স ডিএনএস লুকআপ ব্যবহার করুন।