HomeKit 開發(fā)教程(基礎(chǔ)篇)

前言

最近剛剛弄完HomeKit項目磷雇,寫個教程當做個筆記羔砾。之前沒有接觸個HomeKit魄幕,剛開始的時候一臉的蒙蔽相艇,200多頁的英文協(xié)議,看了一下目錄瞬間就關(guān)上了纯陨,然后上網(wǎng)找一些相關(guān)的文檔坛芽,不過基本上都是官方提供的開發(fā)指南留储,其實文檔說的還蠻清楚的,但是對與沒有接觸HomeKit的來說還是不知道如何下手咙轩。下面我就簡單寫寫一些主要功能怎么用获讳。
HomeKit開發(fā)指南:開發(fā)指南(中文版)

正文

對于如何集成HomeKit,官方文檔說的很清楚活喊,我就不在多說了丐膝。
對于HomeKit是什么以及感念之類的你都可以參考他的開發(fā)指南。
普通的HomeKit基本包含幾個概念钾菊,home (家庭)帅矗,room(房間) ,zone(控件煞烫,可以沒有)浑此,accessory(配件),service(服務(wù))滞详,characteristic(特性)這幾類凛俱,他們之間是從大到小的包含關(guān)系。

1.homeManager(房間管理)

HomeKit會有一個或者多個家庭料饥,但是最少是一個蒲犬。我們要怎么管理或者創(chuàng)建家庭呢。

homeManager創(chuàng)建的時候岸啡,HomeKit就開始從HomeKit數(shù)據(jù)庫獲取這些homes和相關(guān)對象原叮。
然后實現(xiàn)代理方法

當你的房間發(fā)生變化的時候會走這些代理方法。不要忘記導(dǎo)入頭文件凰狞,和在.h中加入<HomeManagerDelegate>
這樣我們就可以用homeManager來管理我們的房間了篇裁。那么如何來操作房間呢,
這個homeManager有幾個屬性赡若,primaryHome达布,和homes
<pre>
HMHome *home = homeManager.primaryHome; //拿到你的主家庭NSArray *homeArray = homeManger.homes; //獲取到所有的家庭
</pre>
對于家庭的一些操作,homeManager 的一些方法

- (void)updatePrimaryHome:(HMHome *)home completionHandler:(void (^)(NSError * __nullable error))completion    //修改為主家庭
- (void)addHomeWithName:(NSString *)homeName completionHandler:(void (^)(HMHome * __nullable home, NSError * __nullable error))completion   //新增家庭
- (void)removeHome:(HMHome *)home completionHandler:(void (^)(NSError * __nullable error))completion   //刪除家庭

以修改為主家庭為例說一說,主家庭的意思是逾冬,你當前要管理的家庭黍聂,你只能管理你當前家庭內(nèi)的房間或者配件,若你想管理其他家庭身腻,那你從homeArray中拿出一個家庭产还,調(diào)用上面方法就OK了。新增跟刪除我猜你們已經(jīng)會了嘀趟,我就不再都說了脐区。

2.home(家庭)

home就是從homeManager拿出來的一個家庭,然后拿著這個home搞一些事情她按,home中有太多的事情可以搞了牛隅,比如說在這個home中添加一個房間炕柔,或者配件呀,給房間改個名字呀媒佣,看看這個home有多少個房間或者配件呀匕累,等等。太多了默伍,我就不挨個說了欢嘿,如果你真想知道我告訴你個辦法,在你的項目中按住command 然后鼠標點一下HMHome也糊,你就知道了炼蹦,是不是很簡單,home(家庭)有了显设,就要給這個home加配件(accessory)了框弛。

3.accessory(配件)

這個配件就稍微麻煩一點點,加入配件你得先能找得到配件捕捂,若何發(fā)現(xiàn)配件。
創(chuàng)建HMAccessoryBrowser對象

HMAccessoryBrowser *accessoryBrowser = [[HMAccessoryBrowser alloc] init] ;
accessoryBrowser.delegate = self;

然后實現(xiàn)代理方法斗搞,實現(xiàn)哪些代理方法自己去HMAccessoryBrowser里面看一看

[accessoryBrowser startSearchingForNewAccessories];  //開始搜索配件
[accessoryBrowser stopSearchingForNewAccessories];  //結(jié)束搜索配件

當有配件被發(fā)現(xiàn)的時候會走didFindNewAccessory代理方法指攒,然后你只需要

NSArray *accessoryArray = accessoryBrowser.discoveredAccessories;    //拿出已經(jīng)找到的配件

從發(fā)現(xiàn)的配件數(shù)組總拿出一個 HMAccessory *accessory,然后調(diào)用

[homeManager.primaryHome addAccessory:accessory completionHandler:^(NSError *error) {}];    //添加配件

走這段代碼的時候僻焚,會自動跳到HomeKit提供的界面允悦,他會幫你處理掃描密碼和配對過程,這樣就把配件加入到房間中虑啤。這里有一點要說明一下隙弛,配件實際是應(yīng)該加入到room中的,如果你還沒有創(chuàng)建room狞山,那會自動把配件加入到默認room中全闷,怎么創(chuàng)建room呢,我就不說了萍启,就是用HMHome的對象 addRoom...什么什么的我有點記不清了总珠,移除removeRoom...什么什么的,房間我就不多少了勘纯,accessory(配件)或者房間(home)添加成功后他會通知代理局服,你就可以刷新界面了,就是這么簡單驳遵。如果你的添加或者刪除操作失敗了會返回給你個error淫奔,這個error你可以參照HMError來看一下是什么導(dǎo)致的錯誤。
在accessory的對象中你就可以獲取到配件中的services(服務(wù))堤结,name唆迁,是否在線佳鳖,UUID,在哪個room下媒惕,還有一些屬性和代理方法去看看他自己的接口系吩。

4.service(服務(wù))

服務(wù)就是你這個配件中都有哪些服務(wù),說白了就是對這個配件功能的分類妒蔚,服務(wù)是分類型的穿挨,當你添加完配件之后,里面肯定有至少服務(wù)肴盏,這個服務(wù)里面放著你的配件的基本信息科盛,這些是必須有的,要是沒有的話你的配件是添加不上的菜皂,所以這點不是ios程序員該關(guān)心的贞绵,我們關(guān)心的是有哪些服務(wù),服務(wù)里面有哪些characteristic(特性)恍飘。強調(diào)一點每個服務(wù)都是分類型的榨崩,

NSArray *serviceArray = accessory.services;    //獲取服務(wù)數(shù)組

你要獲取拿到哪一個服務(wù)可以根據(jù)類型來判斷。服務(wù)只可以修改名字和類型的方法 章母,屬性有很多母蛛,不過我只用到了name(名字),characteristics(特性數(shù)組)乳怎,associatedServiceType(類型)彩郊,其他的看看接口吧,說的還是蠻詳細的蚪缀。

5.characteristic(特性)

特性就是你的這個配件的信息和操作了秫逝。特性也有多類型,比如開關(guān)類型询枚;brightness(調(diào)光)违帆,還可以自定義類型,類型使用UUID來區(qū)分哩盲,自定義的類型用UUID是不一樣前方,不是自定義的類型UUID是固定的,沒了特性都會有value廉油。你可以characteristic.value 看的到惠险,每種特性還會分為,只讀抒线,只寫班巩,讀寫,可以寫的是可以通過

[characteristic writeValue:tagetValue completionHandler:^(NSError *error)
{  //code
}];

來修改這個特性的value值,達到控制設(shè)備的操作抱慌。
6.user(用戶)
每個創(chuàng)建home的用戶都是這個home的管理者逊桦,你可以邀請其他人到你的家來。同樣你也可以刪掉抑进。除了管理者這之外的人强经,不可以改變home的格局,但是可以識別智能電器寺渗、讀寫特性匿情、觀察特性值變化、執(zhí)行動作集信殊。
在ios9以后炬称,只需要調(diào)用

[home manageUsersWithCompletionHandler:^(NSError * _Nullable error) {
}];

HomeKit會幫你管理你的user;不過在9之前涡拘,添加玲躯,刪除用戶是分開管理的,例如添加

[self.home addUserWithCompletionHandler:^(HMUser *user, NSError *error) {
}];

HomeKit數(shù)據(jù)庫

每個Home都有一個HomeKit數(shù)據(jù)庫鳄乏。如下圖所示跷车,HomeKit數(shù)據(jù)庫會安全地和home授權(quán)的用戶的iOS設(shè)備以及潛在的客人的iOS設(shè)備進行同步。為了給用戶展示當前最新的數(shù)據(jù)汞窗,你的應(yīng)用需要觀察HomeKit數(shù)據(jù)庫的變化姓赤。

關(guān)于數(shù)據(jù)庫,看明白這個圖就可以了仲吏。

總結(jié)

基本的東西大概就這么多了,其他的多參照開發(fā)指南和HomeKit接口蝌焚,最后寫幾點總結(jié)
1.一定要搞明白HomeKit整個過程是怎么回事裹唆,一旦清楚,真是得心應(yīng)手只洒,你想要什么许帐,你想做什么操作,直接用就OK毕谴,都是現(xiàn)成的接口屬性成畦,對于初學(xué)者來說,一定要多看幾遍開發(fā)指南涝开,不要感覺看兩遍你就知道怎么回事循帐,里面涵蓋太多的東西了,當你屢不清了舀武,你就看一遍肯定會有新的收獲拄养。
2.在你開發(fā)的時候遇到錯誤的時候,你可以看看HomeKit的那個200多頁的英文協(xié)議银舱,你要是有時間的換從頭到尾看一遍瘪匿,沒時間的話就當個字典用就OK跛梗,他把每個屬性的要求說的很清楚。錯誤不一定是咱們代碼的事棋弥,可能是設(shè)備的某個特性沒有遵守協(xié)議的規(guī)則造成的核偿,不過你自己要準確的定位錯誤再下結(jié)論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顽染,一起剝皮案震驚了整個濱河市漾岳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌家乘,老刑警劉巖蝗羊,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異仁锯,居然都是意外死亡耀找,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門业崖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來野芒,“玉大人,你說我怎么就攤上這事双炕∧” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵妇斤,是天一觀的道長摇锋。 經(jīng)常有香客問我,道長站超,這世上最難降的妖魔是什么荸恕? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮死相,結(jié)果婚禮上融求,老公的妹妹穿的比我還像新娘。我一直安慰自己算撮,他們只是感情好生宛,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肮柜,像睡著了一般陷舅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上素挽,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天蔑赘,我揣著相機與錄音,去河邊找鬼。 笑死缩赛,一個胖子當著我的面吹牛耙箍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酥馍,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼辩昆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了旨袒?” 一聲冷哼從身側(cè)響起汁针,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砚尽,沒想到半個月后施无,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡必孤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年猾骡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敷搪。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡兴想,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡勘,到底是詐尸還是另有隱情嫂便,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布闸与,位于F島的核電站毙替,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏践樱。R本人自食惡果不足惜蔚龙,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望映胁。 院中可真熱鬧,春花似錦甲雅、人聲如沸解孙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弛姜。三九已至,卻和暖如春妖枚,著一層夾襖步出監(jiān)牢的瞬間廷臼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠商,地道東北人寂恬。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像莱没,于是被迫代替她去往敵國和親初肉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文由CocoaChina翻譯組成員iBenjamin_Go和淺夏@舊時光翻譯自蘋果開發(fā)文檔:HomeKit De...
    涅槃簡書閱讀 5,277評論 6 15
  • 本文轉(zhuǎn)載xianghuibeijingCSDN 轉(zhuǎn)載過程中部分內(nèi)可能丟失饰躲!請參考原作者:http://blog....
    大熊Q閱讀 3,021評論 0 12
  • 簡介 簡介1> HomeKit庫是用來溝通和控制家庭自動化配件的牙咏,這些家庭自動化配件都支持蘋果的HomeKit A...
    Rui哥閱讀 2,006評論 0 0
  • 一,我回來了 我隔著玻璃看那個像落葉一樣干枯的快要飄零的老人嘹裂。他帶著幫助肺部運作的儀器妄壶,呼吸的氧氣罩下我看不清他的...
    姜魚蝦閱讀 611評論 0 5
  • 一天,雞窩里寄狼。母雞大聲的在罵小雞:“你這個笨東西丁寄,我在教你咯咯咯,你偏要叫嘰嘰嘰例嘱〗品辏” 路過的山羊聽到了,覺得真好笑...
    三生三世荷花子閱讀 646評論 2 7