Как отключить веб-просмотр Кордовы в фоновом режиме? (только для iOS)

88
6

Я работаю над приложением iOS Cordova, которое запускается в фоновом режиме для обработки событий местоположения. Это прекрасно работает, но я заметил, что когда приложение запускается в фоновом режиме, веб-просмотр инициализируется, и все мое приложение отображается. У меня есть вся логика для обработки фонового запуска, написанного изначально, поэтому я мог (надеюсь) избежать отображения пользовательского интерфейса и запуска Javascript-стороны.

Я думал, что могу отключить веб-просмотр, обернув создание MainViewController в выражении if, но это, похоже, не работает (я знаю, что веб-просмотр запускается из-за отправки HTTP-запросов).

Вот мой AppDelegate.m:

#import "AppDelegate.h"
#import "MainViewController.h"
#import "AppName-Swift.h"

@implementation AppDelegate {
LocationSyncManager* locationSyncManager;
}

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
bool isLocationLaunch = launchOptions[@"location"] == nil ? false : launchOptions[@"location"];
NSString* serverAddress = @"http://192.168.1.61:9090/api/notes/nearby";
locationSyncManager = [LocationSyncManager create: serverAddress isLocationLaunch: isLocationLaunch];

// Don't render the webview if the app is launched in the background by a location event
if(!isLocationLaunch) {
self.viewController = [[MainViewController alloc] init];
}
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

@end

спросил(а) 2021-01-25T22:28:29+03:00 4 месяца, 2 недели назад
1
Решение
63

Выяснились проблемы:

isLocationLaunch всегда был false потому что я неправильно проверял флаг запуска местоположения.

Также, чтобы держать Кордову от рендеринга/запуска javascript, я должен был заставить super didFinishLaunchingWithOptions быть вызванным во время запуска местоположения.

Это работает:

#import "AppDelegate.h"
#import "MainViewController.h"
#import "AppName-Swift.h"

@implementation AppDelegate {
LocationSyncManager* locationSyncManager;
}

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

bool isLocationLaunch = [launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey];

NSString* serverAddress = @"http://192.168.1.61:9090/api/notes/nearby";
locationSyncManager = [LocationSyncManager create: serverAddress isLocationLaunch: isLocationLaunch];

if(!isLocationLaunch) {
self.viewController = [[MainViewController alloc] init];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
return nil;
}

@end

ответил(а) 2021-01-25T22:28:29+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема