2014-10-21 2 views
0

Я просто пытаюсь получить очень простой POC моего мультиплатформенного приложения, находя ibeacons в кроссплатформенном решении xamarin. У меня есть андроидная сторона вещей, но я просто сталкиваюсь с проблемами со стороны iOS.Xamarin Estimote не находит маяки для iOS

Я получил следующий изрубил код в классе AppDelegate (это только первый гадости вокруг с этим, я понимаю, это не будет, где он должен находиться):

[Register("AppDelegate")] 
public partial class AppDelegate : UIApplicationDelegate 
{ 
    UIWindow window; 

    static readonly string uuid = "B9407F30-F5F8-466E-AFF9-25556B57FE6D"; 
    static readonly string monkeyId = "Monkey"; 

    CBPeripheralManager peripheralMgr; 
    BTPeripheralDelegate peripheralDelegate; 
    CLLocationManager locationMgr; 

    public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
    { 
     window = new UIWindow(UIScreen.MainScreen.Bounds); 

     myAppManagerApp.Init(typeof(myAppManagerApp).Assembly); 
     Forms.Init(); 
     // FormsMaps.Init();    

     UINavigationBar.Appearance.BackgroundColor = UIColor.FromRGBA(0, 0, 0, 0); 
     UINavigationBar.Appearance.TintColor = UIColor.Blue;   
     UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes() 
     { 
      TextColor = UIColor.White 
     }); 

     window.RootViewController = BuildView(); 
     window.MakeKeyAndVisible(); 

     var monkeyUUID = new NSUuid(uuid); 
     var beaconRegion = new CLBeaconRegion(monkeyUUID, monkeyId); 
     //power - the received signal strength indicator (RSSI) value (measured in decibels) of the beacon from one meter away 
     var power = new NSNumber(-59); 
     NSMutableDictionary peripheralData = beaconRegion.GetPeripheralData(power); 
     peripheralDelegate = new BTPeripheralDelegate(); 
     peripheralMgr = new CBPeripheralManager(peripheralDelegate, DispatchQueue.DefaultGlobalQueue); 
     peripheralMgr.StartAdvertising(peripheralData); 

     locationMgr = new CLLocationManager(); 
     locationMgr.RegionEntered += (object sender, CLRegionEventArgs e) => 
     { 
      if (e.Region.Identifier == monkeyId) 
      { 
       var notification = new UILocalNotification() { AlertBody = "There's a monkey hiding nearby!" }; 
       UIApplication.SharedApplication.PresentLocationNotificationNow(notification); 
      } 
     }; 

     locationMgr.DidStartMonitoringForRegion += locationMgr_DidStartMonitoringForRegion; 
     locationMgr.MonitoringFailed += locationMgr_MonitoringFailed; 

     locationMgr.StartMonitoring(beaconRegion); 
     locationMgr.StartRangingBeacons(beaconRegion); 

     locationMgr.DidRangeBeacons +=locationMgr_DidRangeBeacons; 

     return true; 
    } 

    private void locationMgr_DidRangeBeacons(object sender, CLRegionBeaconsRangedEventArgs e) 
    { 
      throw new NotImplementedException(); 
    } 

    private void locationMgr_MonitoringFailed(object sender, CLRegionErrorEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

    private void locationMgr_DidStartMonitoringForRegion(object sender, CLRegionEventArgs e) 
    { 
     int i = 0; 
     //throw new NotImplementedException(); 
    } 

    static UIViewController BuildView() 
    { 
     var root = new pgeRoot(); 
     var controller = root.CreateViewController(); 
     return controller; 
    } 

Ive нарезанного большую часть код из образца Find the monkey. В любом случае события DidRangeBeacons или RegionEntered никогда не срабатывают. Я использую оценочные iBeacons, поэтому я не знаю, имеет ли это значение?

Любые идеи о том, что здесь отсутствует? Есть ли разрешение или настройка, которые мне нужно ввести в plist?

Благодаря

+0

Какое оборудование и версия iOS вы используете? – Paulw11

ответ

2

В прошивкой 8 вы должны явно попросить разрешения на использование Location Services - это CLLocationManager «s RequestAlwaysAuthorization (для контроля) и RequestWhenInUseAuthorization (для ранжирования) методы. Вам также нужна соответствующая запись (и NSLocationWhenInUseUsageDescription) в файле Info.plist вашего приложения iOS, хотя я не совсем уверен, как это сделать в Xamarin.

+0

«как это сделать в Xamarin»: вы можете отредактировать Info.plist текстовым редактором и добавить необходимые строки, как описано [здесь] (http://xforms-kickstarter.com/#geolocation-using-xamarin.mobile). – Falko

Смежные вопросы