1 अवलोकन
आपके iOS ऐप कोडलैब में Firebase ऐप वितरण SDK को एकीकृत करने में आपका स्वागत है। इस कोडलैब में, आप अपने ऐप में ऐप वितरण SDK जोड़ेंगे ताकि आपके परीक्षकों को इन-ऐप अलर्ट प्रदर्शित किया जा सके जब नए बिल्ड डाउनलोड करने के लिए उपलब्ध हों। आप अपने परीक्षकों को अपडेट प्राप्त करने के लिए साइन इन करने के लिए बुनियादी कॉन्फ़िगरेशन और कस्टम कॉन्फ़िगरेशन दोनों का उपयोग करने का तरीका जानेंगे. फिर आप ऐप डिस्ट्रीब्यूशन के लिए एक नई रिलीज़ पुश करेंगे और ऐप में ही एक नया बिल्ड अलर्ट ट्रिगर करेंगे।
आप क्या सीखेंगे
- लाइव परीक्षकों को रिलीज़-पूर्व ऐप वितरित करने के लिए ऐप वितरण का उपयोग कैसे करें
- ऐप वितरण आईओएस एसडीके को अपने ऐप में कैसे एकीकृत करें
- जब कोई नया प्री-रिलीज़ बिल्ड इंस्टॉल करने के लिए तैयार हो तो टेस्टर को कैसे अलर्ट करें
- SDK को अपनी विशिष्ट परीक्षण आवश्यकताओं के अनुरूप कैसे अनुकूलित करें
आपको किस चीज़ की ज़रूरत पड़ेगी
- एक्सकोड 12 (या उच्चतर)
- कोकोआपोड्स 1.9.1 (या उच्चतर)
- तदर्थ वितरण के लिए एक Apple डेवलपर खाता
- परीक्षण के लिए एक भौतिक आईओएस डिवाइस। ( आईओएस सिम्युलेटर ऐप अधिकांश कोडलैब के लिए काम करेगा, लेकिन सिमुलेटर रिलीज डाउनलोड नहीं कर सकते।)
आप इस ट्यूटोरियल का उपयोग कैसे करेंगे?
iOS ऐप बनाने के आपके अनुभव का मूल्यांकन कैसे करेंगे?
2. फायरबेस कंसोल प्रोजेक्ट बनाएं
नया फायरबेस प्रोजेक्ट जोड़ें
- फायरबेस में साइन इन करें।
- Firebase कंसोल में, प्रोजेक्ट जोड़ें पर क्लिक करें और फिर अपने प्रोजेक्ट का नाम "Firebase Codelab" रखें।
आपको इस प्रोजेक्ट के लिए Google Analytics को सक्षम करने की आवश्यकता नहीं है।
- प्रोजेक्ट बनाएं पर क्लिक करें।
ऐप को फायरबेस में जोड़ें
अपने ऐप को फायरबेस के साथ पंजीकृत करने के लिए दस्तावेज़ीकरण का पालन करें। आईओएस बंडल आईडी के रूप में "com.google.firebase.codelab.AppDistribution.<your_name>" का उपयोग करें।
संकेत मिलने पर, अपने प्रोजेक्ट की GoogleService-Info.plist
फ़ाइल डाउनलोड करें। आपको इसकी आवश्यकता बाद में पड़ेगी।
3. नमूना परियोजना प्राप्त करें
कोड डाउनलोड करें
नमूना परियोजना की क्लोनिंग से शुरुआत करें।
git clone git@github.com:googlecodelabs/firebase-appdistribution-ios.git
अगर आपके पास गिट इंस्टॉल नहीं है, तो आप इसके गिटहब पेज से या इस लिंक पर क्लिक करके नमूना प्रोजेक्ट डाउनलोड कर सकते हैं।
निर्भरताएँ डाउनलोड करें और Xcode में प्रोजेक्ट खोलें
- पॉडफाइल को उसी डायरेक्टरी में खोलें
cd firebase-appdistribution-ios/start Open Podfile
- अपने पॉडफाइल में निम्न पंक्ति जोड़ें:
पोडफाइल
pod 'Firebase/AppDistribution'
प्रोजेक्ट डायरेक्टरी में pod update
चलाएँ और प्रोजेक्ट को Xcode में खोलें।
pod install --repo-update xed .
अपने Firebase ऐप्लिकेशन से मेल खाने के लिए बंडल आइडेंटिफ़ायर अपडेट करें
बाएं मेनू में, AppDistributionExample पर डबल क्लिक करें। फिर, सामान्य टैब का पता लगाएं, और बंडल आइडेंटिफ़ायर को अपने फायरबेस ऐप के बंडल आइडेंटिफ़ायर से मिलान करने के लिए बदलें, जो प्रोजेक्ट सेटिंग्स में पाया जा सकता है। यह "com.google.firebase.codelab.AppDistribution.<your_name>" होना चाहिए
अपने ऐप में फायरबेस जोड़ें
आपके द्वारा अपने फ़ाइल सिस्टम में पहले डाउनलोड की गई GoogleService-Info.plist
फ़ाइल का पता लगाएँ, और उसे Xcode प्रोजेक्ट के रूट तक खींचें। आप इस फ़ाइल को अपने प्रोजेक्ट के सेटिंग पेज से कभी भी डाउनलोड कर सकते हैं।
अपने AppDistributionExample/AppDelegate.swift
फ़ाइल में फ़ाइल के शीर्ष पर Firebase आयात करें
AppDistributionExample/AppDelegate.swift
import Firebase
और didFinishLaunchingWithOptions
विधि में फायरबेस को कॉन्फ़िगर करने के लिए एक कॉल जोड़ें।
AppDistributionExample/AppDelegate.swift
FirebaseApp.configure()
4. ऐप वितरण एसडीके के साथ इन-ऐप नया बिल्ड अलर्ट सेट करें
इस चरण में, आप अपने ऐप में Firebase ऐप वितरण SDK जोड़ेंगे और अपने ऐप के नए बिल्ड इंस्टॉल करने के लिए उपलब्ध होने पर अपने परीक्षकों को इन-ऐप अलर्ट प्रदर्शित करेंगे। ऐसा करने के लिए, सुनिश्चित करें कि आपने अपने "Firebase Codelab" प्रोजेक्ट (Google क्लाउड कंसोल में) के लिए Firebase ऐप परीक्षक API को सक्षम कर लिया है। आपको उसी खाते से लॉग इन करना होगा और शीर्ष पर स्थित ड्रॉप डाउन मेनू से सही प्रोजेक्ट का चयन करना होगा।
इन-ऐप अलर्ट कॉन्फ़िगर करें
ऐप वितरण SDK आपके परीक्षकों के लिए इन-ऐप बिल्ड अलर्ट सेट करने के दो तरीके प्रदान करता है: एक बुनियादी अलर्ट कॉन्फ़िगरेशन, जो परीक्षकों को प्रदर्शित करने के लिए एक पूर्व-निर्मित साइन-इन डायलॉग के साथ आता है, और एक उन्नत अलर्ट कॉन्फ़िगरेशन, जो आपको इसकी अनुमति देता है अपने खुद के यूजर इंटरफेस (यूआई) को अनुकूलित करें।
हम बुनियादी अलर्ट कॉन्फ़िगरेशन के साथ शुरुआत करेंगे। आप उन परीक्षकों के लिए पूर्व-निर्मित सक्षम अलर्ट संवाद प्रदर्शित करने के लिए checkForUpdate
उपयोग कर सकते हैं, जिन्होंने अभी तक अलर्ट सक्षम नहीं किए हैं, और फिर जांचें कि कोई नया बिल्ड उपलब्ध है या नहीं। परीक्षक उस खाते में साइन इन करके अलर्ट सक्षम करते हैं जिसकी ऐप वितरण में ऐप तक पहुंच है। जब कॉल किया जाता है, तो विधि निम्नलिखित अनुक्रम को लागू करती है:
- जाँचता है कि क्या किसी परीक्षक ने अलर्ट सक्षम किया है। यदि नहीं, तो एक पूर्व-निर्मित संवाद प्रदर्शित करता है जो उन्हें अपने Google खाते से ऐप वितरण में साइन इन करने के लिए प्रेरित करता है।
अलर्ट सक्षम करना टेस्ट डिवाइस पर एक बार की जाने वाली प्रक्रिया है और आपके ऐप के सभी अपडेट में बनी रहती है। टेस्ट डिवाइस पर अलर्ट तब तक सक्षम रहता है जब तक या तो ऐप को अनइंस्टॉल नहीं किया जाता है, या जब तक signOutTester
विधि को कॉल नहीं किया जाता है। अधिक जानकारी के लिए विधि का संदर्भ दस्तावेज़ ( स्विफ़्ट या ऑब्जेक्टिव-सी ) देखें।
आप अपने ऐप में किसी भी समय checkForUpdate
शामिल कर सकते हैं। उदाहरण के लिए, आप अपने परीक्षकों को UIViewController के viewDidAppear में checkForUpdate को शामिल करके स्टार्टअप पर नए उपलब्ध बिल्ड को स्थापित करने के लिए संकेत दे सकते हैं।
अपने AppDistributionViewController.swift
फ़ाइल में फ़ाइल के शीर्ष पर Firebase आयात करें
AppDistributionViewController.swift
import Firebase
AppDistributionExample/AppDistributionViewController.swift खोलें, और इस तरह viewDidAppear
मेथड में लाइन कॉपी करें:
AppDistributionViewController.swift
override func viewDidAppear(_ animated: Bool) {
checkForUpdate()
}
अब checkForUpdate() मेथड को लागू करते हैं।
AppDistributionViewController.swift
private func checkForUpdate() {
AppDistribution.appDistribution().checkForUpdate(completion: { [self] release, error in
var uiAlert: UIAlertController
if error != nil {
uiAlert = UIAlertController(title: "Error", message: "Error Checking for update! \(error?.localizedDescription ?? "")", preferredStyle: .alert)
} else if release == nil {
uiAlert = UIAlertController(title: "Check for Update", message: "No releases found!!", preferredStyle: .alert)
uiAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default))
} else {
guard let release = release else { return }
let title = "New Version Available"
let message = "Version \(release.displayVersion)(\(release.buildVersion)) is available."
uiAlert = UIAlertController(title: title, message: message, preferredStyle: .alert)
uiAlert.addAction(UIAlertAction(title: "Update", style: UIAlertAction.Style.default) {
_ in
UIApplication.shared.open(release.downloadURL)
})
uiAlert.addAction(UIAlertAction(title: "Cancel", style: UIAlertAction.Style.cancel) {
_ in
})
}
self.present(uiAlert, animated: true, completion: nil)
})
}
5. अपना ऐप डाउनलोड करने के लिए परीक्षकों को बनाएं और आमंत्रित करें
इस चरण में, आप अपने ऐप का निर्माण करेंगे और फायरबेस कंसोल का उपयोग करके परीक्षकों को बिल्ड वितरित करके अपने कार्यान्वयन का परीक्षण करेंगे।
अपना ऐप बनाएं
जब आप परीक्षकों को अपने ऐप का रिलीज़-पूर्व संस्करण वितरित करने के लिए तैयार हों, तो बिल्ड गंतव्य और उत्पाद-> संग्रह के रूप में "कोई भी iOS डिवाइस (arm64)" चुनें। संग्रह बन जाने के बाद, विकास वितरण प्रोफ़ाइल के साथ एक हस्ताक्षरित वितरण बनाएँ।
जब बिल्ड पूर्ण हो जाता है, तो यह आपके द्वारा निर्दिष्ट फ़ोल्डर में एक IPA फ़ाइल और कुछ लॉग फ़ाइलें सहेजता है। आप निम्न चरणों में अपने परीक्षकों को IPA फ़ाइल वितरित करते हैं।
यदि आप अपने ऐप के निर्माण में समस्याओं का सामना करते हैं, तो समस्या निवारण चरणों के लिए Apple के कोडिंग डॉक्स देखें।
परीक्षकों को अपना ऐप वितरित करें
परीक्षकों को अपना ऐप वितरित करने के लिए, Firebase कंसोल का उपयोग करके IPA फ़ाइल अपलोड करें:
- फायरबेस कंसोल का ऐप डिस्ट्रीब्यूशन पेज खोलें। संकेत मिलने पर अपना फायरबेस प्रोजेक्ट चुनें।
- प्रारंभ करें दबाएं
- रिलीज़ पृष्ठ पर, वह ऐप चुनें जिसे आप ड्रॉप-डाउन मेनू से वितरित करना चाहते हैं।
- इसे अपलोड करने के लिए अपने ऐप की IPA फ़ाइल को कंसोल पर खींचें।
- जब अपलोड पूरा हो जाए, तो उन परीक्षक समूहों और अलग-अलग परीक्षकों को निर्दिष्ट करें जिन्हें आप बिल्ड प्राप्त करना चाहते हैं। (आमंत्रण प्राप्त करने के लिए अपना ईमेल जोड़ें।) फिर, बिल्ड के लिए रिलीज़ नोट जोड़ें। परीक्षक समूह बनाने के बारे में अधिक जानकारी के लिए परीक्षक प्रबंधित करें देखें.
- परीक्षकों को बिल्ड उपलब्ध कराने के लिए वितरित करें पर क्लिक करें।
रिलीज़ में स्वयं को एक परीक्षक के रूप में जोड़ें
फायरबेस कंसोल में, अब आप अपने ऐप की रिलीज़ के तहत जोड़े गए परीक्षकों को देख सकते हैं।
चूंकि आपने अपना ईमेल पता शामिल किया है, इसलिए आपको ऐप का परीक्षण करने के लिए आमंत्रित करने के लिए फायरबेस ऐप डिस्ट्रीब्यूशन से एक ईमेल प्राप्त होगा। अब आप पहले परीक्षक हैं! अपने परीक्षण उपकरण पर परीक्षक के रूप में सेट अप करने के लिए नीचे दिए गए अनुभाग को जारी रखें।
अपना परीक्षण उपकरण पंजीकृत करें
एड हॉक रिलीज़ को डाउनलोड और टेस्ट करने के लिए आपको पहले अपने टेस्ट डिवाइस को रजिस्टर करना होगा।
- अपने iOS टेस्ट डिवाइस पर, Firebase ऐप डिस्ट्रीब्यूशन से भेजे गए ईमेल को खोलें और गेट स्टार्टेड लिंक पर टैप करें। सफारी में लिंक खोलना सुनिश्चित करें।
- दिखाई देने वाले Firebase ऐप डिस्ट्रीब्यूशन टेस्टर वेब ऐप में, अपने Google खाते से साइन इन करें और आमंत्रण स्वीकार करें पर टैप करें।
अब, आप वह रिलीज़ देखेंगे जिसके लिए आपको आमंत्रित किया गया है।
- अपने UDID को Firebase के साथ साझा करने के लिए रजिस्टर डिवाइस पर टैप करें ताकि आप बाद में अपने ऐप की प्रावधान प्रोफ़ाइल को अपडेट कर सकें।
- निर्देशों का पालन करें, और प्रोफाइल डाउनलोड करने और अपना यूडीआईडी साझा करने के लिए सेटिंग्स पर जाएं।
अब, जब आप ऐप्लिकेशन वितरण में वापस जाते हैं, तो रिलीज़ को अब "डिवाइस पंजीकृत" के रूप में चिह्नित किया जाता है:
परीक्षक का UDID अब डेवलपर के साथ साझा किया गया है। परीक्षक को ऐप का एक नया संस्करण बनाने के लिए अब यह डेवलपर पर निर्भर है।
कंसोल में परीक्षक जानकारी देखें
फायरबेस कंसोल में डेवलपर के दृश्य में वापस, परीक्षक रिलीज के तहत "स्वीकृत" के रूप में दिखाई देगा:
फिर आपको डेवलपर के रूप में एक ईमेल भी प्राप्त होगा यदि वे जिस उपकरण का उपयोग कर रहे हैं वह प्रावधान प्रोफ़ाइल में पहले से शामिल नहीं है। यह आपको उस नए UDID के बारे में सूचित करेगा जिसे आपको जोड़ने की आवश्यकता है। आपके पास सभी UDID को टेक्स्ट फ़ाइल के रूप में निर्यात करने का विकल्प भी है।
- सभी UDID निर्यात करने के लिए, परीक्षक और समूह टैब खोलें।
- "Apple UDID निर्यात करें" पर क्लिक करें।
फ़ाइल में आपके परीक्षण उपकरण का UDID होना चाहिए।
Device ID Device Name Device Platform
1234567890 tester.app.distribtuion@gmail.com - iPhone SE 2nd Gen ios
जब आप इनमें से एक ईमेल प्राप्त करते हैं, तो अपने प्रोविजनिंग प्रोफाइल को UDID के साथ अपडेट करें और इन चरणों का पालन करके अपने परीक्षकों को एक नया बिल्ड वितरित करें:
- अपने Apple डेवलपर पोर्टल में डिवाइस जोड़ें।
- विकल्प 1: डिवाइस UDIDs को CSV फ़ाइल के रूप में आयात करें। ऐप वितरण डैशबोर्ड के परीक्षक और समूह टैब में, सभी परीक्षकों का चयन करें, फिर CSV फ़ाइल डाउनलोड करने के लिए Apple UDID निर्यात करें पर क्लिक करें। इसके बाद, रजिस्टर मल्टीपल डिवाइस विकल्प का उपयोग करके फ़ाइल को अपने Apple डेवलपर खाते में आयात करें। अधिक जानने के लिए Apple के दस्तावेज़ देखें। ध्यान दें कि आपका Apple डेवलपर खाता आपको प्रति वर्ष सीमित संख्या में डिवाइस आयात करने की अनुमति दे सकता है।
- विकल्प 2: यूडीआईडी इकट्ठा करें और ईमेल द्वारा दर्ज करें। Apple डेवलपर पोर्टल के डिवाइस जोड़ें पृष्ठ पर, आपको प्राप्त ईमेल में निर्दिष्ट नए UDID को पंजीकृत करें।
- पंजीकृत उपकरणों को अपने प्रोविजनिंग प्रोफाइल में जोड़ें।
- प्रोविजनिंग प्रोफाइल डाउनलोड करें और अपने ऐप को फिर से बनाने के लिए इसका इस्तेमाल करें। यदि आप केवल पंजीकृत उपकरणों को अपडेट करने के लिए पुनर्निर्माण कर रहे हैं, तो बिल्ड नंबर या संस्करण को अपडेट न करें।
- अपने ऐप को फायरबेस कंसोल या सीएलआई से फिर से वितरित करें । यदि आपने समान बिल्ड नंबर और संस्करण के साथ बिल्ड पहले ही वितरित कर दिया है, तो केवल नए-पंजीकृत डिवाइस के उपयोगकर्ता ही सूचना ईमेल प्राप्त करते हैं।
परीक्षण डिवाइस से रिलीज़ को डाउनलोड करें
अब रिलीज़ में टेस्ट डिवाइस का UDID है, इसलिए टेस्ट डिवाइस ऐप को डाउनलोड और इंस्टॉल कर सकता है। ऐप डिस्ट्रीब्यूशन परीक्षकों को एक ईमेल भेजता है जब उनके यूडीआईडी को एक नई रिलीज में जोड़ा जाता है।
- परीक्षण डिवाइस पर, ईमेल में दिए गए लिंक, या डिवाइस की होम स्क्रीन पर आइकन का उपयोग करके ऐप वितरण परीक्षक वेब ऐप पर वापस लौटें।
जब आप UDID कोडलैब ऐप पर नेविगेट करते हैं, तो आप देख सकते हैं कि रिलीज़ डाउनलोड के लिए तैयार है।
- यदि आप भौतिक डिवाइस पर हैं, तो डाउनलोड दबाएं, फिर ऐप इंस्टॉल करें और चलाएं!
- जब ऐप शुरू होता है, तो यह आपसे नए बिल्ड अलर्ट को सक्षम करने के लिए कहेगा। "चालू करें" चुनें
- फिर यह आपसे साइन इन करने के लिए कहेगा। "जारी रखें" पर क्लिक करें।
- अपने परीक्षक खाते से साइन-इन करें।
- आपको ऐप पर वापस ले जाया जाएगा। अगली बार जब आप ऐप चलाएंगे तो आपको लॉगिन या अलर्ट स्वीकार नहीं करना पड़ेगा।
अपने परीक्षकों को अपडेट वितरित करें
- अपने बिल्ड नंबर को "2" में अपडेट करें।
- बिल्ड डेस्टिनेशन और प्रोडक्ट-> आर्काइव के रूप में "कोई भी आईओएस डिवाइस (आर्म 64)" चुनें। एक बार संग्रह उत्पन्न हो जाने के बाद, विकास वितरण प्रोफ़ाइल के साथ एक हस्ताक्षरित वितरण बनाएँ।
- जब बिल्ड पूर्ण हो जाता है, तो यह आपके द्वारा निर्दिष्ट फ़ोल्डर में एक IPA फ़ाइल और कुछ लॉग फ़ाइलें सहेजता है। इस नए IPA को अपने Firebase कंसोल में अपलोड करें, अपने ईमेल को फिर से परीक्षक के रूप में जोड़ें और वितरित करें।
टेस्ट बिल्ड अलर्ट
- यदि यह खुला था तो सुनिश्चित करें कि आपने ऐप को बंद कर दिया है। ऐप को रीस्टार्ट करें।
- जब ऐप पुनरारंभ होता है, तो आपको "नया संस्करण उपलब्ध" अलर्ट प्राप्त करना चाहिए।
- नवीनतम संस्करण प्राप्त करने के लिए "अपडेट" पर क्लिक करें।
- अगली स्क्रीन पर "इंस्टॉल करें" पर क्लिक करें।
- बधाई हो! आप अपने ऐप को बिल्ड-इन अलर्ट के साथ अपडेट करने में सक्षम थे।
6. परीक्षक के साइन-इन को अनुकूलित करें
साइनइनटेस्टर/साइनआउटटेस्टर और isTesterSignedIn विधियां आपको अपने परीक्षक के साइन-इन अनुभव को अनुकूलित करने में अधिक लचीलापन देती हैं, इसलिए यह आपके ऐप के रंगरूप से बेहतर मेल खा सकती है।
निम्न उदाहरण यह जाँचता है कि क्या परीक्षक ने पहले ही उनके Firebase ऐप वितरण परीक्षक खाते में साइन इन कर लिया है, इसलिए आप अपना साइन-इन UI केवल उन परीक्षकों के लिए प्रदर्शित करना चुन सकते हैं जिन्होंने अभी तक साइन इन नहीं किया है। परीक्षक द्वारा साइन इन करने के बाद, आप तब कर सकते हैं यह जांचने के लिए checkForUpdate को कॉल करें कि परीक्षक के पास नए बिल्ड तक पहुंच है या नहीं।
checkForUpdate() कॉल को कमेंट करके viewDidAppea r में स्वचालित रूप से अपडेट की जाँच अक्षम करें।
AppDistributionViewController.swift
override func viewDidAppear(_ animated: Bool) {
// checkForUpdate()
}
इसके बजाय, checkForUpdateButtonClicked( ) में checkForUpdate() को कॉल करें।
@objc func checkForUpdateButtonClicked() {
checkForUpdate()
}
अब, हमारे साइनइनऑउटबटनक्लिक्ड () विधि को लागू करते हैं जो उपयोगकर्ता को साइन इन करेगा यदि वे साइन आउट हैं, या उपयोगकर्ता को साइन आउट करें यदि वे पहले से साइन इन हैं।
AppDistributionViewController.swift
@objc func signInOutButtonClicked() {
if isTesterSignedIn() {
AppDistribution.appDistribution().signOutTester()
self.configureCheckForUpdateButton()
self.configureSignInSignOutButton()
self.configureSignInStatus()
} else {
AppDistribution.appDistribution().signInTester(completion: { error in
if error == nil {
self.configureCheckForUpdateButton()
self.configureSignInSignOutButton()
self.configureSignInStatus()
} else {
let uiAlert = UIAlertController(title: "Custom:Error", message: "Error during tester sign in! \(error?.localizedDescription ?? "")", preferredStyle: .alert)
uiAlert.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default) {
_ in
})
self.present(uiAlert, animated: true, completion: nil)
}
})
}
}
अंत में आइए isTesterSignedI n विधि लागू करें।
AppDistributionViewController.swift
private func isTesterSignedIn() -> Bool {
return AppDistribution.appDistribution().isTesterSignedIn
}
अपने कार्यान्वयन का निर्माण और परीक्षण करें
7. बधाई हो!
आपने फायरबेस ऐप डिस्ट्रीब्यूशन आईओएस एसडीके का उपयोग करके ऐप में "इन-ऐप अलर्ट डिस्प्ले" फीचर बनाया है।
हमने क्या कवर किया है
- फायरबेस ऐप वितरण
- फायरबेस ऐप डिस्ट्रीब्यूशन नए अलर्ट आईओएस एसडीके
अगले कदम
और अधिक जानें
एक सवाल है?
मुद्दों की रिपोर्ट करें