2012-09-21 18 views
17

W aplikacji, którą obecnie rozwijam, istnieje interakcja między użytkownikiem a kalendarzem użytkowników, jak to, co dzieje się w wielu aplikacjach, bardzo standardowe rzeczy. To działało dobrze, dopóki nie zaktualizowałem do wersji 6. Teraz mam do czynienia z "Ta aplikacja nie ma dostępu do twoich kalendarzy. Możesz włączyć dostęp w oknie Ustawienia prywatności", gdy próbuję wykonywać te same funkcje kalendarza, ale moja aplikacja robi nie pojawiają się w ustawieniach prywatności kalendarza urządzeń. Czy jest jakiś nowy interfejs, którego potrzebuję, aby poprosić użytkownika o udzielenie dostępu?Funkcjonalność kalendarza aplikacji Nie działa już w ios 6

Wielkie dzięki za pomoc w rozwiązaniu tego problemu, kto może pomóc.

Odpowiedz

28

Uważam, że mam dokładnie ten sam problem. Wdrażam normalną wersję Developer-build aplikacji, nad którą pracuję na moim iPhonie 4 z iOS 6.

EDIT: W końcu to rozwiązałem, nie znalazłem informacji w sieci, ale znalazłem ją w interfejsach API.

Uruchom następujące polecenie, aby poprosić o pozwolenie. Jest to najwyraźniej asynchroniczne połączenie, a dostęp nie zostanie przyznany, dopóki użytkownik nie autoryzuje aplikacji.

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

Ponadto możesz określić, co aplikacja chce zrobić z informacjami w Info.plist. Istnieje klucz o nazwie Privacy - Calendars Usage Description (NSCalendarsUsageDescription), który może zawierać opis ciągu, który zostanie wyświetlony w monicie dla użytkownika.

Poniżej znajdują się pełne informacje na temat problemu natknąłem (ustalonej przez wyżej):

Kiedy próbuję att imprezę do kalendarza widzę następujący ekran: Add Event error message

Kiedy Otwieram ustawienia dla ustawień prywatności kalendarza, żadna aplikacja nie jest widoczna: Settings, Privacy, Calendars

To wszystko prowadzi mnie do myślenia, że ​​jest pewne ustawienie, które muszę umieścić w Info.plist t o włączyć dostęp do kalendarza i poprosić użytkownika o zgodę na uruchomienie. Przeszukałem sieć, ale niczego nie znalazłem.

@jloewy, myślę, że to ten sam problem, który masz?

+2

działało idealnie, dziękuję! – JLoewy

0

Pojawi się okienko wyskakujące z pytaniem użytkownika o pozwolenie przed zezwoleniem aplikacji na dostęp do informacji kalendarza. Jeśli nie zezwoliłeś aplikacji na dostęp do kalendarza, musisz jawnie zezwolić aplikacji na dostęp do kalendarza, dodając do białej listy aplikację w ustawieniach.

+0

To, co myślałem, ale nie. Próbowałem usunąć aplikację z urządzenia i przebudować ją, ale nigdy nie wyskakuje to pole uprawnień – JLoewy

+0

jest w sekcji prywatności na ustawienia – serhats

9

Jeśli planujesz obsługę urządzeń przed iOS 6, dodam następujące rzeczy, w przeciwnym razie wystąpi błąd.

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

Jeśli chcesz czekać, aby użytkownik mógł odpowiedzieć na żądanie, można dodać kilka linijek kodu z przyjętym odpowiedź:

__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

dziękuję za rozwiązanie –

1

będzie prosić o pozwolenie tylko raz na następnym razem, gdy pamięta wybór. Jeśli nie zezwolisz na dostęp do Kalendarza, nie będzie on pytać o następny raz i nie pozwoli na dodanie wydarzenia do Kalendarza.

Jeśli chcesz zresetować te ustawienia, musisz usunąć "Ustawienia prywatności", a wtedy tylko poprosi o uprawnienia, gdy aplikacja spróbuje uzyskać dostęp do kalendarza za pomocą interfejsu API RequestAccessToEntityType.

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

+0

Proszę rozważyć dodanie linku do dokumentacji. –

+0

@Jeff - Dziękujemy za sugestię. Oto link do powiązanej dokumentacji Apple: http://developer.apple.com/library/ios/#documentation/EventKit/Reference/EKEventStoreClassRef/Reference/Reference.html – AnkitJain

Powiązane problemy