Как узнать, отключил ли пользователь iOS Календарь iCloud после его первоначального включения

наша проблема: пользователь iOS запускает наше приложение и включает интеграцию календаря через iCloud (у них есть Настройки > iCloud > Календари). Наше приложение заполняет для них новый календарь iCloud.

позже, если пользователь отключил Календарь iCloud через приложение «Настройки» и вернется в наше приложение, наше приложение не сможет узнать, что это было отключено. Любые проверки для поиска календарей по-прежнему показывают календарь iCloud (даже если он был включен в настройках)

Любые советы или рекомендации по работе с этим?


person zonabi    schedule 22.04.2015    source источник


Ответы (1)


после долгих поисков наконец остановился на решении. на него не было четкого ответа, но по другим несколько связанным вопросам, наконец, был найден способ определить, отключен ли Календарь iCloud (даже если iCloud был включен)

логика такова: проверьте и сохраните локальный источник календаря, а затем проверьте наличие календарей iCloud. Если мы обнаружим iCloud, на самом деле проверьте и посмотрите, есть ли календари в iCloud (чтобы определить, отключены ли iCloud Cals), и если iCloud Cals отключены, используйте вместо этого локальную калибровку.

Работает хорошо, пока мы не запустим GMail и Google Calendars... еще одна битва в другой день. Если у кого-то есть вклад в это, очень признателен. Кажется, нам нужно пройти через Google Cal API и подключиться к нему.

EKSource *localCalSource;

self.calendarSource = nil;
for (EKSource *source in eventStore.sources) 
{
    if (self.calendarSource == nil && source.sourceType == EKSourceTypeLocal) 
    {
        self.calendarSource = source;
        localCalSource = self.calendarSource;
        TLog([self isLocalLoggingOn], "Found local cal source!");
    }

    // if iCloud is enabled, grab that source and return it
    if (source.sourceType == EKSourceTypeCalDAV && [[source.title lowercaseString] isEqualToString:@"icloud"])
    {

    if([source calendarsForEntityType:EKEntityTypeEvent].count>0)
    {     
    //Check to see if Calendar is enabled on iCloud
        self.calendarSource = source;     
    }else{      
    //Calendar is Disabled use LOCAL
            self.calendarSource = localCalSource;   
    }
        break;
        TLog([self isLocalLoggingOn], @"Found %@", source.title);
    }
}
person zonabi    schedule 04.05.2015
comment
в этом подходе есть один недостаток (найденный до сих пор) — если у пользователя включены календари iCloud и каким-то образом вручную удалены все календари iCloud, это будет считаться отключенным iCloud Cals. - person zonabi; 24.06.2015
comment
Вы нашли хорошее решение полной проблемы с Gmail? - person ilan; 16.08.2017
comment
@ilan нет, мы этого не делали, мы давно не смотрели на это, так что, надеюсь, теперь это лучше. - person zonabi; 20.08.2017