确定您的应用是否可以访问日历而不启动请求?

时间:2014-07-01 21:25:37

标签: ios objective-c calendar ekeventstore

我正在实现从我的应用程序中添加和删除iOS日历中用户创建的事件的功能。我已经为用户创建活动时编写了访问日历的权限请求,并且它工作得很好。我将事件保存在服务器上,我允许它们稍后删除事件,当发生这种情况时,我也会从日历中删除事件。有人可以在此应用程序之外创建事件,打开应用程序,然后删除从服务器获取的约会。在这种情况下,日历中没有存储事件,但它仍然需要查看是否存在尝试删除它的事件,并且它失败,因为我没有要求用户访问日历的权限在这种情况下。

但我不想在删除时要求用户获得权限,因为用户不知道为什么该应用会想要访问日历,因为他们从来不知道它可以将约会保存到日历 - 他们创建了它在网站上,并没有理由他们应该在那个时间点授予它,因为它无论如何都不会做任何事情。

因此,我的问题是,是否可以确定您的应用目前是否可以访问日历而不提出请求,这将导致在未授予权限的情况下向用户显示自动警报 - 请参阅请求代码下面?我只是想搜索活动,只有在我已经访问过日历时才尝试删除它,如果我没有,我就不会尝试删除任何内容。

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

2 个答案:

答案 0 :(得分:22)

您可以使用[EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]

您需要检查此方法是否返回EKAuthorizationStatusAuthorized,以确定您的应用当前是否有权访问给定实体类型的日历。

更多内容可以在课堂参考here

中找到

答案 1 :(得分:3)

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");
                    }