2013-10-04 13 views
9

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

इस प्रकार, मैंने प्रमाणीकरण + सुरक्षा के लिए टोकन के साथ डिवाइस uuid सहेजने के बारे में सोचा। फिर, मुझे पता चला कि मैं डिवाइस के uuid का उपयोग नहीं कर सकता, इसके बजाय मुझे identifierForVendor का उपयोग करना होगा जो उपयोगकर्ता या डिवाइस की जानकारी हमेशा प्रदान कर सकता है या नहीं।

तो, क्या कोई आईओएस में एक ही उपयोगकर्ता खाते के लिए इस एकाधिक डिवाइस लॉगिन सुविधा को प्राप्त करने का बेहतर और उचित तरीका सुझा सकता है?

उत्तर

7

आप पहले से ही उपयोग करके उपकरण की UUID नहीं है यह जानते हैं हालांकि, आप अपना यूयूआईडी उत्पन्न कर सकते हैं और इसे डिवाइस के उपयोगकर्ता डिफॉल्ट पर स्टोर कर सकते हैं।

पहचानकर्ता का उपयोग कर ForVendor 100% विश्वसनीय नहीं है, क्योंकि यह केवल आईओएस 6 और ऊपर काम करता है, और उपयोगकर्ताओं के पास आपको इसे देने से ऑप्ट आउट करने की क्षमता है, जो इसे खराब विकल्प बनाता है।

यहां कुछ कोड मैंने कुछ समय पहले इंटर्ननेट की प्रतिलिपि बनाई है और अभी भी इसका उपयोग आज तक कर रही है, स्रोत खोजने और थोड़ा सा जवाब देने का प्रयास करेगा। संपादित करें: Source

यह उत्पन्न होगा और UserDefaults में आप के लिए एक UUID की दुकान:

- (NSString *)createUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    [[NSUserDefaults standardUserDefaults] setObject:(__bridge NSString *)string forKey:@"UUID"]; 
    [[NSUSerDefaults standardUserDefaults] synchronize]; 
    return (__bridge NSString *)string; 
} 

और जब भी आप उत्पन्न UUID पढ़ने की जरूरत है:

- (NSString*)UUID 
{ 
    return [[NSUserDefaults standardUserDefaults] ObjectForKey:@"UUID"]; 
} 

अब आप के लिए विकल्प नहीं है उस पर अपने उपयोगकर्ता की आईडी संलग्न करें ताकि आप यह जान सकें कि यूयूआईडी किस उपयोगकर्ता से जुड़ा हुआ है ..

यह सिर्फ एक मोटा स्केच है इसे कैसे काम करना चाहिए

+0

परिचित लग रहा है: http://nshipster.com/uuid-udid-unique-identifier/ – Luke

+0

मुझे लगता है कि यदि कोई उपयोगकर्ता ऐप को पुनर्स्थापित करता है तो एक नया यूयूआईडी बनाया जाएगा? – Rupert

+0

@Rupert हाँ आप सही हैं! –

0

आपको यूयूआईडी बनाने के मानक तरीकों का उपयोग करना चाहिए। ऐप्पल नहीं चाहता कि आप डिवाइस ट्रैक कर रहे हों।

To create a unique identifier specific to your app, you can call the CFUUIDCreate function to 
create a UUID, and write it to the defaults database using the NSUserDefaults class. (Source) 

आप के बजाय अपने खुद के रोलिंग के इस के लिए एक पुस्तकालय का उपयोग करना चाहते हैं, तो आप इस तरह इस उत्कृष्ट पुस्तकालय का उपयोग करना चाहिए:

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); 
NSString *uuidString = (NSString *)CFUUIDCreateString(NULL,uuidRef); 
CFRelease(uuidRef); 
2

सबसे पहले, ऐप्पल डेवलपर दिशानिर्देश लक्षित विज्ञापनों (और कुछ अन्य चीजों) को प्रदर्शित करने के उद्देश्य से उपयोगकर्ता को ट्रैक करने के लिए आईडीएफए के उपयोग को प्रतिबंधित/हतोत्साहित करते हैं। दिशानिर्देश स्पष्ट रूप से डेवलपर को सुरक्षा उद्देश्यों के लिए डिवाइस की पहचान के लिए आईडीएफए का उपयोग करने की अनुमति देते हैं। का हवाला देते हुए सेब दिशा निर्देशों

advertisingTrackingEnabled

एक बूलियन मान बताता है कि उपयोगकर्ता विज्ञापन ट्रैकिंग सीमित है या नहीं।(रीड-ओनली)

@संपत्ति (nonatomic, केवल पढ़ने के लिए, गेटर = isAdvertisingTrackingEnabled) BOOL advertisingTrackingEnabled

चर्चा

किसी भी विज्ञापन पर नज़र रखने के प्रदर्शन से पहले इस संपत्ति के मूल्य की जाँच करें। यदि मान नहीं है, तो केवल निम्नलिखित प्रयोजनों के लिए विज्ञापन पहचानकर्ता का उपयोग करें: आवृत्ति कैपिंग, रूपांतरण ईवेंट, अद्वितीय उपयोगकर्ताओं की संख्या का आकलन, सुरक्षा और धोखाधड़ी का पता लगाने, और डिबगिंग।

आप एकाधिक डिवाइस लॉगिन के उद्देश्य से डिवाइस के आईडीएफए का उपयोग कर सकते हैं। प्रवाह कुछ इस तरह होगा:

सर्वर डिवाइस एक का उपयोग करते हुए
  1. उपयोगकर्ता लॉग, सर्वर एक टोकन जो NSUserDefaults में डिवाइस पर संग्रहीत है वापस भेजता है। ऐप डिवाइस पर आईडीएफए को NSUserDefaults

  2. इस टोकन का उपयोग एन्क्रिप्टेड स्ट्रिंग बनाने के लिए किया जाएगा जिसमें आईडीएफए होगा। (टोकन का उपयोग करके आईडीएफए एन्क्रिप्ट करें) एन्क्रिप्टेड मान मूल आईडीएफए के साथ प्रत्येक अनुरोध में सर्वर को पास किया जाएगा।

  3. सर्वर आईडीएफए के एन्क्रिप्टेड मान प्राप्त करने के लिए आईडीएफए और उसके साथ जुड़े टोकन का उपयोग करेगा (सर्वर निश्चित रूप से आईडीकेएफ के प्रत्येक टोकन के अनुरूप होगा) और प्राप्त एन्क्रिप्टेड मान से मेल खाता है अनुरोध। ऐसा करने का उद्देश्य यह सुनिश्चित करना है कि कोई भी आपके सर्वर में हैक नहीं कर सकता क्योंकि टोकन किसी के लिए दृश्यमान नहीं होगा लेकिन ऐप (आप टोकन को एन्क्रिप्टेड प्रारूप में भी स्टोर कर सकते हैं ताकि सुरक्षा के स्तर को बढ़ाया जा सके)।

  4. जब भी सर्वर पर कोई अनुरोध भेजा जाता है, तो NSUserDefaults में डिवाइस पर संग्रहीत आईडीएफए का मूल्य वर्तमान आईडीएफए से तुलना की जाएगी।

  5. यदि कोई मेल नहीं है, तो मौजूदा आईडीएफए को पहले सर्वर पर अपडेट किया जाएगा और फिर सफल अपडेट की पुष्टि मिलने के बाद ऐप डिवाइस पर संग्रहीत आईडीएफए को NSUserDefaults में मौजूदा (और व्यवसाय फिर सामान्य के रूप में चलाता है)।

वैकल्पिक रूप से आप कदम 3,4 से बचने और NSUserDefaults में, लेकिन उस में डिवाइस पर IDFA भंडारण उपयोगकर्ता IDFA रीसेट करने पर सर्वर से पर फिर से प्रवेश करने के लिए होता कर सकते हैं कर सकते हैं।

बस पुष्टि करते हुए, आईडीएफए को टोकन का मैपिंग एक से अधिक होगा।

आशा है कि इससे मदद मिलती है, अगर किसी भी मामले को स्पष्ट नहीं किया गया है या उपयोग के मामले को संतुष्ट नहीं किया गया है तो टिप्पणी करें।

संबंधित मुद्दे