ios - m7/m8 检测运动事件授权是否被拒绝

标签 ios authorization apple-m7

我以多种方式使用 M7/M8 芯片的 MotionActivity,包括计步。对于计步,我既查询当天的步数,又请求实时发生的步数。

目前,在执行此操作之前,我会检查[CMStepCounter isStepCountingAvailable],以及本地覆盖标志,然后再继续执行此代码。如果未授予 motionActivity 授权,我假设 isStepCountingAvailable 将返回 FALSE。这似乎不是这种情况,它似乎更像是一种硬件检测。我似乎找不到其他方法来检测是否为此授予了授权。

这意味着 startStepCountingUpdatesToQueue 和 queryStepCountStartingFrom 都运行并返回 block ,但总是返回错误代码。特别是 CMErrorDomain 代码 105。

有没有更好的方法让我判断motionActivity是否未被授权?我有一些回退代码,但我更喜欢事先进行 bool 检查,而不是返回 block 中的错误代码。

if (self.useM7IfAvailable && [CMStepCounter isStepCountingAvailable]){
    self.cmStepCounter = [[CMStepCounter alloc] init];      
    [self.cmStepCounter startStepCountingUpdatesToQueue:self.operationQueue updateOn:1.0 withHandler:^(NSInteger numberOfSteps, NSDate *timestamp, NSError *error){
        if(!error){
            // do something with numberOfSteps
        } else {
            // not authorized: CMErrorDomain code 105
        }
    }];
}

[self.cmStepCounter queryStepCountStartingFrom:dayStart to:dayEnd toQueue:_operationQueue withHandler:^(NSInteger numberOfSteps, NSError *error) {
    if(!error){
        // do something with numberOfSteps   
    } else {
        // not authorized: CMErrorDomain code 105
    }
}];

最佳答案

通过检查错误,您正在正确地执行此操作。根据文档 ( https://developer.apple.com/library/ios/documentation/coremotion/reference/cmmotionmanager_class/index.html#//apple_ref/c/tdef/CMError ),您将收到错误代码为 105 的 CMErrors,如您所见。

遗憾的是,无法提前检查您是否已获得授权,但这遵循了 Apple 的范例以及其他需要授权的核心级框架,例如 CoreLocation。原因是你可以在后台获取运动步骤,然后用户可以禁用你的运动访问,你必须以可能与不被访问的方式相同的方式对该事件使用react首先获得授权。

关于ios - m7/m8 检测运动事件授权是否被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849983/

相关文章:

ios - CoreMotion API 和运动许可

ios - Alamofire 优先队列

ios - UIScrollView 自动滚动 64 点

ios - 物理体的轮廓通过我的 swift SpriteKit 游戏中的所有其他节点显示

authentication - EventSourcing 应用程序中的用户身份验证

Angular 7 自动刷新不记名 token

ios - 是否允许加载外部捆绑文件?

asp.net - 当客户端cookie滑动时刷新IdentityServer cookie

ios - Apple 的 M7 处理器是否支持低功耗 GPS 跟踪?

ios - 如何实现 CMStepCounter CoreMotion - M7 芯片