日常我们都会接触到上传步数参加各种APP的活动,来赢取虚拟货币或者实物奖品。于是我对此发生了浓厚的兴趣,决定对APP获取步数的原理进行研究。
简单说一下什么是HealthKit。就是苹果在IOS8系统以后用来生成、存储、查询各种健康数据的一个API,包括iPhone本身创建的健身数据,或者第三方app创建的健康数据,都可以通过这个API进行读取和查询。也可以把HealthKit看成iPhone的健康数据的一个统一的数据库,同一个手机上的不用app的健康数据的读取都是直接面向healthKit,由HealthKit统一管理,来实现iOS上不同应用之间的健康数据的交互。
所以,我们尝试新建一个app(只做开发环境),请求对HealthKit数据的读写入权限,添加运动步数后,看看微信(或者其他第三方app)通过HealthKit读取我们手机上的健康数据中的运动步数,是否能够成功读取修改后的运动步数。
具体实现代码我就不贴出来了,上网一搜一大把,我就谈谈几个关键点吧。
1.要读取HealthKit的话,必须在Info.plist里面添加对应的权限请求,不然直接闪退。(如果需要上架的话,还需要详细描述对应用到的地方)。
2.通过APP改动步数后,点击系统自带的健康软件,主页显示的是修改后的步数。然后点击tabBar的数据来源按钮,会看到对应步数来源于我们所建立的APP。
3.然后点击微信(或者平安系列APP)发现并不会读取我们所添加的步数,只显示原本的步数。
4.点击QQ,发现可以读取到修改后的步数,看来QQ的检测健康数据来源并没有微信的严格。
发现了微信等APP的异样,我就再去搜寻相关资讯,发现了《HealthKit 获取健康步数,去除人为添加的数据》 (PS:这个也是转帖,确定来源并不清楚,如有侵权,请联系),看来微信等APP会对数据源做出判断,把人为添加的数据排除,得出正确的步数。
总结:我们以后开发APP如果要调用到HealthKit的话,需要对获取数据的数据源做出判断,这样才能杜绝投机取巧,获得用户真实数据。但是,物理摇步器所生成的数据目前并不能有效排除,只能待后续系统更新,步数与路径相结合,获取用户真正运动的数据,这样才能鼓励更多的人去外出运动呢。