@end
與之前一樣渴析,你需要初始化位置管理器并設(shè)置它們的 delegate 牌柄。
在 application:didFinishLaunchingWithOptions: 的頂部添加如下語句:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
乍一看咏花,這好像有些太簡單了密强。當(dāng)你的應(yīng)用加載時(shí)前酿,新分配的 CLLocationManager 實(shí)例有什么用贼急?它又如何知道要監(jiān)視的區(qū)域茅茂?
回想到在你的應(yīng)用中任何你使用 startMonitoringForRegion: 添加的監(jiān)視區(qū)域都被所有的位置管理器共享。所以你免費(fèi)得到的一點(diǎn)持久化太抓,實(shí)在是極有幫助空闲。
若沒有這個(gè)功能,就將由你來找出哪些區(qū)域正在被監(jiān)視并在應(yīng)用加載時(shí)重新開始監(jiān)視它們腻异。但就算這樣也不夠进副,因?yàn)槟愕膽?yīng)用還不知道在遇到某個(gè)區(qū)域時(shí)就醒過來。
感謝 Apple 在 Core Location 中已經(jīng)為你做了許多繁重的工作悔常。這里的最后一步只是簡單地在 Core Location 遇到某個(gè)區(qū)域并喚醒你的應(yīng)用時(shí)做出響應(yīng)即可影斑。
添加如下方法到 RWTAppDelegate.m 地底部:
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
if ([region isKindOfClass:[CLBeaconRegion class]]) {
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Are you forgetting something?";
notification.soundName = @"Default";
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}
}
你的位置管理器將在你離開某個(gè)區(qū)域時(shí)調(diào)用上面的方法,這就是這個(gè)應(yīng)用有用的時(shí)刻机打。你不需要在你接近你的電腦包時(shí)被告知矫户,只需在你離開它太遠(yuǎn)時(shí)通知你。
此處你檢查區(qū)域是否是一個(gè) CLBeaconRegion 残邀,因?yàn)槿绻阃瑫r(shí)也在執(zhí)行地理定位區(qū)域監(jiān)視的話皆辽,它還可能是一個(gè) CLCircularRegion 。然后你就發(fā)送一個(gè)本地通知芥挣,附帶一個(gè)消息“Are you forgetting something?” 驱闷。
編譯并運(yùn)行你的應(yīng)用;離開某個(gè)你的注冊(cè)的 iBeacon空免,然后一旦你離開得足夠遠(yuǎn)空另,你就會(huì)看到通知彈出來。
ForgetMeNot-notification
如果你實(shí)際上不可能離開你的 iBeacon 太遠(yuǎn)(譯者注:房間太刑Q狻扼菠?)摄杂,那就將它的電源關(guān)掉或者移除它的電池以便測試這個(gè)功能。
注意:最后關(guān)于 iBeacon 和 iOS 行為的記錄:
iOS 7.1 添加了當(dāng)它遇到被監(jiān)視的 iBeacon 時(shí)從后臺(tái)喚醒應(yīng)用的能力循榆。之前析恢,用戶需要打開應(yīng)用以響應(yīng)通知,但現(xiàn)在全都免費(fèi)工作了秧饮!
Apple 以未文檔化的方式推遲“退出通知(exit notifications)”映挂。這可能是特別設(shè)計(jì)的,以便你的應(yīng)用不會(huì)過早收到通知浦楣,比如你在某個(gè)范圍的邊緣游蕩或者這個(gè) iBeacon 的信號(hào)暫時(shí)中斷袖肥。在我的經(jīng)驗(yàn)里咪辱,“退出通知”通常在某個(gè) iBeacon 離開范圍的一到兩分鐘之后才發(fā)生振劳。
譯者注:這是不是也太遲了?
下一步怎么走油狂?
現(xiàn)在你有一個(gè)有用的應(yīng)用幫你監(jiān)視那些你很難找到和監(jiān)控的事物历恐。
你可以在此下載最終的項(xiàng)目。
用一些想像力和編碼能力专筷,你給此應(yīng)用帶來了許多真正有用的特性:
當(dāng)條目離開區(qū)域時(shí)通知用戶
重復(fù)通知確保用戶看到
在 iBeacon 回到區(qū)域時(shí)提示用戶
……或者其它任何你能想像到的事
這個(gè) iBeacon 教程只是碰到 iBeacon 的可能性的一點(diǎn)皮毛而已弱贼。在本教程的開頭,我提供了一些文章鏈接顯示職業(yè)棒球大聯(lián)盟和商場正在如何以非常參與的方式(in very engaging ways)使用著 iBeacon 磷蛹。
iBeacon 并不局限于自定義應(yīng)用吮旅;你也可以將它們與 Passbook 的通行證一起使用。試想一下味咳,當(dāng)你跑進(jìn)電影院庇勃;你就能用 Passbook 得到電影票。當(dāng)顧客走近驗(yàn)票人員時(shí)槽驶,他們的應(yīng)用將自動(dòng)在 iPhone 上顯示票據(jù)责嚷。
如果你有關(guān)于本教程的任何問題或評(píng)論,或著任何使用 iBeacon 的新點(diǎn)子掂铐,歡迎加入下面的討論罕拂!