请求关联构建器开始收集时的授权错误
Posted
技术标签:
【中文标题】请求关联构建器开始收集时的授权错误【英文标题】:Authorisation error when request associated builder begin collection 【发布时间】:2019-04-26 11:34:37 【问题描述】:我正在为手表操作系统开发活动跟踪器。我希望能够使用 Healthkit 读取心率数据。该应用程序是用 Objective C 编写的,对于这个特定的任务,没有太多的代码示例。
通过阅读 Apple 文档并观看 2018 年 WWDC 视频“New Ways to Work With Workouts”,我编写了我认为应该在 Objective C 中工作的代码。一切似乎都运行良好,直到我调用生成器开始CollectionWithStartDate。完成处理程序返回错误:Error Domain=com.apple.healthkit Code=4 "Not authorized" UserInfo=NSLocalizedDescription=Not authorized
这让我很惊讶,因为我可以在 ios 设备上的 Settings>Privacy>Health>myAppName 下看到权限看起来不错。授权过程(即 Watch 应用程序触发 iOS 设备上的提示以批准请求的 Healthstore 访问权限)按照 Apple 文档中的描述和上述视频中的说明运行。
我已经在模拟器和带有配对手机的真实手表上尝试过。
有人可以帮忙吗?我用这个把头发拔掉了!
这是我为达到这一点而编写的相关目标 C 代码(也许我遗漏了什么?)。
在手表扩展上:
授权请求(由 iOS 应用处理)
// awakeWithContext
if (!appHasStarted)
healthStore = [HKHealthStore new];
[healthStore requestAuthorizationToShareTypes:[self dataTypesToShare] readTypes:[self dataTypesToRead] completion:^(BOOL success, NSError * _Nullable error)
if (error)
NSLog(@"Error:requestAuthorizationToShareTypes: %@",[error localizedDescription]);
];
- (IBAction)watchStartButtonPressed
NSLog(@"Pressed start button on watch");
if (watchStartButtonState == startbuttonstatestart)
dateWhenPressedStart = [NSDate date];
configuration = [[HKWorkoutConfiguration alloc] init];
[configuration setActivityType:HKWorkoutActivityTypeCycling];
NSError *error;
workoutSession = [[HKWorkoutSession alloc] initWithHealthStore:healthStore configuration:configuration error:&error];
if (error)
NSLog(@"Error:unable to establish a workout session: %@",[error localizedDescription]);
return;
workoutSession.delegate = self;
builder = workoutSession.associatedWorkoutBuilder;
builder.delegate = self;
HKLiveWorkoutDataSource* dataSource = [[HKLiveWorkoutDataSource alloc] initWithHealthStore:healthStore workoutConfiguration:configuration];
builder.dataSource = dataSource;
[workoutSession startActivityWithDate:dateWhenPressedStart];
[builder beginCollectionWithStartDate:dateWhenPressedStart completion:^(BOOL success, NSError * _Nullable error)
if (error)
NSLog(@"Error:beginCollectionWithStartDate: %@",[error localizedDescription]);
];
//This is the point where I get the error message.
- (NSSet *) dataTypesToShare
HKQuantityType *heartRate = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKQuantityType *energy = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierActiveEnergyBurned];
HKQuantityType *distance = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling];
return [NSSet setWithObjects:heartRate,energy,distance,nil];
- (NSSet *)dataTypesToRead
HKQuantityType *heartRate = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKQuantityType *energy = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierActiveEnergyBurned];
HKQuantityType *distance = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceCycling];
return [NSSet setWithObjects:heartRate,energy,distance,nil];
【问题讨论】:
找到解决方案了吗? 【参考方案1】:为未来的读者。将此添加到您的 Watch Extension plist。
【讨论】:
以上是关于请求关联构建器开始收集时的授权错误的主要内容,如果未能解决你的问题,请参考以下文章
从一个微服务到另一个微服务的 WebClient 构建器调用在 Webflux 中首次出现错误的请求错误