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

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

এই নির্দেশিকাটি আপনাকে দেখায় কিভাবে Tink Java Apps থার্ড-পার্টি ক্রিপ্টোগ্রাফিক লাইব্রেরি ব্যবহার করে পুরস্কৃত SSV কলব্যাকগুলি যাচাই করতে হয় যাতে কলব্যাকের ক্যোয়ারী প্যারামিটারগুলি বৈধ মান। যদিও এই গাইডের উদ্দেশ্যে Tink ব্যবহার করা হয়, আপনার কাছে ECDSA সমর্থন করে এমন কোনো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করার বিকল্প আছে। এছাড়াও আপনি AdMob UI-তে টেস্টিং টুল দিয়ে আপনার সার্ভার পরীক্ষা করতে পারেন।

জাভা স্প্রিং-বুট ব্যবহার করে এই সম্পূর্ণ কার্যকরী উদাহরণটি দেখুন।

পূর্বশর্ত

Tink Java Apps লাইব্রেরি থেকে RewardedAdsVerifier ব্যবহার করুন

Tink Java Apps GitHub সংগ্রহস্থলে একটি পুরস্কৃত SSV কলব্যাক যাচাই করার জন্য প্রয়োজনীয় কোড কমাতে একটি RewardedAdsVerifier সহায়ক শ্রেণী অন্তর্ভুক্ত রয়েছে। এই ক্লাসটি ব্যবহার করে আপনি নিম্নলিখিত কোড সহ একটি কলব্যাক URL যাচাই করতে পারবেন৷

RewardedAdsVerifier verifier = new RewardedAdsVerifier.Builder()
    .fetchVerifyingPublicKeysWith(
        RewardedAdsVerifier.KEYS_DOWNLOADER_INSTANCE_PROD)
    .build();
String rewardUrl = ...;
verifier.verify(rewardUrl);

যদি verify() পদ্ধতিটি কোনো ব্যতিক্রম ছাড়াই কার্যকর হয়, তাহলে কলব্যাক URL সফলভাবে যাচাই করা হয়েছে। ব্যবহারকারীদের কখন পুরস্কৃত করা উচিত সে সম্পর্কিত সেরা অনুশীলনের বিবরণ ব্যবহারকারী বিভাগে পুরস্কৃত করা হয়েছে। পুরস্কৃত SSV কলব্যাক যাচাই করার জন্য এই শ্রেণীর দ্বারা সম্পাদিত পদক্ষেপগুলির একটি ব্রেকডাউনের জন্য, আপনি পুরস্কৃত SSV বিভাগের ম্যানুয়াল যাচাইকরণের মাধ্যমে পড়তে পারেন।

SSV কলব্যাক পরামিতি

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

প্যারামিটারের নাম বর্ণনা উদাহরণ মান
ad_network যে বিজ্ঞাপনটি এই বিজ্ঞাপনটি পূরণ করেছে সেই বিজ্ঞাপন উৎসের জন্য বিজ্ঞাপন উৎস শনাক্তকারী। আইডি মানগুলির সাথে সম্পর্কিত বিজ্ঞাপন উত্সের নামগুলি বিজ্ঞাপন উত্স সনাক্তকারী বিভাগে তালিকাভুক্ত করা হয়েছে৷ 1953547073528090325
বিজ্ঞাপন_ইউনিট AdMob বিজ্ঞাপন ইউনিট আইডি যা পুরস্কৃত বিজ্ঞাপনের অনুরোধ করতে ব্যবহৃত হয়েছিল। 2747237135
কাস্টম_ডেটা customRewardString দ্বারা প্রদত্ত কাস্টম ডেটা স্ট্রিং।

যদি অ্যাপ দ্বারা কোনো কাস্টম ডেটা স্ট্রিং প্রদান না করা হয়, তাহলে এই ক্যোয়ারী প্যারামিটার মান SSV কলব্যাকে উপস্থিত থাকবে না।

SAMPLE_CUSTOM_DATA_STRING
key_id SSV কলব্যাক যাচাই করতে ব্যবহার করা কী। এই মানটি AdMob কী সার্ভার দ্বারা প্রদত্ত একটি সর্বজনীন কী-তে মানচিত্র করে। 1234567890
পুরস্কার_অর্থ বিজ্ঞাপন ইউনিট সেটিংসে উল্লেখ করা পুরস্কারের পরিমাণ। 5
reward_item বিজ্ঞাপন ইউনিট সেটিংসে উল্লেখ করা পুরস্কার আইটেম। মুদ্রা
স্বাক্ষর AdMob দ্বারা জেনারেট করা SSV কলব্যাকের জন্য স্বাক্ষর৷ MEUCIQCLJS_s4ia_sN06HqzeW7Wc3nhZi4RlW3qV0oO-6AIYdQIgGJEh-rzKreO-paNDbSCzWGMtmgJHYYW9k2_icM9LFMY
টাইমস্ট্যাম্প যখন ব্যবহারকারীকে ms-এ Epoch time হিসাবে পুরস্কৃত করা হয়েছিল তার টাইমস্ট্যাম্প৷ 1507770365237823
লেনদেন নাম্বার AdMob দ্বারা জেনারেট করা প্রতিটি পুরস্কার অনুদান ইভেন্টের জন্য অনন্য হেক্স এনকোড করা শনাক্তকারী। 18fa792de1bca816048293fc71035638
ব্যবহারকারী আইডিuserIdentifier .

অ্যাপ দ্বারা কোনো ব্যবহারকারী শনাক্তকারী প্রদান করা না হলে, এই ক্যোয়ারী প্যারামিটারটি SSV কলব্যাকে উপস্থিত থাকবে না।

1234567

বিজ্ঞাপন উৎস শনাক্তকারী

বিজ্ঞাপন উৎসের নাম এবং আইডি

Ad source name Ad source ID
Aarki (bidding)5240798063227064260
Ad Generation (bidding)1477265452970951479
AdColony15586990674969969776
AdColony (non-SDK) (bidding)4600416542059544716
AdColony (bidding)6895345910719072481
AdFalcon3528208921554210682
AdMob Network5450213213286189855
ADResult10593873382626181482
AMoAd17253994435944008978
Applovin1063618907739174004
Applovin (bidding)1328079684332308356
Chartboost2873236629771172317
Chocolate Platform (bidding)6432849193975106527
CrossChannel (MdotM)9372067028804390441
Custom Event18351550913290782395
DT Exchange*
* Prior to September 21, 2022, this network was called "Fyber Marketplace".
2179455223494392917
EMX (bidding)8497809869790333482
Fluct (bidding)8419777862490735710
Flurry3376427960656545613
Fyber*
* This ad source is used for historical reporting.
4839637394546996422
i-mobile5208827440166355534
Improve Digital (bidding)159382223051638006
Index Exchange (bidding)4100650709078789802
InMobi7681903010231960328
InMobi (bidding)6325663098072678541
IronSource6925240245545091930
ironSource Ads (bidding)1643326773739866623
Leadbolt2899150749497968595
LG U+AD18298738678491729107
LINE Ads Network3025503711505004547
maio7505118203095108657
maio (bidding)1343336733822567166
Media.net (bidding)2127936450554446159
Mediated house ads6060308706800320801
Meta Audience Network*
* Prior to June 6, 2022, this network was called "Facebook Audience Network".
10568273599589928883
Meta Audience Network (bidding)*
* Prior to June 6, 2022, this network was called "Facebook Audience Network (bidding)".
11198165126854996598
Mintegral1357746574408896200
Mintegral (bidding)6250601289653372374
MobFox8079529624516381459
MobFox (bidding)3086513548163922365
MoPub (deprecated)10872986198578383917
myTarget8450873672465271579
Nend9383070032774777750
Nexxen (bidding)*

* Prior to May 1, 2024, this network was called "UnrulyX".

2831998725945605450
ONE by AOL (Millennial Media)6101072188699264581
ONE by AOL (Nexage)3224789793037044399
OneTag Exchange (bidding)4873891452523427499
OpenX (bidding)4918705482605678398
Pangle (bidding)3525379893916449117
PubMatic (bidding)3841544486172445473
Reservation campaign7068401028668408324
RhythmOne (bidding)2831998725945605450
Rubicon (bidding)3993193775968767067
SK planet734341340207269415
Sharethrough (bidding)5247944089976324188
Smaato (bidding)3362360112145450544
Equativ (bidding)*

* Prior to January 12, 2023, this network was called "Smart Adserver".

5970199210771591442
Sonobi (bidding)3270984106996027150
Tapjoy7295217276740746030
Tapjoy (bidding)4692500501762622178
Tencent GDT7007906637038700218
TripleLift (bidding)8332676245392738510
Unity Ads4970775877303683148
Verizon Media7360851262951344112
Verve Group (bidding)5013176581647059185
Vpon1940957084538325905
Liftoff Monetize*

* Prior to January 30, 2023, this network was called "Vungle".

1953547073528090325
Liftoff Monetize (bidding)*

* Prior to January 30, 2023, this network was called "Vungle (bidding)".

4692500501762622185
Yieldmo (bidding)4193081836471107579
YieldOne (bidding)3154533971590234104
Zucks5506531810221735863

ব্যবহারকারীকে পুরস্কৃত করা

কোন ব্যবহারকারীকে কখন পুরস্কৃত করা হবে তা সিদ্ধান্ত নেওয়ার সময় ব্যবহারকারীর অভিজ্ঞতা এবং পুরষ্কারের বৈধতার ভারসাম্য বজায় রাখা গুরুত্বপূর্ণ। সার্ভার-সাইড কলব্যাকগুলি বহিরাগত সিস্টেমে পৌঁছানোর আগে বিলম্ব অনুভব করতে পারে। অতএব, সার্ভার-সাইড কলব্যাক প্রাপ্তির পরে সমস্ত পুরস্কারের বৈধতা সম্পাদন করার সময়, ব্যবহারকারীকে অবিলম্বে পুরস্কৃত করার জন্য ক্লায়েন্ট-সাইড কলব্যাক ব্যবহার করা প্রস্তাবিত সর্বোত্তম অনুশীলন। প্রদত্ত পুরস্কারের বৈধতা নিশ্চিত করার সময় এই পদ্ধতিটি একটি ভাল ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

যাইহোক, যেসব অ্যাপ্লিকেশনের জন্য পুরস্কারের বৈধতা গুরুত্বপূর্ণ (উদাহরণস্বরূপ, পুরস্কার আপনার অ্যাপের ইন-গেম অর্থনীতিকে প্রভাবিত করে) এবং পুরস্কার প্রদানে বিলম্ব গ্রহণযোগ্য, যাচাইকৃত সার্ভার-সাইড কলব্যাকের জন্য অপেক্ষা করা সেরা পদ্ধতি হতে পারে।

কাস্টম ডেটা

যে অ্যাপগুলির সার্ভার-সাইড যাচাইকরণ কলব্যাকে অতিরিক্ত ডেটার প্রয়োজন হয় তাদের পুরস্কৃত বিজ্ঞাপনগুলির কাস্টম ডেটা বৈশিষ্ট্য ব্যবহার করা উচিত। পুরস্কৃত বিজ্ঞাপন অবজেক্টে সেট করা যেকোনো স্ট্রিং মান SSV কলব্যাকের custom_data ক্যোয়ারী প্যারামিটারে পাস করা হয়। যদি কোনো কাস্টম ডেটা মান সেট করা না থাকে, custom_data ক্যোয়ারী প্যারামিটার মান SSV কলব্যাকে উপস্থিত থাকবে না।

পুরস্কৃত বিজ্ঞাপন লোড হওয়ার পরে কীভাবে SSV বিকল্পগুলি সেট করতে হয় তা নিম্নলিখিত কোড নমুনাটি প্রদর্শন করে৷

সুইফট

GADRewardedAd.load(withAdUnitID:"ca-app-pub-3940256099942544/1712485313",
                       request: request,
                       completionHandler: { [self] ad, error in
      if let error != error {
      rewardedAd = ad
      let options = GADServerSideVerificationOptions()
      options.customRewardString = "SAMPLE_CUSTOM_DATA_STRING"
      rewardedAd.serverSideVerificationOptions = options
    }

উদ্দেশ্য গ

GADRequest *request = [GADRequest request];
[GADRewardedAd loadWithAdUnitID:@"ca-app-pub-3940256099942544/1712485313"
                        request:request
              completionHandler:^(GADRewardedAd *ad, NSError *error) {
                if (error) {
                  // Handle Error
                  return;
                }
                self.rewardedAd = ad;
                GADServerSideVerificationOptions *options =
                    [[GADServerSideVerificationOptions alloc] init];
                options.customRewardString = @"SAMPLE_CUSTOM_DATA_STRING";
                ad.serverSideVerificationOptions = options;
              }];

পুরস্কৃত SSV-এর ম্যানুয়াল যাচাইকরণ

একটি পুরস্কৃত SSV যাচাই করার জন্য 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 কী সার্ভারের সাথে সংযোগ করুন এবং কীগুলি ডাউনলোড করুন৷ নিম্নলিখিত কোডটি এই কাজটি সম্পন্ন করে এবং data ভেরিয়েবলের কীগুলির JSON উপস্থাপনা সংরক্ষণ করে।

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;
}

যাচাই করার জন্য সামগ্রী পান

পুরস্কৃত SSV কলব্যাকের শেষ দুটি ক্যোয়ারী প্যারামিটার সর্বদা signature এবং key_id, সেই ক্রমে। অবশিষ্ট ক্যোয়ারী পরামিতিগুলি যাচাই করা বিষয়বস্তু নির্দিষ্ট করে৷ ধরুন আপনি https://www.myserver.com/mypath এ পুরস্কার কলব্যাক পাঠাতে AdMob কনফিগার করেছেন। নীচের স্নিপেটটি হাইলাইট করা যাচাই করা বিষয়বস্তুর সাথে পুরস্কৃত SSV কলব্যাকের একটি উদাহরণ দেখায়।

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

একটি UTF-8 বাইট অ্যারে হিসাবে একটি কলব্যাক URL থেকে যাচাই করার জন্য সামগ্রীকে কীভাবে পার্স করতে হয় তা নীচের কোডটি প্রদর্শন করে৷

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);
  }
}

যদি পদ্ধতিটি কোনো ব্যতিক্রম ছাড়াই কার্যকর হয়, তাহলে কলব্যাক URL সফলভাবে যাচাই করা হয়েছে।

FAQ

আমি কি AdMob কী সার্ভারের দেওয়া সর্বজনীন কী ক্যাশে করতে পারি?
আমরা সুপারিশ করি যে আপনি SSV কলব্যাকগুলিকে যাচাই করার জন্য প্রয়োজনীয় ক্রিয়াকলাপগুলির সংখ্যা কমাতে AdMob কী সার্ভার দ্বারা সরবরাহিত সর্বজনীন কীটি ক্যাশে করুন৷ যাইহোক, মনে রাখবেন যে সর্বজনীন কীগুলি নিয়মিত ঘোরানো হয় এবং 24 ঘন্টার বেশি সময় ধরে ক্যাশে করা উচিত নয়৷
AdMob কী সার্ভার দ্বারা সরবরাহ করা সর্বজনীন কীগুলি কত ঘন ঘন ঘোরানো হয়?
AdMob কী সার্ভার দ্বারা প্রদত্ত সর্বজনীন কীগুলি পরিবর্তনশীল সময়সূচীতে ঘোরানো হয়। নিশ্চিত করতে যে SSV কলব্যাকগুলির যাচাইকরণ উদ্দেশ্য অনুযায়ী কাজ করে চলেছে, সর্বজনীন কীগুলি 24 ঘন্টার বেশি ক্যাশে করা উচিত নয়৷
আমার সার্ভারে পৌঁছাতে না পারলে কী হবে?
Google SSV কলব্যাকের জন্য একটি HTTP 200 OK সাফল্যের স্থিতি প্রতিক্রিয়া কোড আশা করে৷ যদি আপনার সার্ভারে পৌঁছানো না যায় বা প্রত্যাশিত প্রতিক্রিয়া প্রদান না করে, Google এক-সেকেন্ডের ব্যবধানে পাঁচ বার পর্যন্ত SSV কলব্যাক পাঠানোর পুনরায় চেষ্টা করবে।
আমি কিভাবে যাচাই করতে পারি যে SSV কলব্যাকগুলি Google থেকে আসছে?
SSV কলব্যাকগুলি Google থেকে এসেছে তা যাচাই করতে বিপরীত DNS লুকআপ ব্যবহার করুন৷