Watch OS 2.0 健身宠物app开发心得[1]-Healthkit的sdk接入
2015-09-19 00:17
330 查看
Watch OS2 - Healthkit的sdk接入
博主于今年7月底开始接触watch os2.0系统,听闻在os2.0上已经支持了原生app的开发,便兴致冲冲的开始了一段漫长的爬坑之旅!博主主要开发的项目是在watch上研发一款健身宠物养成类游戏,如下图:
主要的功能就是利用watch os2.0 上的healkit sdk,依据watch收集的个人健康数据,以及完成这款原生app(即健身宠物,后文如此称呼)所指定的锻炼任务后,可以获得锻炼宠物的活力,以及捕捉相应各种种类的宠物等。而你所圈养的宠物的进化,也会依据主人的锻炼成果而有所不同,分为肌肉型,智慧型,以及肥胖型。
因此由上述功能可知,开发这款健身宠物,其核心模块就是apple watch上的healthkit sdk。
博主开发的时候,使用的开发环境是Xcode 7.0 beta 5 ,watch os 2.0 以及 ios 9.0。
好了,言归正传,下面就来讲述下博主在搭建项目阶段遇到的第一个坑,既是Healkit的sdk接入,所会遇见的最主要的问题。
首先,要导入apple提供的healthkit的sdk,你需要在你的项目工程文件中的target下,找到ios targets以及watchkit extensition的Capabilities目录,打开这两者中的healthkit开关。具体位置如下图所示:
在打开了项目设置里的ios 以及 watchkit extensition的healkit 开关后,我们将要进行下一步操作——请求healthkit 数据读取的授权。网上有很多类似的使用案例,在此我也将我的使用方法贴出来,这里不是重点,随后在appDelegate.swift中的设置才是重点。
import WatchKit import Foundation import HealthKit import ClockKit class ExtensionDelegate: NSObject, WKExtensionDelegate{ let healthManager = HealthManager() let userDefault = NSUserDefaults.standardUserDefaults() let gameData = GameData.shareInstance() let csvReader = CSVReaderSingleton.shareInstance() func applicationDidFinishLaunching() { // Perform any final initialization of your application. initData() gameData.configData = GameData.getConfigDataFromCSV(9000) if !userDefault.boolForKey("firstLogin") { firstInit() gameData.setUserData() } gameData.getUserData() } func applicationDidBecomeActive() { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. gameData.getUserData() gameData.startBenefitTimer() gameData.checkPetReward() gameData.checkFatAdding() gameData.checkHealthReward() gameData.startWorkSession() } func applicationWillResignActive() { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, etc. gameData.setUserData() gameData.closeBenefitTimer() gameData.endWorkSession() // refreshComplications() } func didReceiveLocalNotification(notification: UILocalNotification) { } func firstInit() { // --- 标示用户是否为首次登陆 userDefault.setBool(true, forKey: "firstLogin") gameData.currentPetData.id = gameData.configData.defaultPet gameData.currentPlayerData.storeItemUsing = gameData.configData.defaultTrain gameData.currentPlayerData.storeItemPurchased.append(gameData.configData.defaultTrain) } func initData() { // --- 初始化csv数据 csvReader.initDictionaryData() // --- 请求healthkit授权 print("start request authorize") healthManager.authorizeHealthKit { (authorized, error) -> Void in if authorized { print("HealthKit authorization received.") } else{ print("HealthKit authorization denied!") if error != nil { print("\(error)") } } } } func refreshComplications() { let clockServer = CLKComplicationServer.sharedInstance() for complication in clockServer.activeComplications { if complication.family == .ModularLarge { // refresh the complication datas clockServer.extendTimelineForComplication(complication) } } } }
在watchkit Extensition上获取了授权后(即watch取得授权),还需要向手机进行一次healthkit的授权验证(无法避免)。这就是很多人容易忽略掉的一步,缺少了这一步,apple watch是无法获得healthkit中心的数据的。因此,我们需要在ios的工程中的AppDelegate.swift中加入如下一句话:(如图)
在此处对手机进行授权访问验证后,才能使apple watch 的healthkit 数据授权成功。
好了,第一篇主要是将healthkit的接入,下一篇博客,博主将具体介绍如何实现 心跳数据的读取,以及脉搏跳动动画,并分享一下apple watch上按小时分钟获取healthkit step数据的所遇到的大坑,以及如何填补这个坑。
相关文章推荐
- Android完整的Activity页面
- Android Studio 修改注释模板中的${USER}变量
- iphone微信分享链接时出现乱码的解决方法
- Android完整的Fragment页面
- 移动端弹出框插件
- iOS Push服务端PHP代码
- databinding学习(2)
- Unity3D和Android交互(Android调用Unity的场景)
- XcodeGhost病毒波及大量主流iOS应用
- ios 应用实现快速的临时缓存之JSON 转化成模型
- 我的Android设计模式(一) 层级控制模式
- applicationContext.xml
- 如何脱机查看安卓的官方api
- Android的jni学习之路--第一篇
- Android自定义控件View(圆形控件)
- iOS---数据离线缓存
- Android布局相关
- ios数据持久化
- Vuforia SDK----从Unity的SD卡装入一个DataSet
- 关于Swift2.0提供的try catch异常捕捉的使用方法