Как да разберете дали потребителят на iOS е деактивирал iCloud Calendar, след като първоначално го е активирал

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

по-късно, ако потребителят е деактивирал iCloud Calendar чрез приложението Настройки и се върне към нашето приложение, нашето приложение няма начин да разбере, че това е деактивирано. Всички проверки за намиране на календари все още показват календара iCloud (дори и да е бил включен в настройките)

Някакви съвети или съвети как да заобиколите това?


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


Отговори (1)


след дълго търсене най-накрая се спрях на решение. не получи ясен отговор, но по други донякъде свързани въпроси най-накрая намери начин да открие дали iCloud Calendar е изключен (дори ако iCloud е включен)

логиката е, проверете и съхранете локален източник на календар, след което проверете за iCloud календари. Ако открием iCloud, всъщност проверете и вижте дали има календари в iCloud (за да откриете дали iCloud Cals са изключени) и ако iCloud Cals са изключени, вместо това използвайте локалния кал.

Работи добре, докато не изведем GMail и Google Calendars... още една битка за още един ден. Ако някой има принос за това, много оценявам. Изглежда, че трябва да минем през API на Google Cal и да се включим там.

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 Calendars и по някакъв начин ръчно е изтрил всички iCloud Calendars, това ще счита, че iCloud Cals е изключен. - person zonabi; 24.06.2015
comment
Намерихте ли добро решение за целия проблем с Gmail? - person ilan; 16.08.2017
comment
@ilan не, не сме, не сме разглеждали това от известно време, така че се надяваме, че сега е по-добре. - person zonabi; 20.08.2017