No iOS 10 ou superior, existe QUALQUER maneira de ativar um aplicativo de forma CONFIÁVEL
Eu estive nisso por mais de 3 meses e puxando meu cabelo. Portanto, não responda com respostas para iniciantes.
Gostaria de saber se, em 2017 com o iOS 10+, há QUALQUER maneira possível ativar o aplicativo do estado finalizado ... de preferência por periférico bluetooth ... mas vou levar o que posso obter!Considero encerrado quandoo usuário passou o aplicativo no gerenciador de tarefas ou quando o periférico está ligado / desligado e o aplicativo já está morto
Preciso de dados periféricos BT importantes relacionados à saúde (registrados pelo dispositivo BT) mantidos no aplicativo, por isso preciso de uma conexão consistente ou da capacidade de ativar o aplicativo e fazer o backup dos dados. Sei que isso é muito solicitado, estou tentando encontrar o entendimento ou as soluções mais atuais para esse problema. Eu li tantos artigos e S.O. postagens sobre isso, então eu sei que o Core Bluetooth não é confiável, na melhor das hipóteses. Eu sei que o conceito geral é esquisito e as pessoas vêm dizendo desde 2010 que não é possível. No entanto, muitos continuam mudando no iOS, então eu esperava que algo tivesse mudado.
Para ser claro:
O despertar da BT seria ótimo, mas realmente não é confiável, então ... Levarei QUALQUER tipo de despertar confiável (localização, áudio, BT, etc ... NÃO no iBeacon, já que estou conectado / emparelhado ao dispositivo BT) . Se eu tiver que "hackear" o despertador para acontecer no local ou no áudio e rapidamente obter os dados do periférico de alguma forma, eu aceito!
Eu tentei:(Pule isso se você não se importa ou não é aplicável)
Modo central em segundo plano ativado em info.plistUsando restauração de estado completa, ou seja, esse código ...
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self
queue:nil
options:@{CBCentralManagerOptionShowPowerAlertKey: @(YES),
CBCentralManagerOptionRestoreIdentifierKey:@"MyDevice"}];
Para registrar a chave identificadora e este código ...
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"launch options found: %@", launchOptions);
NSArray *centralManagerIdentifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey];
NSLog(@"central managers found in launch options: %@", centralManagerIdentifiers);
[self triggerLocalNotification:[NSString stringWithFormat:@"central managers found in launch options: %@", centralManagerIdentifiers]];
if([centralManagerIdentifiers count] > 0) {
for(NSString *identifier in centralManagerIdentifiers) {
if([identifier isEqualToString:@"MyDevice"]) {
[self triggerLocalNotification:[NSString stringWithFormat:@"Identifier found: %@", identifier]];
self.bluetoothManager = [BluetoothMgr sharedInstance];
}
}
}
return YES;
}
- (void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary<NSString *,id> *)state {
NSLog(@"************** RESTORED STATE BT **************");
[self triggerCustomLocalNotification:@"************** RESTORED STATE BT **************"];
NSLog(@"central manager object: %@", central);
NSLog(@"state dictionary: %@", state);
[self triggerCustomLocalNotification:[NSString stringWithFormat:@"state dictionary: %@", state]];
NSArray *restoredPeripherals = [state objectForKey:@"CBCentralManagerRestoredStatePeripheralsKey"];
self.centralManager = central;
self.centralManager.delegate = self;
if([restoredPeripherals count] > 0) {
for(CBPeripheral *peripheral in restoredPeripherals) {
if([peripheral.name rangeOfString:@"mybox-"].location != NSNotFound) {
NSLog(@"Restoring mybox Box: %@", peripheral);
[self triggerCustomLocalNotification:[NSString stringWithFormat:@"Peripheral was found in WILL RESTORE STATE! it was: %@", peripheral]];
self.myPeripheral = peripheral;
self.myPeripheral.delegate = self;
[self connectToDevice];
return;
}
}
}
}
Para restaurar o estado do gerente central. Isso funciona apenas quando o aplicativo é eliminado pelo iOS ou o estado é alterado. Não funciona quando o usuário mata o aplicativo.
Assinando uma característica de notificação no dispositivo (criei essa característica personalizada e tenho controle total sobre a programação do dispositivo) ... isso funciona muito bem, mas nem sempre ativa o aplicativo. Funciona bem em segundo plano embora. Apenas não terminou.
Tentando me desconectar completamente após o término, para que eu possa usar o iBeacon para acordar ... muitos aros e, no final, ele não funciona de maneira alguma confiável.Atualizações significativas de localização ... extremamente não confiáveisGravação de áudio ... nenhum método é acionado quando inicia a gravação (que eu poderia encontrar de qualquer maneira) ou métodos que são acionados intermitentemente durante a gravação