Watch OS 2.0 健身宠物app开发心得[1]-Healthkit的sdk接入

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数据的所遇到的大坑,以及如何填补这个坑。

时间: 2024-10-24 19:22:16

Watch OS 2.0 健身宠物app开发心得[1]-Healthkit的sdk接入的相关文章

Android 6.0指纹识别App开发demo

在android 6.0中google终于给android系统加上了指纹识别的支持,这个功能在iPhone上早就已经实现了,并且在很多厂商的定制的ROM中也都自己内部实现这个功能了,这个功能来的有点晚啊.在google全新发布的nexus设备:nexus 5x和nexus 6p中都携带了一颗指纹识别芯片在设备的背面,如下图(图片来自网络): 笔者手中的设备就是图上的那台黑色的nexus 5x,话说这台机器很是好看呢!手感超棒! 废话不多说,下面我出一个指纹识别的demo app,并且详细说明怎么

苹果版App开发心得

这几个月中做的工作包括网站开发.安卓App开发和苹果App开发,前两者用的语言都是我熟悉的java,故苹果知识的学习,较安卓知识的学习,多出「语言基础」一块,其他方面差不多. 之前发过安卓那篇,如感兴趣,戳我的名字看吧. 0.语言基础 去年购入mac开始学ios编程时用的是swift,今年用的是objective-c(下简称oc). 网上有将oc与java对比的博文,其实面向对象各种语言,能力大同小异,主要是写法不同.oc最大的特殊,当为用中括号调用方法,我感觉这很丑陋怪异,但想到目的是让每个参

安卓版App开发心得

从2016年4月到6月主要做的工作是网站的开发,而6月到现在2016年8月初,主要做的工作是Android和IOS两种App的开发,又以Android为主. 将这段时间的Android开发心得记录如下. 1.开发环境和参考资料 由于学会FQ的时间比较短(2016年7月才学会),现在在用的mac版AndroidStudio是在国内某站上下载的.今年将开发环境由windows转为mac了,好在各种IDE都是跨平台的,迁过来后麻烦不多,Android Studio也贴心地支持Eclipse风格快捷键,

蓝牙4.0方案 蓝牙LED灯方案|蓝牙4.0串口模块|蓝牙4.0方案|蓝牙APP开发

蓝牙4.0方案: 深圳市强禾科技有限公司在2013年推出了全新理念的LED照明产品,具备无线蓝牙功能的LED智能球泡灯,它是世界上拥有蓝牙功能(蓝牙4.0版本)的WRGB灯泡,采用IOS APP操作更方便简单. LED智能球泡灯不止用于普通照明,LED蓝牙灯泡还融入了情景灯光变化.音乐灯光体验.炫彩灯光效果. 蓝牙4.0方案

SpriteKit游戏开发点滴[4] 适配屏幕的技巧

适配屏幕的技巧 多屏幕分辨率可真是开发者的死对头啊!常言道:你若屏幕分辨多,我就自挂东南枝- 不过对于游戏开发而言,一旦理解了适配屏幕的原理,便可无敌于众多的屏幕分辨率了. 在开始游戏开发时,我们预设一个"原始屏幕",在原始屏幕上绘制各种游戏元素: 当实际将游戏部署到不同分辨率的设备上时,再将"原始屏幕"绘(ying)制(she)到实际屏幕上去. 在映射到实际屏幕的过程中,如果"实际屏幕"的长宽比和"原始屏幕"的不同,就要考虑

SpriteKit游戏开发点滴[5]旋转 & Anchorpoint

最近在做关于旋转的动画效果,遇到了些问题,在解决问题的过程中对SpriteKit中的旋转有所更加深入的了解,在此进行个总结. 我想实现下面的这个效果:一个水管绕着白色星球的中心进行旋转. 最自然的想法是直接使用SpriteKit的SKAction.rotateByAngle方法直接进行旋转即可. 那么问题来了,一个SKSpriteNode元素如何绕一个指定的点旋转呢? 默认情况下,每个SKSpriteNode节点都有一个锚点(Anchorpoint),而rotateByAngle方法则是以锚点为

Nutch 1.0 百度贴吧源代码分析[3] Plugin(2)

在URLNormalizers构造函数中,有一句没有看: this.extensionPoint =PluginRepository.get(conf).getExtensionPoint( URLNormalizer.X_POINT_ID); 看一下PluginRepository.get函数: public static synchronizedPluginRepository get(Configuration conf) { PluginRepository result = CACHE

[.net 面向对象程序设计深入](5).NET MVC 6.0 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)

[.net 面向对象程序设计深入](5).NET MVC 6.0 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux) 1.关于跨平台 上篇中介绍了MVC的发展历程,说到.NET 5.0之后更名为 Core 1.0,同样MVC 6.0也是运行在Core 1.0(.NET 5.0)之下. 我们要进行开发和部署基于MVC 6.0的项目,首先要搭建他的开发环境. Core 1.0 是一个支持跨平台框架,下面分别介绍如何在Windows/Mac Os X/Linux下搭建开发

萌宠嘉年华app开发抢宠物收益

萌宠嘉年华app开发林生▉l8l加4896微9698电同步▉,萌宠嘉年华软件app开发,萌宠嘉年华系统开发,萌宠嘉年华app平台搭建,开发一套萌宠嘉年华系统多少钱,萌宠嘉年华系统开发费用. 温馨提示:本公司是软件开发公司,非平台方,玩家勿扰,开发软件欢迎咨询. 目前信息通信技术.互联网技术.大数据云计算.新型仓储物流等供应链高新技术迎来了快速发展期.高新技术的快速发展为传统供应链改造升级提供了新的契机,数字化技术将逐步打通供应链模块中的各个信息孤岛,使得供应链变成一个完全集成的生态系统,使其满足