2013-12-08 47 views
2

因此,我們正試圖將iBeacons的情景放在一起,我認爲我們陷入了背景測距與監控之間的差異,現在我不確定我們想要什麼要做就有可能。iBeacon百貨商場情景 - 測距與監控

我們有500個商店,我們想要部署iBeacons。信標的目的是通過通知和優惠券(有時)迎接客戶。我們想要做的是使用單一的UUID,主要是商店號碼,次要的是商店的類型(普通商店與孩子們,一家兒童商店可以連接到普通商店)。理想情況下,一旦找到帶有我們UUID的iBeacon,我們希望我們的應用程序從我們的網站上獲取特定於主號碼(商店號碼)的XML文件,顯示通知歡迎信息(可能陳述'我們爲您提供優惠券'取決於xml文件的說明),並將xml文件數據保存到應用程序,以便用戶可以在打開應用程序時檢索優惠券。這一切似乎都可能在前臺應用程序中,但我們似乎很難讓它在後臺工作。我所描述的是否可能,我應該想出一個不同的方式來做到這一點?

謝謝

回答

2

是的,你可以這樣做。訣竅是你需要同時結合測距和監測。需要進行監控才能將您的應用程序啓動到後臺。需要測距才能獲得您所看到的信標的特定ID。

設置它是這樣的:

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"blah"]; 
region.notifyOnEntry = YES; 
[self.locationManager startMonitoringForRegion:region]; 
[self.locationManager startRangingBeaconsInRegion:region]; 

一旦發生這種情況,應用程序進入前回去睡覺了,這方法會每秒調用一次,你會得到範圍約五秒鐘回調:謹慎的

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 
    if (!_firstOneSeen) { 
     _firstOneSeen = true; 
     // Do something with beacons array here. read out the major/minor and get the 
     // notification message from your XML web service     
    } 
} 

有兩點需要注意:

  1. 監測iBeacon顯示背景中的區域可能有點棘手,並且可能需要比您想象的回調時間更長的時間。看到這個detailed discussion.

  2. 從應用程序被喚醒直到它重新進入睡眠狀態,您只有五秒鐘時間,因此您的網站會更快地做出響應。一個可以跨網絡丟失工作的更安全的想法是預先獲取XML並將其緩存到應用程序中,以便即使存在網絡丟失也可以繼續使用。

我公司,方圓網絡使圖書館和網絡服務,稱爲ProximityKit做這個工作的前期,你可以使用Web瀏覽器配置特定的信標鍵/值對的緩存。這樣,您就不必親自編寫Web服務。

+0

大衛,我想知道的一件事:你可以監視信標,然後在你的didEnterRegion方法開始測距?當didEnterRegion在後臺被觸發時,你仍然可以接聽電話嗎?我沒有嘗試過,並想知道它是否會起作用。 –

+1

我還沒有嘗試過,但我的猜測是它會起作用。這種方法的缺點是你會丟失一秒鐘的後臺處理時間。此外,它會從剛開始測距起到類似的效果,因爲在四秒鐘內,您的應用將會在背景中放入睡眠狀態。從一開始就沒有理由不啓用Ranging - 它不會在後臺更頻繁地發生掃描,所以它不會對電池產生影響。 – davidgyoung

+0

這很棒。感謝大衛對你的幫助! – causerie