iOS 13 Agendar tarefas em segundo plano do iOS

8

Estou implementando o Framework BackgroundTasks para atualizar os dados. Mas eu entendi o problema abaixo

Could not schedule refreshApp: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
Could not schedule data featch: Error Domain=BGTaskSchedulerErrorDomain Code=1 "(null)"
2019-10-01 19:19:32.550320+0530 SOBackgroundTask[34131:1129470] Can't end BackgroundTask: no background task exists with identifier 3 (0x3), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
Gurjinder Singh
fonte

Respostas:

16

Aqui estão os possíveis códigos de erro Domain=BGTaskSchedulerErrorDomainextraídos dos cabeçalhos ObjC com algumas explicações.

BGTaskSchedulerErrorCodeUnavailable = 1// A funcionalidade de agendamento de tarefas em segundo plano não está disponível para este aplicativo / extensão. A atualização de aplicativo em segundo plano pode ter sido desativada em Configurações.

BGTaskSchedulerErrorCodeTooManyPendingTaskRequests = 2// Não foi possível enviar a solicitação de tarefa porque há muitas solicitações de tarefas pendentes desse tipo. Cancele algumas solicitações de tarefas existentes antes de tentar novamente.

BGTaskSchedulerErrorCodeNotPermitted = 3 // A solicitação da tarefa não pôde ser enviada porque o modo de plano de fundo apropriado não está incluído na matriz UIBackgroundModes ou seu identificador não estava presente na matriz BGTaskSchedulerPermittedIdentifiers no Info.plist do aplicativo.

descongelar
fonte
12

A solução é executar em um dispositivo. Eu estava correndo no simulador. No entanto, estava mostrando que a atualização de aplicativo em segundo plano foi ativada nas configurações durante a execução no simulador.

Gurjinder Singh
fonte
2

Eu testei no dispositivo real (iOS13.2 e iOS13.2.2), mas é o mesmo resultado.

Domínio de erro = Código BGTaskSchedulerErrorDomain = 2 "(null)" Não é possível finalizar BackgroundTask: não existe tarefa em segundo plano com o identificador 37 (0x25), ou já pode ter sido encerrada. Quebre UIApplicationEndBackgroundTaskError () para depurar.

Domínio de erro = Código BGTaskSchedulerErrorDomain = 1 "(null)" Não é possível finalizar BackgroundTask: não existe tarefa em segundo plano com o identificador 113 (0x71) ou já pode ter sido encerrada. Quebre UIApplicationEndBackgroundTaskError () para depurar.

Parece que ainda existe um bug.

https://forums.developer.apple.com/thread/121990

James Chan
fonte
Quando executo o comando debug, o agendamento é bem-sucedido, mas recebo o mesmo erro (código 1) no dispositivo real ao agendar uma tarefa. (iOS 13.2.3)
Teo
@Teo, o que você quis dizer? conseguiu no simulador? e falhou no dispositivo real?
user1462586 24/03
0

Verifique se você perdeu o registro BGTaskSchedulerPermittedIdentifiersno arquivo info.plist do seu projeto.

iCoder86
fonte
0

Para:

BGTaskSchedulerErrorDomain error 3

Verifique dentro do .xcodeprojarquivo do projeto o destino apropriado. Em seguida, vá para a guia info e Custom iOS Target Properties e verifique se os identificadores permitidos do planejador de tarefas em segundo plano ( BGTaskSchedulerPermittedIdentifiers) foram adicionados.

Isso resolveu meu problema ao adicionar BackgroundTasksa um projeto existente.

eric.rl
fonte