2015-04-08 74 views
1

我已經使用信標創建了一個應用程序,並且我已經在應用程序本身中配置了它們的UUID,主要值,並且一切正常。它也在做背景監測。如何從服務器添加信標到應用程序

一旦該應用程序的信標範圍,應用程序正在使用Web服務向服務器發送信標UUID,主要,次要和鄰近級別信息,並作爲響應獲取產品詳細信息以顯示給用戶。

但我的問題是如何從Web服務添加信標詳細信息。因此,我不需要每次在商店中添加新的燈塔時,都會在應用商店中更新我的應用。

如果信標詳情不在應用程序中,如何完成後臺監控?每當應用打開時,我們是否需要調用Beacon詳細信息Web服務?

我不知道如何實現這一點。我是新來的燈塔功能。

這是我本次代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    NSUUID *beaconUUID1 = [[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"]; 

    CLBeaconRegion *beaconRegion1 = [[CLBeaconRegion alloc] initWithProximityUUID:beaconUUID1 major:2 identifier:@"Identifier1"]; 
    CLBeaconRegion *beaconRegion2 = [[CLBeaconRegion alloc] initWithProximityUUID:beaconUUID1 major:3 identifier:@"Identifier2"]; 

    switch ([CLLocationManager authorizationStatus]) { 
     case kCLAuthorizationStatusAuthorizedAlways: 
      NSLog(@"Authorized Always"); 
      break; 
     case kCLAuthorizationStatusAuthorizedWhenInUse: 
      NSLog(@"Authorized when in use"); 
      break; 
     case kCLAuthorizationStatusDenied: 
      NSLog(@"Denied"); 
      break; 
     case kCLAuthorizationStatusNotDetermined: 
      NSLog(@"Not determined"); 
      break; 
     case kCLAuthorizationStatusRestricted: 
      NSLog(@"Restricted"); 
      break;   
     default: 
      break; 
    } 

    self.locationManager = [[CLLocationManager alloc] init]; 
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [self.locationManager requestAlwaysAuthorization]; 
    } 

    self.locationManager.delegate = self; 
    self.locationManager.pausesLocationUpdatesAutomatically = NO; 

    [self.locationManager startMonitoringForRegion:beaconRegion1]; 
    [self.locationManager startRangingBeaconsInRegion:beaconRegion1]; 

    [self.locationManager startMonitoringForRegion:beaconRegion2]; 
    [self.locationManager startRangingBeaconsInRegion:beaconRegion2]; 

    [self.locationManager startUpdatingLocation]; 

    CBCentralManager* testBluetooth = [[CBCentralManager alloc] initWithDelegate:nil queue: nil]; 

} 

更多信息: - 我使用Estimote信標,但不是他們的SDK。我正在使用唯一核心位置框架。

任何人都可以清楚地瞭解如何從服務器實現動態信標詳細信息嗎?

+2

從服務器下載信標信息,然後在下載完成後開始區域監控...或者您的意思是什麼? – thorb65

+2

你不需要在'didFinishLaunchingWithOptions'方法中做到這一點,你可以在任何你想要的地方做到這一點。因此,您可以下載信標信息,並在擁有所有信標時開始監控。 – redent84

+0

謝謝你們。我會嘗試你的解決方案。早些時候,我想我只能在didFinishLaunchingWithOptions中這樣做,但現在我會用不同的方法編寫代碼。 –

回答

3

如果您想在此做你自己,這裏的基本步驟:

  1. 進行異步調用Web服務在您設置任何標監測didFinishLaunchingWithOptions之前從服務器讀取配置信息。

  2. 當您從Web服務獲得成功回調時,解析響應,根據返回結果設置您的CLBeaconRegions,並開始監視和測距。

  3. (可選)您可能希望實現這些區域的持久性存儲(例如sharedPreferences),並將它們存儲在成功的Web服務調用之後。這樣,如果您在聯繫Web服務時遇到問題,您可以簡單地從永久性存儲中加載區域並使用最後一次已知的副本。

我公司有一個名爲ProximityKit產品,所有這一切爲你(及以上),所以如果你有興趣使用的框架,它可能比滾動自己更容易。

+0

感謝@davidgyoung ...爲解決方案...我會盡力。 –

+0

謝謝@davidgyoung。它喚醒了。 –

+0

爲什麼不從服務器發送推送通知到應用程序? – Shajo

相關問題