Подтвердить что ты не робот

Функциональность приложения Календарь больше не работает в ios 6

В приложении, которое я сейчас разрабатываю, есть взаимодействие между пользователем и календарем пользователей, например, что происходит во многих приложениях, очень стандартными. Он работал нормально, пока я не перешел на ios 6. Теперь я столкнулся с "Это приложение не имеет доступа к вашим календарям. Вы можете включить доступ в диалоговом окне" Настройки конфиденциальности ", когда я пытаюсь выполнить те же функции календаря, не отображаются в настройках конфиденциальности календаря устройств. Есть ли какие-то новые api, которые мне нужно использовать, чтобы попросить пользователя предоставить доступ?

Большое спасибо за помощь в решении этой проблемы, кто может помочь.

4b9b3361

Ответ 1

Я считаю, что у меня такая же проблема. Я развертываю обычный Developer-build приложения, над которым я работаю на своем iPhone 4 с iOS 6.

EDIT: я, наконец, решил это так, я не нашел информацию в Интернете, но я нашел ее в API.

Для запроса разрешения выполните следующее. Это, по-видимому, асинхронный вызов, и доступ не будет предоставлен до тех пор, пока пользователь не разрешит приложение.

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), который может содержать описание строки, которое будет отображаться в приглашении пользователю.

Ниже приведены подробные сведения о проблеме, с которой я столкнулся (исправлено выше):

Когда я пытаюсь подключиться к календарю, я вижу следующий экран: Add Event error message

Когда я открываю настройки для параметров конфиденциальности календаря, приложение не отображается: Settings, Privacy, Calendars

Все это заставляет меня думать, что есть некоторая настройка, которую я должен поместить в Info.plist, чтобы включить доступ к календарю и спросить у пользователя разрешение на запуск. Я искал в Интернете, но ничего не нашел.

@jloewy, я думаю, это та же самая проблема, с которой вы сталкиваетесь?

Ответ 2

Если вы планируете поддерживать устройства до iOS 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 */
    }];
}

Ответ 3

Если вы хотите дождаться ответа пользователя на запрос, можно добавить некоторые строки кода к принятому ответу:

__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
}

Ответ 4

Он запрашивает разрешение только один раз и в следующий раз запоминает выбор. Если вы не разрешаете доступ к Календарю, он не будет запрашивать в следующий раз и не позволит добавлять событие в Календарь.

Если вы хотите использовать reset эти параметры, вы должны удалить "Настройки конфиденциальности", а затем только запрашивать разрешения, как только приложение попытается открыть календарь с помощью API RequestAccessToEntityType.

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

Ответ 5

Появится всплывающее окно с запросом пользователя на разрешение, прежде чем разрешить приложению получать доступ к календарной информации. Если вы не разрешили приложению получать доступ к календарю, вам необходимо явно разрешить приложению получать доступ к календарю, удаляя приложение в настройках.