Partilhar via


Atualizando um aplicativo Xamarin.iOS em segundo plano

A atualização em segundo plano é o processo de ativar um aplicativo que está suspenso ou não em execução e atualizá-lo com novo conteúdo. O iOS fornece três opções para atualizar o conteúdo em segundo plano:

  1. Serviço de Monitoramento de Região e Alterações de Localização Significativas – AS APIs com reconhecimento de localização disparam atualizações em segundo plano com base em alterações no local do usuário. Essas APIs podem ser usadas com discrição para atualizar o conteúdo em aplicativos iOS 6 não baseados em localização, em que outras opções não estão disponíveis.
  2. Busca em segundo plano (iOS 7+) – uma abordagem temporal para atualizar conteúdo não crítico que é atualizado com frequência .
  3. Notificações Remotas (iOS 7+) – Aplicativos que recebem notificações por push podem usar as notificações para disparar atualizações de conteúdo em segundo plano. Esse método pode ser usado para atualizar com conteúdo importante e sensível ao tempo que atualiza esporadicamente .

As seções a seguir abordam os conceitos básicos dessas opções.

Monitoramento de região e alterações significativas de localização

O iOS fornece duas APIs com reconhecimento de localização com recursos de segundo plano:

  1. O Monitoramento de Região é o processo de configurar regiões com limites e ativar o dispositivo quando o usuário entra ou sai de uma região. As regiões são circulares e podem ter tamanho variável. Quando o usuário cruza um limite de região, o dispositivo será ativado para manipular o evento, geralmente disparando uma notificação ou iniciando uma tarefa. O Monitoramento de Região requer GPS e aumenta o uso de bateria e dados.
  2. O Serviço de Alterações significativas de localização é uma opção mais simples e de conservação de energia disponível para dispositivos com rádios celulares. Um aplicativo que escuta alterações significativas no local será notificado quando o dispositivo alternar as torres de célula. Esse serviço pode ser usado para ativar um aplicativo suspenso ou encerrado e oferece uma oportunidade de marcar para novos conteúdos em segundo plano. A atividade em segundo plano é limitada a cerca de 10 segundos, a menos que emparelhada com uma Tarefa em Segundo Plano .

Um aplicativo não precisa do local UIBackgroundMode para usar essas APIs com reconhecimento de localização. Como o iOS não controla os tipos de tarefas que podem ser executadas quando o dispositivo é acordado por alterações no local do usuário, essas APIs fornecem uma solução alternativa para atualizar o conteúdo em segundo plano no iOS 6. Tenha em mente que disparar atualizações em segundo plano com APIs baseadas em localização será desenhado em recursos do dispositivo e pode confundir usuários que não entendem por que um aplicativo requer acesso à localização. Use a discrição ao implementar o Monitoramento de Região ou alterações de localização significativas para processamento em segundo plano em aplicativos que ainda não estão usando as APIs de localização.

Os aplicativos que usam o monitoramento de localização para processamento em segundo plano expõem uma falha no iOS 6: se as necessidades de um aplicativo não se ajustarem a uma categoria necessária em segundo plano, ele terá opções de plano de fundo limitadas. Com a introdução de duas novas APIs, Busca em Segundo Plano e Notificações Remotas, o iOS 7 (e superior) oferece oportunidades de experiência para mais aplicativos. As próximas duas seções apresentam essas novas APIs.

Busca em segundo plano (iOS 7 e Superior)

No iOS 6, um aplicativo que insere o primeiro plano precisava de tempo para carregar um novo conteúdo, apresentando brevemente aos usuários o conteúdo que eles já viram. A busca em segundo plano permite que os aplicativos carreguem novos dados antes que um usuário inicie o aplicativo e forneçam ao usuário o conteúdo mais atualizado.

Para implementar a busca em segundo plano, edite Info.plist e marcar as caixas Habilitar Modos em Segundo Plano e Busca em Segundo Plano marcar:

Edite o Info.plist e marcar as caixas Habilitar Modos em Segundo Plano e Busca em Segundo Plano marcar

Em seguida, no AppDelegate, substitua o FinishedLaunching método para definir o intervalo mínimo de busca. Neste exemplo, permitimos que o sistema operacional decida com que frequência buscar um novo conteúdo:

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
  UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval (UIApplication.BackgroundFetchIntervalMinimum);
  return true;
}

Por fim, execute a busca substituindo o PerformFetch método no AppDelegatee passando um manipulador de conclusão. O manipulador de conclusão é um delegado que usa um UIBackgroundFetchResult:

public override void PerformFetch (UIApplication application, Action<UIBackgroundFetchResult> completionHandler)
{
  // Check for new data, and display it
  ...
  
  // Inform system of fetch results
  completionHandler (UIBackgroundFetchResult.NewData);
}

Quando terminarmos de atualizar o conteúdo, avisaremos o sistema operacional chamando o manipulador de conclusão com o status apropriado. O iOS oferece três opções para o manipulador de conclusão status:

  1. UIBackgroundFetchResult.NewData – Chamado quando o novo conteúdo foi buscado e o aplicativo foi atualizado.
  2. UIBackgroundFetchResult.NoData – Chamado quando a busca por novo conteúdo foi executada, mas nenhum conteúdo está disponível.
  3. UIBackgroundFetchResult.Failed – Útil para tratamento de erros, isso é chamado quando a busca não pôde passar.

Os aplicativos que usam a Busca em Segundo Plano podem fazer chamadas para atualizar a interface do usuário em segundo plano. Quando o usuário abrir o aplicativo, a interface do usuário estará atualizada e exibindo o novo conteúdo. Isso também atualizará a instantâneo do Comutador de Aplicativos do aplicativo, para que o usuário possa ver quando o aplicativo tem um novo conteúdo.

Importante

Uma vez PerformFetch chamado, o aplicativo tem aproximadamente 30 segundos para iniciar o download do novo conteúdo e chamar o bloco do manipulador de conclusão. Se isso demorar muito, o aplicativo será encerrado. Considere usar a Busca em Segundo Plano com o Serviço de Transferência em Segundo Plano ao baixar mídia ou outros arquivos grandes.

BackgroundFetchInterval

No código de exemplo acima, permitimos que o sistema operacional decida com que frequência buscar novo conteúdo definindo o intervalo mínimo de busca como BackgroundFetchIntervalMinimum. O iOS oferece três opções para o intervalo de busca:

  1. BackgroundFetchIntervalNever - Diga ao sistema para nunca buscar conteúdo novo. Use isso para desativar a busca em determinadas situações, como quando o usuário não está conectado. Esse é o valor padrão para o intervalo de busca.
  2. BackgroundFetchIntervalMinimum – Permita que o sistema decida com que frequência buscar com base em padrões de usuário, duração da bateria, uso de dados e as necessidades de outros aplicativos.
  3. BackgroundFetchIntervalCustom – Se você souber com que frequência o conteúdo de um aplicativo é atualizado, poderá especificar um intervalo de "suspensão" após cada busca, durante o qual o aplicativo será impedido de buscar um novo conteúdo. Depois que esse intervalo for atualizado, o sistema determinará quando buscar conteúdo.

BackgroundFetchIntervalCustom E BackgroundFetchIntervalMinimum dependem do sistema para agendar buscas. Esse intervalo é dinâmico, adaptando-se às necessidades do dispositivo, bem como aos hábitos do usuário individual. Por exemplo, se um usuário verificar um aplicativo todas as manhãs e outro verificar a cada hora, o iOS garantirá que o conteúdo esteja atualizado para ambos os usuários sempre que abrirem o aplicativo.

A Busca em Segundo Plano deve ser usada para aplicativos que são atualizados com frequência com conteúdo não crítico. Para aplicativos com atualizações críticas, as notificações remotas devem ser usadas. As notificações remotas são baseadas na Busca em Segundo Plano e compartilham o mesmo manipulador de conclusão. Vamos nos aprofundar em Notificações Remotas em seguida.

Notificações Remotas (iOS 7 e Superior)

As notificações por push são mensagens JSON enviadas de um provedor para um dispositivo por meio do SERVIÇO de Notificação por Push da Apple (APNs).

No iOS 6, uma notificação por push de entrada informa ao sistema para alertar o usuário de que algo interessante aconteceu em um aplicativo. Clicar na notificação retira o aplicativo do estado suspenso ou encerrado e o aplicativo começaria a atualizar o conteúdo. O iOS 7 (e superior) estende as notificações por push comuns, dando aos aplicativos a chance de atualizar o conteúdo em segundo plano antes de notificar o usuário, para que o usuário possa abrir o aplicativo e ser apresentado com um novo conteúdo imediatamente.

Para implementar notificações remotas, edite Info.plist e marcar as caixas Habilitar Modos em Segundo Plano e Notificações remotas marcar:

Modo de tela de fundo definido como Habilitar modos em segundo plano e notificações remotas

Em seguida, defina o content-available sinalizador na própria notificação por push como 1. Isso permite que o aplicativo saiba buscar um novo conteúdo antes de exibir o alerta:

'aps' {
  'content-available': 1,
  'alert': 'Something new has happened in your app!''
}

No AppDelegate, substitua o DidReceiveRemoteNotification método para marcar o conteúdo de notificação para o conteúdo disponível e chame o bloco de manipulador de conclusão apropriado:

public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
  if([content-available]) {
    // fetch content
    completionHandler (UIBackgroundFetchResult.NewData);
  }
}

As notificações remotas devem ser usadas para atualizações pouco frequentes com conteúdo crucial para a funcionalidade do aplicativo. Para obter mais informações sobre notificações remotas, consulte o guia Notificações por Push do Xamarin no iOS .

Importante

Como o mecanismo de atualização em Notificações Remotas se baseia na Busca em Segundo Plano, o aplicativo deve iniciar o download do novo conteúdo e chamar o bloco do manipulador de conclusão dentro de 30 segundos após receber a notificação ou o iOS encerrará o aplicativo. Considere emparelhar notificações remotas com o Serviço de Transferência em Segundo Plano ao baixar mídia ou outros arquivos grandes em segundo plano.

Notificações remotas silenciosas

As Notificações Remotas são uma maneira simples de notificar aplicativos sobre atualizações e iniciar a busca de novo conteúdo, mas há casos em que não precisamos notificar o usuário de que algo mudou. Por exemplo, se um usuário sinaliza um arquivo para sincronização, não precisamos notificá-lo sempre que o arquivo for atualizado. A sincronização de arquivos não é um evento surpreendente, nem requer atenção imediata do usuário. Os usuários esperam que o arquivo esteja atualizado quando o abrirem.

Para casos como o acima, o iOS permite que as notificações por push sejam enviadas silenciosamente , ou seja, sem um alerta. Para transformar uma notificação regular em silenciosa, basta remover o alerta do conteúdo da notificação:

'aps' {
  'content-available': 1
}

Limites de taxa

A maior diferença entre as notificações normais e silenciosas de uma perspectiva do desenvolvedor é que os pushes silenciosos são limitados por taxa. As APNs atrasarão a entrega de pushes silenciosos para o dispositivo se a taxa de push ficar muito alta. Isso é para garantir que os aplicativos não drenem os recursos do dispositivo com muitas notificações silenciosas.

No entanto, as APNs permitirão notificações silenciosas "piggyback" juntamente com uma notificação remota normal ou uma resposta keep alive. Como as notificações regulares não são limitadas por taxa, elas podem ser usadas para enviar notificações silenciosas armazenadas por push das APNs para o dispositivo, conforme ilustrado pelo diagrama a seguir:

As notificações regulares podem ser usadas para enviar notificações silenciosas armazenadas por push das APNs para o dispositivo, conforme ilustrado por este diagrama

Importante

A Apple incentiva os desenvolvedores a enviar notificações por push silenciosas sempre que o aplicativo exigir e permitir que as APNs agendem sua entrega.

Nesta seção, abordamos as várias opções de atualização de conteúdo em segundo plano para executar tarefas que não se encaixam em uma categoria necessária em segundo plano. Agora, vamos ver algumas dessas APIs em ação.

Próximo: Parte 4 – Passo a passo do backgrounding do iOS