2012-09-01 14 views
7

मैं अपने ऐप पर चल रहे डिवाइस का पता लगाने का एक तरीका खोज रहा हूं। मुझे सॉफ्टवेयर संस्करण में रूचि नहीं है। मैं कई सवाल खोज की, लेकिन उनमें से कोई भी (आश्चर्यजनक) निम्नलिखित कारणों के लिए मेरी जरूरतों को पूरा:मैं कैसे पता लगा सकता हूं कि मेरा उपयोगकर्ता किस आईओएस डिवाइस का उपयोग कर रहा है?

समाधान 1:

NSString *deviceType = [UIDevice currentDevice].model; 

इसका कारण यह है कि यह मेरे बस "iPad" देता है काम नहीं करता। मैं जानना चाहता हूँ कि क्या यह आईपैड, आईपैड 2, नई iPad, iPhone 3GS, iPhone4 आदि है चाहता हूँ

समाधान 2: डिवाइस प्रकार के लिए परीक्षण नहीं, व्यक्तिगत क्षमताओं

इसका कारण यह है कि मैं लागू नहीं होता है के लिए जाँच इस डेटा को उपयोगकर्ता आंकड़े एकत्र करने के लिए चाहते हैं, किसी भी डिवाइस विशिष्ट संचालन को न करने के लिए।

समाधान 3: UIDeviceHardware का उपयोग करते हुए पाया here

इस कोड को बहुत पुराना लग रहा है और डिवाइस पर गोपनीय डेटा तक पहुंचने लगता है। यहां तक ​​कि बहस भी है कि इसका उपयोग करने वाला ऐप स्वीकृत हो जाएगा या नहीं। सबसे महत्वपूर्ण बात यह है कि मुझे नहीं पता कि यह कैसे काम करता है :) एक विकल्प भी मिला है here

क्या पिछले दो में से कोई भी उपयोग करने के लिए सुरक्षित है? क्या वे भविष्य के अनुरूप हैं? क्या वे ऐप्पल अनुमोदन नियमों का पालन करते हैं?

या इसके आसपास पाने के लिए कोई और तरीका है?

अग्रिम धन्यवाद।

उत्तर

6

ऐप्पल इस नमूना कोड में ऐसे एपीआई का उपयोग करता है। LargeImageDownsizing उदाहरण परियोजना उद्धृत करने के लिए, फ़ाइल LargeImageDownsizingViewController.m लाइन 83 के साथ शुरुआत में:

का चयन उचित परिणामस्वरूप छवि का आकार और टाइल आकार किया जा सकता है, लेकिन डेवलपर के लिए एक व्यायाम के रूप में छोड़ दिया जाता है। ध्यान दें कि डिवाइस प्रकार/संस्करण स्ट्रिंग (उदा।"IPhone2,1" क्रम पर निर्धारित किया जा सकता sysctlbyname समारोह के उपयोग के माध्यम:

मेरे मामले में
size_t size; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
char *machine = malloc(size); 
sysctlbyname("hw.machine", machine, &size, NULL, 0); 
NSString* _platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
free(machine); 

_platform एक आइपॉड टच 4 पीढ़ी के लिए iPod4,1 होगा।

यह कोड आपके द्वारा पोस्ट किए गए दोनों गितब उदाहरणों की जड़ पर है।

+0

धन्यवाद। अब जब मुझे पता है कि यह सुरक्षित है, मैंने इसे अपनी परियोजना में शामिल किया और समस्या हल की। –

1

तकनीकी रूप से, [UIDeviceHardware platform] को ठीक काम करना चाहिए और आपको इसे अपने सर्वर पर भेजना चाहिए। प्लेटफ़ॉर्म आईडी भविष्य में ओएस में बदल जाएगी, तो आपको परेशानी से बचाने के लिए आपको प्लेटफ़ॉर्म आईडी के साथ आईओएस संस्करण भी भेजना चाहिए।

क्योंकि फ़ंक्शन sysctlbyname का उपयोग यहां किया जा रहा है अच्छी तरह से प्रलेखित है, इसलिए मुझे नहीं लगता कि ऐप्पल आपके खिलाफ नियम संख्या 2.5 का उपयोग कर सकता है। हालांकि, अभी भी नियम संख्या 17.1:

17,1 Apps उपयोगकर्ताओं के पूर्व अनुमति प्राप्त करने और के बारे में जानकारी के लिए उपयोग के साथ उपयोगकर्ता प्रदान किए बिना एक उपयोगकर्ता के बारे डाटा संचारित नहीं कर सकते हैं कि कैसे और कहाँ डेटा का उपयोग किया जाएगा

यह तर्कसंगत है कि डिवाइस प्लेटफ़ॉर्म उपयोगकर्ता के बारे में है या नहीं। मेरी सलाह यह है कि आपको यह मानना ​​चाहिए कि आप 17.1 का उल्लंघन नहीं कर रहे हैं और इसके बारे में कभी भी उल्लेख नहीं करते हैं। यह अत्यधिक संभावना है कि समीक्षक को पता नहीं चलेगा कि आप दृश्य के पीछे क्या कर रहे हैं।

+0

धन्यवाद। मैं एकत्रित डेटा को एकत्रित कर रहा हूं और इसे किसी उपयोगकर्ता को बाध्य नहीं कर रहा हूं, इसलिए मुझे नहीं लगता कि यह 17.1 नियम के विरुद्ध है। मुझे भी यकीन है कि वे भी ध्यान नहीं देंगे। –

0

आपके द्वारा उल्लिखित यूआईडीवीसहार्डवेयर काफी अच्छा है लेकिन थोड़ा पुराना है। आप this को और अधिक सेब-शैली बना सकते हैं, इसलिए वे इसे और अधिक पसंद करेंगे।