Google Play सेवाओं दो नए एपीआई की मदद से आप एक उपयोगकर्ता के फोन नंबर प्राप्त करने और बिना उपकरण अनुमतियों एसएमएस के माध्यम से इसे सत्यापित किया है।
फोन चयनकर्ता का उपयोग संख्या
पहला कदम उपयोगकर्ता है प्राप्त करने के लिए अपने ऐप्लिकेशन के भीतर से SMS सत्यापन आरंभ करें। आपके ऐप के लिए फोन नंबर दर्ज करने के लिए संकेत हो सकता है, और आप इस आसान बनाने के लिए फोन का भी उपयोग करेंगे, इस तरह कोड का उपयोग:
// Construct a request for phone numbers and show the picker
private void requestHint() {
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();
PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
apiClient, hintRequest);
startIntentSenderForResult(intent.getIntentSender(),
RESOLVE_HINT, null, 0, 0, 0);
}
HintRequest बिल्डर बताता Play सेवाओं है कि एक फोन नंबर पहचानकर्ता जरूरत है। इसका उपयोग तब एक इरादा बनाने और शुरू करने के लिए किया जाता है, जो उपयोगकर्ता को Play सेवा संवाद दिखाएगा, जिससे उन्हें ऐप के साथ साझा करने के लिए अपने फोन नंबर का चयन करने की अनुमति मिलती है। यह API को किसी भी अनुमति की आवश्यकता नहीं है, और उपयोगकर्ता को चुनने के लिए फ़ोन या Google खाते पर उपलब्ध संख्या प्रदर्शित करता है।
जब उपयोगकर्ता कोई फ़ोन नंबर चुनता है तो उसे पर चलाने वाली डिवाइसों पर E164 प्रारूप में एक्टिविटी रिसेट में वापस चलाया जाएगा। ध्यान दें कि कुछ मामलों में, आपके फोन पर निर्भर करता है, तो आपको फ़ोन नंबर नहीं मिल सकता है, इसलिए यह सुनिश्चित करना सुनिश्चित करें कि प्रमाण-पत्र गैर-शून्य है या नहीं। यदि आपके पास कोई संख्या नहीं है, तो आपको को अपने उपयोगकर्ता को मैन्युअल रूप से टाइप करने का एक तरीका प्रदान करना होगा।
// Obtain the phone number from the result
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESOLVE_HINT) {
if (resultCode == RESULT_OK) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
// credential.getId(); <-- E.164 format phone number on 10.2.+ devices
}
}
}
इस बिंदु पर आप अपने उपयोगकर्ता के लिए एक फोन नंबर स्ट्रिंग होगा। जबकि यह उपयोगी है, आप शायद यह सत्यापित करना चाहते हैं कि उपयोगकर्ता इस विशिष्ट संख्या का मालिक है, उदाहरण के लिए उन्हें अन्य उपयोगकर्ताओं के साथ संदेश भेजने या पुनर्प्राप्त करने या इस नंबर के साथ स्वयं को पहचानने की अनुमति देने के लिए।
संख्या
फोन नंबर स्वामित्व को सत्यापित करने के लिए एक आसान तरीका सत्यापित करने के लिए SMS सत्यापन API का उपयोग करके नंबर, के लिए एक एसएमएस भेजने के लिए एक बार सत्यापन कोड के साथ, और उन्हें होने से है में प्रवेश कि अपने ऐप में एसएमएस सत्यापन API आपको ऐप के आने वाले एसएमएस को सुनने की क्षमता देता है, जिससे स्वचालित रूप से कोड को पार्स कर सकता है।
आरंभ करने के लिए, अपने अनुप्रयोग इस तरह कोड के साथ SmsRetrieverClient देगा:
SmsRetrieverClient client = SmsRetriever.getClient(this /* context */);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// successfully started an SMS Retriever for one SMS message
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
});
);
यह बहुत सरल है - आप एक एसएमएस कुत्ता ग्राहक पाने के लिए और फिर इसके लिए एक काम शुरू करते हैं। कार्य में सफल श्रोता के साथ-साथ पर एक ओवरराइड करने में विफलता है। एसएमएस रेट्रिवर शुरू करने के बाद, आप उपयोगकर्ता के फोन नंबर को अपने सर्वर पर भेज देंगे और के लिए यह वर्कफ़्लो प्रारंभ करेंगे और उसे उस नंबर पर भेज देगा।
संदेश एक विशिष्ट तरीके से निर्माण किया जाना चाहिए। संदेश को एक एसएमएस संदेश में फिट होना चाहिए, इसलिए यह 140 बाइट से अधिक नहीं हो सकता है। लगातार दो शून्य चौड़ाई स्थान वर्ण (U + 200B) '< #>' या: यह कोई विशिष्ट प्रारंभिक से प्रारंभ करना होगा। के लिए documentation देखें और अधिक जानकारी। इसे 11-वर्ण हैश के साथ समाप्त होना चाहिए कि नीचे वर्णित आपके ऐप की पहचान करता है।
उदाहरण:
< #> उदाहरण App में अपना सत्यापन कोड के रूप में 123456 का प्रयोग करें!
एफए + 9qCX9VSu
एक बार सत्यापन कोड कोई भी स्ट्रिंग हो सकते हैं: आप बस एक यादृच्छिक संख्या उत्पन्न कर सकते हैं। संदेश को हैश के साथ समाप्त करने की आवश्यकता है जो प्रक्रियाओं के अनुसार निर्धारित है। Google Play सेवाएं इस हैश का उपयोग यह निर्धारित करने के लिए करें कि सत्यापन संदेश किस ऐप के लिए है। आप केवल अपने ऐप का पैकेज और पर हस्ताक्षर प्रमाण पत्र के लिए एक बार इस हैश उत्पन्न करने के लिए की जरूरत है: यह नहीं बदलेगा और ग्राहक एप्लिकेशन द्वारा नहीं आपूर्ति की जानी चाहिए।
आपका सर्वर फिर अपने मौजूदा एसएमएस बुनियादी ढांचे या सेवा का उपयोग कर फोन करने के लिए संदेश भेज सकते हैं। जब यह संदेश प्राप्त होता है, तो Google Play सेवाएं किसी इरादे को प्रसारित करती हैं जिसमें संदेश का टेक्स्ट होता है। कोड यह रहा:
public class MySMSBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
switch(status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
break;
case CommonStatusCodes.TIMEOUT:
break;
}
}
}
}
प्रसारण रिसीवर आप एक्स्ट्रा कलाकार पाने के onReceive में, और वहाँ से स्थिति खींच। यदि स्थिति इंगित करती है कि संदेश सफलतापूर्वक प्राप्त हुआ था, तो आप अतिरिक्त संदेश से संदेश खींच सकते हैं। यहां से आप सत्यापन कोड को पार्स कर सकते हैं और फ़ोन नंबर स्वामित्व की पुष्टि करने के लिए इसे अपने सर्वर पर पर भेज सकते हैं।
क्या आप मतलब है कि यह "सुरक्षित नहीं" है? – Tushar
मुझे नहीं पता कि व्हाट्सएप कैसे करता है, और शायद यहां दूसरों को भी पता नहीं है। शायद आप हमें सुराग दे सकते हैं? –
दरअसल, मेरे अनुभव में व्हाट्सएप * खाता निर्माण पर एक एसएमएस सत्यापन भेजता है। – kabuko