HomeKit 允許用戶創(chuàng)建一個(gè)或者多個(gè) Home 布局。每個(gè) Home(HMHome)代表一個(gè)有網(wǎng)絡(luò)設(shè)備的住所。用戶擁有Home的數(shù)據(jù)并可通過(guò)自己的任何一臺(tái) iOS 設(shè)備進(jìn)行訪問(wèn)。用戶也可以和客戶共享一個(gè) Home,但是客戶的權(quán)限會(huì)有更多限制。被指定為 primary home 的 home 默認(rèn)是 Siri 指令的對(duì)象,并且不能指定 Home。
每個(gè) Home 一般有多個(gè) room,并且每個(gè) room 一般會(huì)有多個(gè)智能配件。在 Home(HMHome) 中,每個(gè)房間是獨(dú)立的 room,并具有一個(gè)有意義的名字,例如“臥室”或者“廚房”,這些名字可以在 Siri 命令中使用。一個(gè) accessory(HMAccessory)代表實(shí)際家庭中的自動(dòng)化設(shè)備,例如車庫(kù)開門器。一個(gè) sevice(HMService)是 accessory 提供的?種實(shí)際服務(wù),例如打開或者關(guān)閉車庫(kù),或者車庫(kù)上的燈。
如果你的 App 緩存了 Home 布局的信息,那么當(dāng)其布局發(fā)聲改變的時(shí)候,App 就需要更新這些信息。使用 HMHomeManager 對(duì)象可以從 HomeKit 數(shù)據(jù)庫(kù)獲取 HMHome 和其他相關(guān)的對(duì)象。本章描述的 API 獲取對(duì)象后,你應(yīng)該通過(guò)代理回調(diào)函數(shù)保持獲取對(duì)象和 HomeKit 數(shù)據(jù)庫(kù)同步,具體描述請(qǐng)參看“Observing HomeKit Database Changes"。
使用 Home Manager—一個(gè) HMHomeManager 對(duì)象的訪問(wèn) home、room、配件、服務(wù)以及其他 HomeKit 對(duì)象。在創(chuàng)建家庭對(duì)象管理器(home manager)之后,直接設(shè)置它的代理,以便獲取到這些對(duì)象之后及時(shí)的通知到你。
self.homeManager = [[HMHomeManager alloc] init];
self.homeManager.delegate = self;
當(dāng)你創(chuàng)建一個(gè) home manager 對(duì)象時(shí),HomeKit 就開始從 HomeKit 數(shù)據(jù)庫(kù)獲取這些 homes 和相關(guān)對(duì)象,例如 room 和 accessory 對(duì)象。當(dāng) HomeKit 正在獲取那些對(duì)象時(shí),home manager 的 primaryHome 屬性是 nil,并且 homes 屬性是個(gè)空數(shù)組。你的 App 應(yīng)該處理用戶還沒有完成創(chuàng)建 home 的情況,但是 App 應(yīng)該等待直到 HomeKit 完成初始化。當(dāng)獲取對(duì)象完成之后,HomeKit 會(huì)發(fā)送 homeManagerDidUpdateHomes:消息給 home manager 的代理。
注意:當(dāng) App 進(jìn)入前臺(tái)或者在后臺(tái) Home manager 屬性發(fā)生改變時(shí),這個(gè) homeManagerDidUpdateHomes:方法就會(huì)被調(diào)用,詳情請(qǐng)參閱“Observing Changes to the Collection of Homes”。
通過(guò) home manager 的 primaryHome 屬性,可以得到 primary home,代碼如下:
HMHome *home = self.homeManager.primaryHome;
使用 home manager 的 homes 屬性可以得到用戶的所有 home 的集合;例如自家主要居所、度假別墅以及辦公室。每個(gè) home 都對(duì)應(yīng)一個(gè)獨(dú)立的 home 對(duì)象。
HMHome *home;
for(home in self.homeManager.homes ){
…}
在一個(gè) home 中,rooms 屬性定義 accessories 的物理位置。用 home 的 rooms 屬性可以枚舉 home 中的所 room。
HMHome *home = self.homeManager.primaryHome;
HMRome *room;
for(room in home.rooms){
…
}
Accessories 數(shù)組屬于 home,但是被指定給了 home 中的 room。假如用戶沒有給一個(gè) accessory 指定 room,那么這個(gè) accessories 被指定一個(gè)默認(rèn)的 room ,這個(gè) room 是 roomForEntireHome 方法的返回值。用 room 的 accessories 屬性可以枚舉 room 中所有的 accessory。代碼如下:
HMAccessory *accessory;
for(accessory in room.accessories){
…
}
如果你要展示一個(gè)個(gè) accessory 的相關(guān)信息或者允許用戶控制它,可設(shè)置 accessory 的代理方法并實(shí)現(xiàn)這個(gè)代理方法,詳情請(qǐng)見“Observing Changes to Accessories”。
一旦你獲取到一個(gè) accessory 對(duì)象,你就可以訪問(wèn)它的服務(wù)和對(duì)象,詳情請(qǐng)參閱“Accessing Services and Characteristics”。
更多建議: