(Obj-C & Unity) Приложение не получает обратный вызов didFinishLaunchingWIthOptions при использовании CoreLocation - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь написать плагин IOS для существующего приложения Unity с целью C. Мне удалось заставить его работать, когда приложение находится на переднем плане и в фоне, но когда приложение закрывается, оно не будетразбудить приложение, когда происходит изменение местоположения.Я настраиваю службу в моем методе настройки:

-(void)setup
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
    locationManager.allowsBackgroundLocationUpdates = YES;

    if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
         [locationManager requestAlwaysAuthorization];
    }

    NSLog(@"LocationManager initalised..");

}

Затем у меня есть следующие переопределения делегатов, которые используют переопределение, которое Unity предоставляет для доступа к этим функциям:

- (void)applicationDidEnterBackground: (UIApplication*)application
{
    isFromBackground = @"background";

    [locationManager startMonitoringSignificantLocationChanges];

    return [super applicationDidEnterBackground:application];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    isFromBackground = @"terminated";

    [locationManager startMonitoringSignificantLocationChanges];

    return [super applicationWillTerminate:application];
}

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])
    {
        isFromBackground = @"terminated";

        //we launched from a location update
        //stop previous location updates
        [locationManager stopUpdatingLocation];
        [locationManager stopMonitoringSignificantLocationChanges];

        //create new location manager (and a new instance if we need to)
        [_sharedInstance setup];

        //start significant updates again
        [locationManager startMonitoringSignificantLocationChanges];
        [locationManager startUpdatingLocation];
    }
    else
    {
        //create new location manager (and a new instance if we need to)
        [_sharedInstance setup];

        isFromBackground = @"foreground";
        [locationManager startUpdatingLocation];

    }
    //this will call unity's own implementation of the app delegate function
    return [super application:application     didFinishLaunchingWithOptions:launchOptions];
}

И следующий код имеет дело с обратными вызовами из CLLocation:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:    (NSArray<CLLocation *> *)locations
{
    //NSLog(@"%f", locations.lastObject.coordinate.latitude);
    //NSLog(@"%f", locations.lastObject.coordinate.longitude);

    CLLocation* loc = locations.lastObject;

    [_sharedInstance sendToApi:loc];
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError     *)error
{
    NSLog(@"Location updates failed (might be because you're trying to stop     significant changes even before you start them - it's not really a     problem!) Error log follows:");
    NSLog(@"%@",error);
}

И это в первую очередь отвечает за его запуск, это вызывается из единицы при запуске:

-(void)startForegroundLocationService:(NSString *)_token
{
    token = _token;
    isFromBackground = @"foreground";
    [locationManager startUpdatingLocation];
}

Теперь проблема в том, что «didFinishLaunchingWithOptions» вообще не вызывается после завершения работы приложения и изменения местоположения на телефоне / симуляторе.Насколько я понимаю, изменение местоположения должно пробудить приложение, вызвать функцию и позволить ей делать то, что ей нужно, перед закрытием.Я знаю, что мои делегаты работают, потому что функция вызывается при первом запуске, что означает, что я успешно переопределил методы Unity.

Есть ли что-то, что я здесь упускаю?Или Unity делает что-то необычное с жизненным циклом приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...