यह मेरे लिए एकदम सही चाल है!
IOS6 पर, ऐप्पल ने नया गोपनीयता नियंत्रण पेश किया है, उपयोगकर्ता प्रत्येक ऐप द्वारा संपर्क और कैलेंडर की पहुंच को नियंत्रित कर सकता है। इसलिए, कोड पक्ष में, आपको अनुमति का अनुरोध करने के लिए कुछ तरीके जोड़ने होंगे। IOS5 में या उससे पहले, हम हमेशा कॉल कर सकते हैं
ABAddressBookRef addressBook = ABAddressBookCreate();
बिना किसी समस्या के एड्रेसबुक प्राप्त करने के लिए, लेकिन iOS6 में, यदि आपके पास अनुमति नहीं है, तो यह कॉल सिर्फ खाली पॉइंटर लौटाएगा। इसलिए हमें ABAddressBookRef प्राप्त करने के लिए विधि बदलने की आवश्यकता है।
__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
accessGranted = granted;
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);
}
else { // we're on iOS 5 or older
accessGranted = YES;
}
if (accessGranted) {
// Do whatever you want here.
}
कोड में, सेमाफोर का उपयोग प्रतिक्रिया तक अवरुद्ध करने के लिए किया जाता है, जबकि ABAddressBookRequestAccessWithCompletion एप्लिकेशन से पहले नहीं पूछने पर अनुमति मांगेगा। अन्यथा यह सेटिंग्स-प्राइवेसी-कॉन्टैक्ट में सेटिंग्स को फॉलो करेगा।
स्रोत: http://programmerjoe.blogspot.com/2012/10/ios6-permissions-contacts.html