关于ios:确定您的应用是否可以在不发起请求的情况下访问日历?

我正在实现从我的应用程序中从iOS日历添加和删除用户创建的事件的功能。当用户创建事件时,我已经对访问日历的权限请求进行了编码,并且运行良好。我将事件保存在服务器上,并允许他们以后删除该事件,并且在发生这种情况时,我也从"日历"中删除了该事件。可能有人可以在此应用程序外部创建事件,打开该应用程序,然后删除从服务器获取的date。在这种情况下,日历中没有存储任何事件,但是仍然需要查看是否存在尝试删除该事件的方法,该事件失败了,因为在这种情况下,我并没有要求用户获得访问日历的权限。

但是我不想在删除时询问用户的许可,因为用户不知道为什么应用会想要访问日历,因为他们从不知道可以将date保存到日历-他们在日历上创建了date网站,并且没有理由在那个时间点授予它,因为它仍然无能为力。

因此,我的问题是,是否可以确定您的应用当前是否可以访问日历而无需发出请求,这将导致在未授予权限的情况下向用户显示自动警报-请参阅请求代码以下?我只想搜索该事件以尝试仅在我已经有权访问日历的情况下才将其删除,否则,我将不会尝试删除任何内容。

1
2
3
4
5
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (granted) {
        //already have access or user tapped on Allow in popup
    }
    ...


您可以使用[EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]

您需要检查此方法是否返回EKAuthorizationStatusAuthorized,以得出您的应用当前可以访问给定实体类型的日历的信息。

更多内容可在此处的课程参考中找到


1
2
3
4
5
6
7
8
9
10
11
12
13
import EventKit;

let authorizationStatus = EKEventStore.authorizationStatus(for: .event);
                    switch authorizationStatus {
                    case .notDetermined:
                        print("notDetermined");
                    case .restricted:
                        print("restricted");
                    case .denied:
                        print("denied");
                    case .authorized:
                        print("authorized");
                    }