使用WatchKit和Widget(今日扩展)保存/删除HealthKit?

时间:2016-01-26 14:32:27

标签: ios objective-c watchkit health-kit today-extension

这是一个我知道答案的问题,因为我看到了执行此功能的应用程序。我试过(直接写,使用后台提取)但没有任何作用。我在应用程序商店中找到了一个应用程序,其中包含我正在寻找的功能。背景提取设置为OFF,主应用程序不在后台运行。我去了Widget并添加了一个项目。我打开HealthKit,我按预期看到了数据。

我想为我的应用做同样的事情。即使应用程序没有在后台运行,我也希望我的今天扩展(widget)和/或WatchKit扩展能够写入HealthKit存储。 就像我说的那样,我已经测试了一个能够实现这一功能的应用程序,即使在Apple文档中也说明了这一点:

  

HealthKit商店只能由授权的应用访问。您   无法从扩展程序(如今日视图)或从扩展程序访问HealthKit   一个WatchKit应用程序。

     

由于HealthKit商店已加密,因此您的应用无法读取数据   手机锁定时从商店出来。这意味着您的应用可能不会   能够在后台启动时访问商店。   但是,即使在手机上,应用仍然可以将数据写入商店   锁住了。商店暂时缓存数据并将其保存到   电话解锁后立即加密存储。

任何答案或见解都表示赞赏。谢谢大家。

2 个答案:

答案 0 :(得分:1)

在设备锁定时,Health Data Store确实已加密。锁定被定义为需要设备上的密码并且屏幕已关闭(因此在您返回主屏幕之前需要密码或触摸ID)。虽然商店已加密,但无论应用程序是否在后台运行,都无法从中读取任何数据。即使在应用程序运行时设置观察者查询也不允许继续读取它。我想这种保护级别只需使用NSFileProtectionComplete选项的数据保护功能即可完成。

您在其他应用中观察到了哪些HealthKit功能?如果它显示步长和距离数据,则他们可能直接从计步器(CMPedometer)获取此数据,这在设备被锁定时不受限制。

答案 1 :(得分:0)

Lehn0058关于授权的评论是正确的。即使已经在应用程序中提供了授权,我也必须明确地从WatchKit和Today Extension请求授权。之后两人都可以写信给健康商店。以上Apple的评论仅涉及从健康商店阅读而不是写入健康商店。以下是其他任何遇到同样问题的示例代码。再次感谢。

在WatchKit InterfaceController.m中

- (void)awakeWithContext:(id)context {
    [super awakeWithContext:context];
    // Configure interface objects here.
    [[HealthKitManager sharedManager] requestHealthKitAccess];
}

今天扩展TodayViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];    
    [[HealthKitManager sharedManager] requestHealthKitAccess];
}