【问题标题】:Determine if your app has access to Calendar without initiating request?确定您的应用是否可以在不发起请求的情况下访问日历?
【发布时间】:2014-08-22 13:25:45
【问题描述】:

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

但我不想在删除时征求用户的许可,因为用户不知道应用程序为什么要访问日历,因为他们从来不知道它可以将约会保存到日历 - 他们在网站,他们没有理由在那个时候授予它,因为它无论如何都不会做任何事情。

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

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

【问题讨论】:

  • EKEventSource authorizationStatusForEntityType:

标签: ios objective-c calendar ekeventstore


【解决方案1】:

你可以使用[EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]

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

更多可以在类参考here中找到

【讨论】:

  • 谢谢,没有意识到这是一个静态方法,当我找不到它时非常困惑。
  • 简洁美观;)
【解决方案2】:
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");
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2011-02-22
    相关资源
    最近更新 更多