前言
最近剛剛弄完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é)論。