请求关联构建器开始收集时的授权错误

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 中首次出现错误的请求错误

解析器抛出错误时的 GraphQL 重定向

Symfony4如何使用查询构建器获取对象

Visual Studio Windows 窗体设计器错误:“构建框架内容失败。”

如何在Teamcity中设置超时和活动的多运行构建器