苹果手机如果把小米手环3睡眠编辑数据编辑成长图

小米手环的激进成长背后之谜
&&&&当不断有人质疑可穿戴产品是否真的有人继续使用的时候,来自中国的华米科技凭借小米手环一举占据全球市场第三把交椅。根据12月4日,IDC最新出具的调查报告,全球可穿戴设备第三季度的出货量达2100万部,小米手环市场占有率为17.4%,排在它前面的只有Fitbit(22.2%)和Apple Watch(18.6%)。
&&&&同样根据IDC的测算,小米手环第三季度出货量为370万,97%在中国。
&&&&此前,华米科技副总裁章晓军称,自从2014年8月产品上市以来,目前已经突破1200万只。爱范儿采访了华米科技(北京)总经理王辉,他对爱范儿说,“在今年3、4月份,小米手环每个月的出货量平均每月突破100万,到今年8月份,小米手环每个月出货量突破150万。实际上,到9月下旬,小米手环的出货量已经突破千万。”尽管王辉表示2015年小米手环的出货量需要进一步核算才能提供,然而从华米科技出货量的节奏来看,有望突破1200万只。
&&&&他还透露,华米科技现在的财务状况健康,每个季度有1000多万人民币的纯利润。
&&&&2014年8月小米手环一代发售,到12月华米科技称出货量突破百万。不过,对于现在的华米科技来说,一个月百万出货量已经是可以轻松达到的目标。这种高速销售成长是如何而来的?
&&&&“小米手环一直供不应求。”
&&&&他分析道,前100万只小米手环的销售,主要依靠小米的用户,通过一波波抢购形成,但今年3月份也就是春节之后,小米手环开始扩散到周边人群,“现在的新增用户里,30%–40%是iOS用户。”
&&&&“最初我们没有想到卖得这么快,市场对小米手环的反映远远超过我们的预期。所以,即便3月份,小米手环在产能爬坡之后,每月出货超过100万的情况下,产品依然供不应求。后来8月份我们继续优化供应链,提升产能,结果发现一样卖光。”
&&&&从整体趋势上看,国人越来越重视运动、健康,从侧面来说,也更加乐于参与马拉松这样的赛事。中国田径协会在“2014年马拉松年会”公布,去年中国境内共举办51场马拉松以及相关赛事,参赛人数超过90万人次,同比去年场次增加了12场,人次增加了15万。其中,全国参加全程以及半程马拉松项目的总人次超过26万,比前年增加6万。具体赛事,比如广州马拉松,今年报名人数从2014年的49800人激增到78000人。2015年仅在中国田协赛历上的马拉松及相关赛事就达到130场——这个数字再一次提高。
&&&&#hc360分页符#
&&&&现下,铁人三项也是时兴的运动项目。
&&&&除了整体大环境的成熟外,王辉认为今年春节前后各个公司的计划,对用户起到了作用,让他们对运动手环这一产品有更多认知。另外,各类健身、运动类的App流行,在满足人们内心需求的同时,进一步刺激了用户的需求,让运动、健康概念变得更加流行。比如微信运动,在社会上掀起了“全民计步”的风潮(我们向微信咨询微信运动用户量等方面的数据,但微信方面依照公司规定没有提供)。
&&&&华米科技的产品定价在百元以下,降低用户尝试的成本,王辉认为这是产品受用户热捧的原因之一。“毕竟不到一百块前的东西,丢了、坏了也不心疼对吧?”
&&&&不过在尝鲜之后,用户会不会很快地将小米手环放在一边?王辉说,按照官方标称小米手环一次充电的平均使用天数达30天,但实际用户反馈往往可超过45天,是一种非常棒的使用体验。而除了计步以外,来电提醒和闹钟提醒,是许多用户十分依赖的功能。有这2点保证,小米手环“使用时间肯定超过3周、6周”——不过他同时提到,这部分的数据并没有经过核算,所以无法提供。
&&&&除此之外,王辉还提到今年8月众安保险与小米手环等运动类产品合作推出“步步保”,一是通过用户的历史运动状况以及预期目标,推荐不同保额档位的重大疾病保险保障,另外用户运动得越多,那么下个月需要缴纳的保费就越少。从后台数据观察,通过这样的刺激,许多第一次接触小米手环的用户,也有充足的动力去运动。
&&&&现在计步类App很多,对智能手环类的产品影响大吗?王辉说,“因为没有定量的分析,所以这个并不能确定,从定性分析来看,也许会有可能。从华米自己的实际销量来看,没有受什么影响。我们在不断观察这个市场,并思考可穿戴设备如何最大限度发挥能力,比如说可连续检测心率,这是手环先天的优势,这部分的数据对健身、减肥有非常重要的意义,而不会受纯软件的影响。所以我们进一步推出了小米手环心率版。”
&&&&为什么没有推出第二代小米手环?
(小米手环心率版)
&&&&纵观2015年华米科技的产品线,主要有4个:一是小米手环系列,包括第一代小米手环,和后来发布的小米手环心率版;二是产品设计偏向时尚的Amazfit;三是小米体重秤;四是华米智芯,现在已经与李宁合作推出智能跑鞋。
&&&&如果你是小米手环的用户,也许会有个疑问,“为什么今年没有看到第二代小米手环?”毕竟小米手环心率版,更接近于第一代小米手环新增心率监测功能的改进版。
&&&&#hc360分页符#
&&&&王辉说,“小米手环二代正在研发中,目前不方便透露太多信息。现在小米手环一代的销量不错,通过产品,我们积累了大量用户数据,研究用户的痛点在哪里。不过,在没有革命性的突破之前,我们希望保留第二代这样的称呼。”
&&&&除了小米手环这一条主线外,其它诸如Amazfit、小米体重秤和华米智芯,王辉都认为是一种“探索”。
&&&&“可穿戴设备最重要的是可穿戴”,王辉说。此前用户反馈和调研当中,华米科技发现许多用户不购买小米手环的原因是,“它和衣服不搭。”所以,今年华米科技在美国设立办公室,找到硅谷的工业设计师来设计新形态的可穿戴设备产品,这就是独立品牌Amazfit的诞生背景。
&&&&“我们会常常思考如何让可穿戴设备更多地进入到普通老百姓的生活中,可搭配是一个很有意义的尝试。”——之前坐飞机出差时,有空姐对王辉手上戴着的Amazfit感兴趣,在聊天时发现她“喜欢Amazfit,但不介意功能”。
&&&&小米体重秤,依然延续华米科技降低用户尝试成本的产品策略,上线之后也很受关注。王辉说,“因为我们做运动类的产品,而秤是非常有关联性的。在日常,人们最容易关心、变化最明显的数据就是体重。我们希望收集更多的健康数据,为用户提供更多服务,所以做了这方面的产品。”
&&&&身份ID、移动支付,是小米手环营销时常提的概念。那么这两方面目前的进展如何,未来又会如何?
&&&&王辉说,“我们专门有一个团队,专注身份ID方面功能的研发。实际上,在我们北京办公室,已经实现许多身份ID的功能,比如员工进入办公室不必打卡,在进入办公室的时候,大门会自动检测小米手环,在识别了一个人的身份后,大门就会自动打开。我们还可以确定一个人在办公室的具体位置,现在可以做到,当感应到某个房间里没人,办公室会自动把灯给关上。”目前,这一套系统,已经提供给部分企业进行试点,但大规模商用,还是要等明年。
&&&&至于移动支付,王辉认为比较敏感,不方便透露太多的信息。
&&&&智能硬件如何运营社区?
&&&&不少智能硬件团队在推出产品之后,往往会在App里添加社交功能,希望可以通过App收集用户数据的同时,沉淀用户关系。华米科技也做了相关方面的尝试——在网站首页,可以看到“米动跑团”的二维码。在微信朋友圈,可以常常看到王辉用“跑的步”作为开头,分享自己的跑步状态,与米动跑团一起做活动的状态。
&&&&那么在社区运营这方面,华米科技是如何考虑的呢?王辉说,“小米手环本身供不应求,从某种程度上看,我们并不需要这样的方式来提升销量。但社区运营对于华米来说是一种新的尝试,我们希望更多的与用户互动,经营用户,沉淀社区文化。”
&&&&对于华米科技内部来说,许多员工都非常喜欢运动,他们会自然而然地去参与到和跑步有关的活动中去。比如王辉在加入华米科技之前,就热爱跑步,只不过这种爱好在华米科技的工作当中得到了延续。
&&&&#hc360分页符#
&&&&组织了多场米动跑团的王辉认为,围绕智能硬件组织社区,现在还没有成功的先例,大家都在摸索的阶段。在他看来,“购买同样设备的人,实际上会有同样的兴趣,那么就会有二级话题的存在,如果运营得好,最后很可能可以沉淀出一个社区。”
&&&&“但是这个社区最后的落地,不一定非要在App内形成强关注。因为我个人觉得,最终是跟用户接触的形式,所以无论是到沉淀到微信群、微博、线下等等,这都是可以的。华米没有把自己定义为卖硬件的,在我们看来,硬件是连接用户和服务的连接点,我们更加关注硬件背后的人,如何传达更多对他来说有意义的服务,增值的东西。这一直是我们关注的重点。”
&&&&华米科技对待用户的态度开放,在组织线下活动中,可以看到戴着其它品牌运动手环的人参与。
&&&&“此外,我们也非常鼓励员工积极运动、健身,参与线下活动。我们认为,他们平时这种激情的状态,可以通过他们编写的程序、微博、微信、朋友圈传达给身边的人。”
&&&&关于未来
(华米科技团队早期合照)
&&&&不久前,华米科技在深圳注册了分公司,现在有10人团队,打算将它打造成新材料、新工艺、新硬件技术的实验室,充分运用深圳地区的优势,去使用最新的技术工艺,并快速地反馈、转移到产品中去。而华米科技的美国分公司,则有工业设计团队,还有来自Google、高通、IBM等研究人员,进行新技术研发方面的探索。现在华米科技已经有260多人。
&&&&王辉说,“一开始没预料到会在美国开分公司,只能说,一切是顺势而为。”
&&&&对于明年可穿戴领域的发展,他认为目前可穿戴环境的成熟是因为供应链、供应商、应用服务供应商今年逐步成熟了起来。未来智能手机所带动供应链技术的进步,影响将进一步辐射到可穿戴领域,更小的芯片、更便宜的价格,进一步激发大家把新技术运用到可穿戴设备上。
&&&&这一切都可能会帮助华米科技更快地实现自己的梦想,“成为领先全球领先可穿戴设备、服务的企业,将人类无感地连入互联网。”
责任编辑:于瑞雪
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
来源:爱范儿小米手环iOS开发实战(二):开发Demo让你的手环振动起来
上一节讲了CoreBluetooth的使用,理论知识很枯燥,那么现在先利用上一节讲的内容,做一个简易手环应用,实现连接/断开手环,查看手环UUID、查看电量信息,并让振动的功能。
本节知识默认大家掌握iOS的基础控件,掌握通过storyboard或代码搭建界面UI,能够利用Swift或Objective-C编写程序。文章会尽量详细讲解这些过程,当然如果你是大牛可以放心跳读。
蓝牙连接所涉及到的类
小米手环Demo应用的开发
一些功能优化
蓝牙连接所涉及到的类
上一节讲了怎么用CoreBluetooth,本节讲一下所涉及到的类,及常用的成员函数和成员变量,其他方法请见苹果开发文档。
CBCentralManager
此类为中心设备类,用于控制作为中心设备时的行为
state:获取当前中心设备状态
isScanning:当前中心设备是否在扫描外围设备
stopScan():停止扫描外围设备
scanForPeripherals(...):扫描外围设备(请确保蓝牙开启)
connect(...):连接外围设备(需要先扫描到外围设备)
cancelPeripheralConnection(...):断开外围设备
CBPeripheral
此类为外围设备类,用于对外围设备进行管理
name:获取外围设备的名称
rssi:获取当前外围设备的信号强度
state:获取外围设备的状态(disconnected/connecting/connected)
★services:获取外围设备所提供的服务(需要先扫描到服务)
discoverServices(...):扫描设备所提供的服务
discoverCharacteristics(...):扫描特征值(需要先获取服务)
readValue(...):读取特征值所对应的值(需要先获取到特征值,同时要注意此方法不反回值,要用协议的didUpdateValueFor characteristic方法处理)
是不是已经懵了?在此做一个图大致描述一下流程,其实这些方法的调用还是很有规律的。
CBCharacteristic
外围设备服务的特征值
★Value:获取特征值对应的值
小米手环Demo应用的开发
本Demo是对上一节所讲CoreBluetooth的操作复习,每个方法的实现已经有所解释,故在此不再赘述。如果有疑问,欢迎在评论区提问及讨论。
该Demo所要实现的功能:练习连接设备、断开设备、读取手环信息、让手环振动。具体涉及到的知识点为连接和断开设备、获取设备服务和特征值、获取特征值对应的信息以及对其写入。
方便起见,该项目直接采用storyboard搭建,如果不会可以看
@IBOutlet weak var scanButton: UIButton!
@IBOutlet weak var stopButton: UIButton!
@IBOutlet weak var vibrateButton: UIButton!
@IBOutlet weak var stopVibrateButton: UIButton!
@IBOutlet weak var loadingInd: UIActivityIndicatorView!
@IBOutlet weak var statusLabel: UILabel!
@IBOutlet weak var resultField: UITextView!
@IBOutlet weak var vibrateLevel: UISegmentedControl!
设置蓝牙操作过程所需对象
涉及到的类在第一讲已经讲解,如果有不明白的,可以查阅前面的讲解。
var theManager: CBCentralManager!
var thePerpher: CBPeripheral!
var theVibrator: CBCharacteristic!
CoreBluetooth协议方法的实现
本部分内容在第一讲已经涉及,如果有不明白的,可以查阅前面的讲解。
override func viewDidLoad() {
super.viewDidLoad()
theManager = CBCentralManager.init(delegate: self as? CBCentralManagerDelegate, queue: nil)
self.scanButton.isEnabled = false
statusLabel.text = ""
loadingInd.isHidden = true
@IBAction func startConnectAction(_ sender: UIButton) {
switch theManager.state {
case .poweredOn:
statusLabel.text = "正在扫描…"
theManager.scanForPeripherals(withServices: nil, options: nil)
self.loadingInd.startAnimating()
self.scanButton.isEnabled = false
self.isDisconnected = false
@IBAction func disconnectAction(_ sender: UIButton) {
if ((thePerpher) != nil) {
theManager.cancelPeripheralConnection(thePerpher)
thePerpher = nil
theVibrator = nil
statusLabel.text = "设备已断开"
scanButton.isEnabled = true
isDisconnected = true
isVibrating = false
@IBAction func vibrateAction(_ sender: Any) {
if ((thePerpher != nil) && (theVibrator != nil)) {
let data: [UInt8] = [UInt8.init(vibrateLevel.selectedSegmentIndex+1)];
let theData: Data = Data.init(bytes: data)
thePerpher.writeValue(theData, for: theVibrator, type: CBCharacteristicWriteType.withoutResponse)
@IBAction func stopVibrateAction(_ sender: UIButton) {
if ((thePerpher != nil) && (theVibrator != nil)) {
let data: [UInt8] = [UInt8.init(0)];
let theData: Data = Data.init(bytes: data)
thePerpher.writeValue(theData, for: theVibrator, type: CBCharacteristicWriteType.withoutResponse)
isVibrating = false
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .poweredOn:
statusLabel.text = "蓝牙已开启"
self.scanButton.isEnabled = true
statusLabel.text = "蓝牙未开启!"
self.loadingInd.stopAnimating()
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
if (peripheral.name?.hasSuffix("MI"))! {
thePerpher = peripheral
central.stopScan()
central.connect(peripheral, options: nil)
statusLabel.text = "搜索成功,开始连接"
resultField.text = String.init(format: "发现手环\n名称:%@\nUUID:%@\n", peripheral.name!, peripheral.identifier.uuidString)
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
statusLabel.text = "连接成功,正在扫描信息..."
peripheral.delegate = self
peripheral.discoverServices(nil)
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
loadingInd.stopAnimating()
statusLabel.text = "连接设备失败"
scanButton.isEnabled = true
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
if ((error) != nil) {
statusLabel.text = "查找服务失败"
loadingInd.stopAnimating()
scanButton.isEnabled = true
for service in peripheral.services! {
peripheral.discoverCharacteristics(nil, for: service)
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
if ((error) != nil) {
statusLabel.text = "查找服务失败"
loadingInd.stopAnimating()
scanButton.isEnabled = true
for characteristic in service.characteristics! {
peripheral.setNotifyValue(true, for: characteristic)
if (characteristic.uuid.uuidString == BATTERY) {
peripheral.readValue(for: characteristic)
else if (characteristic.uuid.uuidString == DEVICE) {
peripheral.readValue(for: characteristic)
else if (characteristic.uuid.uuidString == VIBRATE) {
theVibrator = characteristic
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if ((error) != nil) {
statusLabel.text = "从设备获取值失败"
if(characteristic.uuid.uuidString == BATTERY) {
var batteryBytes = [UInt8](characteristic.value!)
var batteryVal:Int = Int.init(batteryBytes[0])
self.resultField.text = String.init(format: "%@电量:%d%%\n", resultField.text, batteryVal)
loadingInd.stopAnimating()
scanButton.isEnabled = true
statusLabel.text = "信息扫描完成!"
if (isVibrating) {
vibrateAction(Any)
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
statusLabel.text = "设备已断开"
scanButton.isEnabled = true
if(!isDisconnected) {
theManager.scanForPeripherals(withServices: nil, options: nil)
再次重提一下我在解决关于CBCentralManager的State属性遇到的问题:
CBCentralManager的State属性在之前是CBCentralManagerState,但是现在变成了CBManagerState,而后者需要iOS10以上才支持。查了StackoverFlow发现很多人也遇到了同样的问题,也是苹果很矛盾的一个用发。通过测试发现用switch语句对state属性判断可以解决系统版本限制的问题,也是普遍采用的方法。
小米手环振动的UUID是2A06,0代表不振,1为短振,2为长振。
其他UUID也均有相关文章有写,太多就不一一列举,可以直接Google之。如果需要的人比较多,我可以稍后撰写一份对照表。
接下来,部署-&调试即可。功能运行正常。
一些功能改进
前一部分改进已经放到了上述代码中,若后期有改进将更新此处。
至此已经完成了对第一讲知识的复习,接下来我们将讲解对小米手环其他功能的开发。最终截稿时完成仿小米手环APP,并实现各种创意功能。
PS:现在开发小米手环可能都是出于情怀了吧?还有没有必要继续做下去呢。如果想要二次开发的人比较多,可以尝试做一套SDK方便开发。
写文章不易,如果觉得满意,欢迎大家粉一下我的GitHub,以及动动手指Star一下我的项目,持续更新需要你的支持!
本人GitHub:
本项目链接:
“小米手环iOS开发实战”系列
蓝牙运动手环app开发方案
蓝牙学习之①:调戏小米手环
小米手环3正式官宣!
小米手环iOS开发实战(一):iOS蓝牙框架CoreBluetooth
iOS蓝牙传输数据演示-3
iOS开发—蓝牙4.0(BLE)与外设连接及收发数据的流程
没有更多推荐了,155 条评论分享收藏感谢收起小米手环今天通过官方微博发布消息,小米手环iOS版正式上架APP Store,使用iPhone手机的同学们可以自行下载体验了。小米手环iOS版App具备计步、睡眠分析、智能闹钟等功能,随后的版本将很快支持来电提醒以及苹果Healthkit功能。另外还可以通过微信、QQ或微博分享数据。目前小米手环能够支持苹果手机的型号包括:iPhone4S/5/5C/5S,以及苹果最新的iPhone 6/6 Plus机型。
APP下载地址: https://itunes.apple.com/cn/app/xiao-mi-shou-huan/id}

我要回帖

更多关于 小米手环睡眠编辑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信