सर्वर-साइड पर की जाने वाली पुष्टि के कॉलबैक, यूआरएल अनुरोध होते हैं. इनमें Google, बड़े किए गए क्वेरी पैरामीटर शामिल होता है. Google इन्हें किसी बाहरी सिस्टम को भेजता है. Google यह सूचना देता है कि उपयोगकर्ता को इनाम वाले या इनाम वाले इंटरस्टीशियल विज्ञापन से इंटरैक्ट करने के लिए इनाम मिलना चाहिए. इनाम वाले SSV (सर्वर साइड क्लाइंट) कॉलबैक उपयोगकर्ताओं को इनाम देने के लिए, क्लाइंट-साइड कॉलबैक के झूठे नाम से मेल खाने की सुविधा से सुरक्षा की एक और लेयर देता है.
इस गाइड में बताया गया है कि इनाम वाले SSV कॉलबैक का पता कैसे लगाया जा सकता है. इसके लिए, Tink तीसरे पक्ष की क्रिप्टोग्राफ़िक लाइब्रेरी का इस्तेमाल करें, ताकि यह पक्का हो सके कि कॉलबैक में मौजूद क्वेरी पैरामीटर की वैल्यू सही हैं. हालांकि, टिंक का इस्तेमाल इस गाइड के लिए किया जाएगा, लेकिन फिर भी आपके पास ECDSA के साथ काम करने वाली किसी तीसरे पक्ष की लाइब्रेरी का इस्तेमाल करने का विकल्प होगा. आप AdMob यूज़र इंटरफ़ेस (यूआई) में टेस्टिंग टूल की मदद से, अपने सर्वर की जांच भी कर सकते हैं.
Java स्प्रिंग-बूट का इस्तेमाल करके यह पूरी तरह से काम करने वाला उदाहरण देखें.
ज़रूरी शर्तें
अपने मोबाइल ऐप्लिकेशन में Google इनाम विज्ञापन के 11.6.0 या इसके बाद के वर्शन के साथ इनाम वाले विज्ञापन जोड़ें.
अपनी विज्ञापन यूनिट पर इनाम वाले सर्वर-साइड पुष्टि की सुविधा चालू करें.
टिंक के इनाम वाले AdsVerifier का इस्तेमाल करना
Tink GitHub की डेटा स्टोर करने की जगह में
RewardedAdsVerifier
हेल्पर क्लास शामिल होती है. यह कोड, एसएसवी कॉलबैक की पुष्टि करने के लिए ज़रूरी कोड को कम करता है.
Tink तीसरे पक्ष की क्रिप्टोग्राफ़िक लाइब्रेरी के साथ-साथ इस क्लास का इस्तेमाल करके, नीचे दिए गए कोड के साथ कॉलबैक यूआरएल की पुष्टि की जा सकती है.
RewardedAdsVerifier verifier = new RewardedAdsVerifier.Builder()
.fetchVerifyingPublicKeysWith(
RewardedAdsVerifier.KEYS_DOWNLOADER_INSTANCE_PROD)
.build();
String rewardUrl = ...;
verifier.verify(rewardUrl);
अगर verify()
का तरीका, अपवाद के बिना काम करता है, तो कॉलबैक के यूआरएल की पुष्टि हो गई है. उपयोगकर्ता को इनाम देना सेक्शन में, उपयोगकर्ताओं को इनाम मिलने के सबसे सही तरीके बताए गए हैं. इनाम वाले SSV कॉलबैक की पुष्टि करने के लिए, इस क्लास में किए गए चरणों का ब्रेकडाउन देखने के लिए, इनाम वाले SSV कॉलबैक के मैन्युअल मैन्युअल ऐक्शन सेक्शन को पढ़ें.
SSV कॉलबैक पैरामीटर
सर्वर-साइड पर की जाने वाली पुष्टि के कॉलबैक में, ऐसे क्वेरी पैरामीटर शामिल होते हैं जो इनाम वाले विज्ञापन के इंटरैक्शन की जानकारी देते हैं. पैरामीटर के नाम, ब्यौरे, और उदाहरण की वैल्यू नीचे दी गई हैं. पैरामीटर, वर्णमाला के क्रम में भेजे जाते हैं.
पैरामीटर का नाम | जानकारी | उदाहरण के तौर पर दी गई वैल्यू |
---|---|---|
ad_network | इस विज्ञापन को पूरा करने वाले विज्ञापन स्रोत के लिए, विज्ञापन स्रोत पहचानकर्ता. आईडी की वैल्यू से जुड़े विज्ञापन स्रोत के नाम, विज्ञापन स्रोत आइडेंटिफ़ायर सेक्शन में दिए गए हैं. | 1953547073528090325 |
ad_unit | AdMob विज्ञापन यूनिट का वह आईडी जिसका इस्तेमाल इनाम वाले विज्ञापन का अनुरोध करने के लिए किया गया था. | 2747237135 |
कस्टम डेटा | कस्टम डेटा स्ट्रिंग, जो
setCustomData
से मिली है.
अगर ऐप्लिकेशन से कोई कस्टम डेटा स्ट्रिंग नहीं मिलती है, तो यह क्वेरी पैरामीटर वैल्यू SSV कॉलबैक में उपलब्ध नहीं होगा. |
SAMPLE_CUSTOM_DATA_ दिखाता है |
कुंजी का आईडी | SSV कॉलबैक की पुष्टि करने के लिए इस्तेमाल की जाने वाली कुंजी. यह वैल्यू AdMob कुंजी के सर्वर से मिली सार्वजनिक कुंजी से मैप होती है. | 1234567890 |
इनाम_की रकम | विज्ञापन यूनिट सेटिंग में बताई गई इनाम की रकम. | 5 |
इनाम_आइटम | विज्ञापन यूनिट की सेटिंग में दिए गए इनाम आइटम. | सिक्के |
signature | AdMob से जनरेट किए गए एसएसवी कॉलबैक के लिए हस्ताक्षर. | MEUCIQCLJS_s4ia_sN06HqzeW7Wc3nhZi4RlW3qV0oO-6AIYdQIgGJEh-rzKreO-paNDbSCzWGMtmgJHYYW9k2_icM9LFMY |
timestamp | वह टाइमस्टैंप जब उपयोगकर्ता को Epoch के समय को मिलीसेकंड में इनाम दिया गया था. | 1507770365237823 |
transaction_id | AdMob से जनरेट किए गए हर इनाम देने के इवेंट के लिए, यूनीक हेक्स कोड आइडेंटिफ़ायर. | 18fa792de1bca816048293fc71035638 |
user_id | उपयोगकर्ता आइडेंटिफ़ायर, जो
setUserId ने दिया है.
अगर ऐप्लिकेशन ने कोई उपयोगकर्ता आइडेंटिफ़ायर नहीं दिया है, तो यह क्वेरी पैरामीटर एसएसवी कॉलबैक में मौजूद नहीं होगा. |
1234567 |
विज्ञापन स्रोत के आइडेंटिफ़ायर
विज्ञापन स्रोत के नाम और आईडी
विज्ञापन स्रोत का नाम | विज्ञापन स्रोत का आईडी |
---|---|
आरकी (बिडिंग) | 5240798063227064260 |
विज्ञापन जनरेशन (बिडिंग) | 1477265452970951479 |
AdColony | 15586990674969969776 |
AdColony (बिना SDK वाला) (बोली लगाना) | 4600416542059544716 |
AdColony (बोली-प्रक्रिया) | 6895345910719072481 |
AdFalcon | 3528208921554210682 |
AdMob नेटवर्क | 5450213213286189855 |
एडी-रिज़ल्ट | 10593873382626181482 |
एएमओडी | 17253994435944008978 |
ऐप्लोविन | 1063618907739174004 |
एपलोवीन (बिडिंग) | 1328079684332308356 |
चार्टबूस्ट | 2873236629771172317 |
Chocolate Platform (बोली-प्रक्रिया) | 6432849193975106527 |
क्रॉस चैनल (एमडॉटएम) | 9372067028804390441 |
कस्टम इवेंट | 18351550913290782395 |
डीटी एक्सचेंज 21 सितंबर, 2022 से पहले, इस नेटवर्क का नाम "फ़ाइबर" था. | 4839637394546996422 |
फ़्लैक्ट (बोली लगाना) | 8419777862490735710 |
आंधी | 3376427960656545613 |
i-mobile | 5208827440166355534 |
डिजिटल प्लैटफ़ॉर्म (बिडिंग) को बेहतर बनाएं | 159382223051638006 |
इंडेक्स एक्सचेंज (बिडिंग) | 4100650709078789802 |
InMobi | 7681903010231960328 |
InMobi (बिडिंग) | 6325663098072678541 |
आयरनसोर्स | 6925240245545091930 |
Leadbolt | 2899150749497968595 |
LG U+AD | 18298738678491729107 |
Maio | 7505118203095108657 |
maio (बिडिंग) | 1343336733822567166 |
Media.net (बिडिंग) | 2127936450554446159 |
मीडिएशन वाले हाउस विज्ञापन | 6060308706800320801 |
Meta Audience Network 6 जून, 2022 से पहले, इस नेटवर्क को "Facebook ऑडियंस नेटवर्क" कहा जाता था. | 10568273599589928883 |
Meta Audience Network (बिडिंग) 6 जून, 2022 से पहले, इस नेटवर्क को "Facebook ऑडियंस नेटवर्क (बिडिंग)" कहा जाता था. | 11198165126854996598 |
MobFox | 8079529624516381459 |
MoPub (अब इस्तेमाल में नहीं है) | 10872986198578383917 |
मेरा टारगेट | 8450873672465271579 |
Nend | 9383070032774777750 |
ONE by AOL (मिलेनियम मीडिया) | 6101072188699264581 |
ONE by AOL (Nexage) | 3224789793037044399 |
OpenX (बिडिंग) | 4918705482605678398 |
Pangle (बिडिंग) | 3525379893916449117 |
PubMatic (बिडिंग) | 3841544486172445473 |
आरक्षण अभियान | 7068401028668408324 |
RhythmOne (बिडिंग) | 2831998725945605450 |
रूबिकन (बिडिंग) | 3993193775968767067 |
SK ग्रह | 734341340207269415 |
शेयर-थ्रू (बिडिंग) | 5247944089976324188 |
Smaato (बोली लगाना) | 3362360112145450544 |
Equativ (बिडिंग)* * 12 जनवरी, 2023 से पहले, इस नेटवर्क का नाम "स्मार्ट Adserver" था. | 5970199210771591442 |
Sonobi (बिडिंग) | 3270984106996027150 |
Tapjoy | 7295217276740746030 |
टैपजॉय (बिडिंग) | 4692500501762622178 |
टेनेंट जीडीटी | 7007906637038700218 |
TripleLift (बिडिंग) | 8332676245392738510 |
Unity विज्ञापन | 4970775877303683148 |
UnrulyX (बिडिंग) | 2831998725945605450 |
Verizon Media | 7360851262951344112 |
वीपॉन | 1940957084538325905 |
Vungle | 1953547073528090325 |
Vungle (बोली-प्रक्रिया) | 4692500501762622185 |
Yieldmo (बोली लगाना) | 4193081836471107579 |
YieldOne (बिडिंग) | 3154533971590234104 |
ज़क्स | 5506531810221735863 |
उपयोगकर्ता को इनाम देना
यह ज़रूरी है कि उपयोगकर्ता को इनाम देने के समय का आकलन करते समय, उपयोगकर्ता के अनुभव और इनाम की पुष्टि की प्रक्रिया का संतुलन बनाया जाए. बाहरी साइड पर पहुंचने से पहले ही, सर्वर साइड कॉलबैक में देरी हो सकती है. इसलिए, सबसे अच्छा तरीका यह है कि क्लाइंट-साइड कॉलबैक का इस्तेमाल करके, उपयोगकर्ता को तुरंत इनाम दिया जाए. साथ ही, सर्वर साइड कॉलबैक मिलने पर सभी इनामों की पुष्टि करना भी एक अच्छा तरीका है. इससे, आपको उपयोगकर्ताओं को अच्छा अनुभव देने के साथ-साथ, इनाम की वैधता भी पक्का होती है.
हालांकि, जिन ऐप्लिकेशन के लिए इनाम की वैधता ज़रूरी है (उदाहरण के लिए, इनाम से आपके ऐप्लिकेशन की इन-गेम इकॉनमी पर असर पड़ता है) और इनाम मिलने में देरी स्वीकार की जा सकती है उनमें पुष्टि किए गए सर्वर साइड कॉलबैक का इंतज़ार करना सबसे बेहतर तरीका हो सकता है.
कस्टम डेटा
जिन ऐप्लिकेशन को सर्वर-साइड पर की जाने वाली पुष्टि के कॉलबैक में अतिरिक्त डेटा की ज़रूरत होती है उन्हें इनाम वाले विज्ञापनों की कस्टम डेटा सुविधा का इस्तेमाल करना चाहिए. इनाम वाले विज्ञापन के ऑब्जेक्ट पर सेट कोई भी स्ट्रिंग वैल्यू, SSV कॉलबैक के custom_data
क्वेरी पैरामीटर में पास की जाती है. अगर कोई कस्टम डेटा
वैल्यू सेट नहीं किया गया है, तो custom_data
क्वेरी पैरामीटर की वैल्यू, SSV कॉलबैक में नहीं दिखेगी.
कोड के इस नमूने में, इनाम वाले विज्ञापन के लोड होने के बाद, एसएसवी के विकल्पों को सेट करने का तरीका बताया गया है.
Java
RewardedAd.load(MainActivity.this, "ca-app-pub-3940256099942544/5354046379", new AdRequest.Builder().build(), new RewardedAdLoadCallback() { @Override public void onAdLoaded(RewardedAd ad) { Log.d(TAG, "Ad was loaded."); rewardedAd = ad; ServerSideVerificationOptions options = new ServerSideVerificationOptions .Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build(); rewardedAd.setServerSideVerificationOptions(options); } @Override public void onAdFailedToLoad(LoadAdError loadAdError) { Log.d(TAG, loadAdError.toString()); rewardedAd = null; } });
Kotlin
RewardedAd.load(this, "ca-app-pub-3940256099942544/5354046379", AdRequest.Builder().build(), object : RewardedAdLoadCallback() { override fun onAdLoaded(ad: RewardedAd) { Log.d(TAG, "Ad was loaded.") rewardedInterstitialAd = ad val options = ServerSideVerificationOptions.Builder() .setCustomData("SAMPLE_CUSTOM_DATA_STRING") .build() rewardedAd.setServerSideVerificationOptions(options) } override fun onAdFailedToLoad(adError: LoadAdError) { Log.d(TAG, adError?.toString()) rewardedAd = null } })
अगर आप कस्टम इनाम स्ट्रिंग सेट करना चाहते हैं, तो आपको विज्ञापन दिखाने से पहले ऐसा करना होगा.
इनाम वाले SSV की मैन्युअल पुष्टि
इनाम वाले एसएसवी की पुष्टि करने के लिए, RewardedAdsVerifier
क्लास यह तरीका अपनाती है. हालांकि, शामिल किए गए कोड स्निपेट Java में होते हैं और
Tink तीसरे पक्ष की लाइब्रेरी का इस्तेमाल करते हैं. आप इन तरीकों को
ECDSA के साथ काम करने वाली तीसरे पक्ष की किसी भी लाइब्रेरी का इस्तेमाल करके, अपनी पसंद की भाषा में लागू कर सकते हैं.
सार्वजनिक कुंजियां पाएं
इनाम वाले एसएसवी कॉलबैक की पुष्टि करने के लिए, आपको 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;
}
पुष्टि के लिए कॉन्टेंट पाना
इनाम वाले SSV कॉलबैक के आखिरी दो क्वेरी पैरामीटर, हमेशा signature
और key_id,
इसी क्रम में होते हैं. बाकी क्वेरी पैरामीटर की मदद से, उस कॉन्टेंट की जानकारी दी जाती है जिसकी पुष्टि की जानी है. मान लें कि आपने AdMob को https://www.myserver.com/mypath
पर इनाम के कॉलबैक भेजने के लिए कॉन्फ़िगर किया है. नीचे दिए गए स्निपेट में, इनाम वाले एसएसवी कॉलबैक का एक उदाहरण दिया गया है.
इस कॉन्टेंट को हाइलाइट करना है.
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
नीचे दिया गया कोड बताता है कि कॉलबैक के यूआरएल से 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"));
कॉलबैक यूआरएल से हस्ताक्षर और कुंजी_आईडी पाएं
पिछले चरण की queryString
वैल्यू का इस्तेमाल करके, नीचे दिए गए कॉलबैक यूआरएल से 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()));
पुष्टि करना
आखिरी चरण में, कॉलबैक यूआरएल के कॉन्टेंट की पुष्टि सार्वजनिक कुंजी से करें. parsePublicKeysJson
तरीके से रिटर्न किया गया मैप लें और उस मैपिंग से सार्वजनिक कुंजी पाने के लिए कॉलबैक यूआरएल से 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 कुंजी के सर्वर की सार्वजनिक कुंजी को कैश मेमोरी में सेव करें. हालांकि, ध्यान रखें कि सार्वजनिक कुंजियों को लगातार घुमाया जाता है और उन्हें 24 घंटे से ज़्यादा समय के लिए कैश मेमोरी में नहीं रखा जाना चाहिए.
- AdMob के मुख्य सर्वर से उपलब्ध कराई गई सार्वजनिक कुंजियों को कितनी बार घुमाया गया?
- AdMob कुंजी सर्वर की ओर से दी जाने वाली सार्वजनिक कुंजियों को वैरिएबल शेड्यूल में बदला जाता है. यह पक्का करने के लिए कि एसएसवी कॉलबैक की पुष्टि, उम्मीद के मुताबिक काम करती रहे, सार्वजनिक कुंजियों को 24 घंटे से ज़्यादा समय के लिए कैश मेमोरी में नहीं रखा जाना चाहिए.
- अगर मेरे सर्वर तक पहुंचा न जा सके, तो क्या होता है?
- Google, SSV कॉलबैक के लिए
HTTP 200 OK
के सक्सेस स्टेटस रिस्पॉन्स कोड की उम्मीद करता है. अगर आपके सर्वर तक पहुंचा नहीं जा सकता या वह रिस्पॉन्स नहीं देता है, तो Google एक सेकंड के अंतराल में, SSV कॉलबैक को पांच बार भेजने की फिर से कोशिश करेगा. - मैं कैसे पुष्टि करूं कि SSV कॉलबैक Google से आ रहे हैं?
- रिवर्स डीएनएस लुकअप का इस्तेमाल करके पुष्टि करें कि SSV कॉलबैक, Google से ही मिले हैं.