2012-09-21 19 views
17

में लंबे समय तक काम नहीं कर रहा है ऐप में मैं वर्तमान में विकास कर रहा हूं, उपयोगकर्ता और उपयोगकर्ता कैलेंडर के बीच बातचीत है, जैसे कई ऐप्स में क्या होता है, बहुत मानक सामान। जब तक मैं आईओएस 6 में अपग्रेड नहीं करता तब तक यह ठीक काम कर रहा था। अब मुझे "इस ऐप में आपके कैलेंडर तक पहुंच नहीं है। आप गोपनीयता सेटिंग्स में एक्सेस सक्षम कर सकते हैं" संवाद जब मैं वही कैलेंडर फ़ंक्शंस करने का प्रयास करता हूं तब तक मेरा ऐप करता है डिवाइस कैलेंडर गोपनीयता सेटिंग्स पर प्रकट नहीं होता है। क्या उपयोगकर्ता को पहुंच प्रदान करने के लिए कहने के लिए मुझे कुछ नया एपीआई उपयोग करने की ज़रूरत है?ऐप कैलेंडर कार्यक्षमता आईओएस 6

इस मुद्दे के साथ मेरी मदद करने के लिए बहुत कुछ धन्यवाद जो भी मदद कर सकता है।

उत्तर

28

मेरा मानना ​​है कि मेरे पास एक ही समस्या है। मैं ऐप के सामान्य डेवलपर-बिल्ड को तैनात कर रहा हूं, मैं आईओएस 6 के साथ अपने आईफोन 4 पर काम कर रहा हूं।

संपादित करें: मैंने अंततः इसे इस तरह हल किया, मुझे वेब पर जानकारी नहीं मिली, बल्कि मुझे यह मिला एपीआई में।

अनुमति का अनुरोध करने के लिए निम्न चलाएं। यह स्पष्ट रूप से एक एसिंक्रोनस कॉल है और एक्सेस तब तक नहीं दिया जाएगा जब तक उपयोगकर्ता ने ऐप को अधिकृत नहीं किया हो।

EKEventStore *es = [[EKEventStore alloc] init]; 
[es requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
    /* This code will run when uses has made his/her choice */ 
}]; 

इसके अलावा आप यह निर्दिष्ट कर सकते हैं कि ऐप Info.plist में जानकारी के साथ क्या करने का प्रयास कर रहा है। गोपनीयता - कैलेंडर्स उपयोग विवरण (NSCalendarsUsageDescription) नामक एक कुंजी है जिसमें एक स्ट्रिंग विवरण हो सकता है जो उपयोगकर्ता को संकेत में प्रदर्शित किया जाएगा।

नीचे समस्या मैं का सामना करना पड़ा (ऊपर से तय) का पूरा विवरण इस प्रकार हैं:

जब मैं कैलेंडर मैं निम्नलिखित स्क्रीन देखने के लिए एक घटना att करने की कोशिश: Add Event error message

जब मैं कैलेंडर गोपनीयता सेटिंग के लिए सेटिंग खोलने, कोई एप्लिकेशन दिखाई दे रहा है: Settings, Privacy, Calendars

यह सब मुझे ओर जाता है सोचने के लिए कुछ सेटिंग मैं Info.plist टी में डाल चाहिए है कि वहाँ o कैलेंडर एक्सेस सक्षम करें और उपयोगकर्ता को स्टार्ट अप पर अनुमति के लिए कहें। मैंने वेब की खोज की है लेकिन कुछ भी नहीं मिला है।

@jloewy, मुझे लगता है कि यह वही समस्या है जो आप कर रहे हैं?

+2

पर गोपनीयता अनुभाग पर है, धन्यवाद! – JLoewy

0

एप्लिकेशन को कैलेंडर जानकारी तक पहुंचने की अनुमति देने से पहले उपयोगकर्ता को अनुमति के लिए अनुमति देने वाला पॉपअप होने जा रहा है। यदि आपने एप्लिकेशन को कैलेंडर तक पहुंचने की अनुमति नहीं दी है, तो आपको सेटिंग्स पर एप्लिकेशन को श्वेतसूची द्वारा कैलेंडर तक पहुंचने की अनुमति देनी होगी।

+0

जो मैंने सोचा था, लेकिन यह नहीं है। मैंने डिवाइस से ऐप को हटाने और इसे पुनर्निर्माण करने का प्रयास किया लेकिन यह उस अनुमति बॉक्स को कभी भी पॉप अप नहीं करता है – JLoewy

+0

यह – serhats

9

यदि आप आईओएस 6 से पहले उपकरणों का समर्थन करने की योजना बनाते हैं, तो मैं निम्नलिखित जोड़ दूंगा अन्यथा आपको एक त्रुटि मिलेगी।

EKEventStore *store = [[EKEventStore alloc] init];  
if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { 
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     /* This code will run when uses has made his/her choice */ 
    }]; 
} 
7

आप उपयोगकर्ता अनुरोध पर प्रतिक्रिया के लिए प्रतीक्षा करने के लिए चाहते हैं, एक स्वीकार किए जाते हैं जवाब देने के लिए कोड की कुछ पंक्तियाँ जोड़ सकते हैं:

__block BOOL accessGranted = NO; 

if([store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) { 
    dispatch_semaphore_t sema = dispatch_semaphore_create(0); 
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
     accessGranted = granted; 
     dispatch_semaphore_signal(sema); 
    }]; 
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
} else { // we're on iOS 5 or older 
    accessGranted = YES; 
} 

if (accessGranted) { 
    // go on 
} 
+0

समाधान –

1

यह अनुमति के लिए केवल एक बार और के लिए पूछेंगे अगली बार जब यह पसंद याद करता है। यदि आप कैलेंडर तक पहुंच की अनुमति नहीं देते हैं तो यह अगली बार नहीं पूछेगा और कैलेंडर को ईवेंट जोड़ने की अनुमति नहीं देगा।

यदि आप इन सेटिंग्स को रीसेट करना चाहते हैं, तो आपको "गोपनीयता सेटिंग्स" को हटाना होगा और फिर केवल ऐप RequestAccessToEntityType API का उपयोग करके कैलेंडर तक पहुंचने का प्रयास करने के बाद ही अनुमतियों के लिए पूछेगा।

http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html

+0

समाधान के लिए धन्यवाद कृपया दस्तावेज़ीकरण के लिए एक लिंक जोड़ने पर विचार करें। –

+0

@ जेफ - सुझाव के लिए धन्यवाद। यहां संबंधित सेब दस्तावेज का लिंक दिया गया है: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html – AnkitJain

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