Quando o aplicativo oficial iOS Messages da Apple é aberto e, em primeiro plano, novas mensagens de outros contatos acionam um banner nativo de alerta de notificação do iOS. Veja a imagem abaixo.
Isso é possível em aplicativos de terceiros na App Store? Notificações locais e / ou push para seu aplicativo enquanto ele estiver aberto e em primeiro plano ?
Ao testar meu aplicativo , as notificações são recebidas, mas nenhuma interface de usuário de alerta do iOS é mostrada .
Mas esse comportamento é visto no aplicativo oficial Mensagens da Apple:
O Guia de programação de notificação local e remota diz:
Quando o sistema operacional entrega uma notificação local ou remota e o aplicativo de destino não está sendo executado em primeiro plano , ele pode apresentar a notificação ao usuário por meio de um alerta , número do emblema do ícone ou som.
Se o aplicativo estiver sendo executado em primeiro plano quando a notificação for entregue, o representante do aplicativo receberá uma notificação local ou remota.
Então, sim, podemos receber os dados da notificação em primeiro plano. Mas não vejo como apresentar a interface do usuário de alerta de notificação nativa do iOS .
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
As Mensagens estão usando uma API privada para exibir o alerta em primeiro plano?
Para os fins desta pergunta, não sugira nenhum alerta pop-up de "brinde" de terceiros no github ou etc. Estou interessado apenas se isso puder ser feito usando a interface do usuário nativa local , iOS Local ou Push Notification do iOS, enquanto o seu aplicativo está aberto e em primeiro plano .
UNUserNotificationCenter.current().delegate = self
o métodoapplication(_:willFinishLaunchingWithOptions:)
ouapplication(_:didFinishLaunchingWithOptions:)
Para exibir a mensagem de faixa enquanto o aplicativo estiver em primeiro plano, use o seguinte método.
iOS 10+, Swift 3+ :
fonte
AppDelegate
. Tem que ser colocado para qualquer objeto que esteja em conformidadeUNUserNotificationCenterDelegate
. Dito isto, a maioria dos desenvolvedores faz a suaAppDelegate
conformidadeUNUserNotificationCenterDelegate
. @YoavR.EDITAR:
Agora, alertas de primeiro plano são possíveis no iOS 10! Por favor, veja esta resposta .
Para iOS 9 e abaixo:
Não parece possível mostrar o alerta de notificação padrão do iOS quando o aplicativo está aberto e em primeiro plano. O Messages.app deve estar usando uma API privada.
Os
UIApplicationDelegate
métodos irá ainda ser chamado, permitindo sua aplicação para responder à notificação local ou remoto:No entanto, a interface do usuário do banner de alerta de notificação nativo do iOS não será mostrada como está no Messages.app da Apple, que deve estar usando uma API privada.
O melhor que você pode fazer é lançar seu próprio banner de alerta ou usar uma estrutura existente:
Eu abri um radar para esse comportamento aqui:
rdar://22313177
fonte
toastAlertFromGithub
se você está sugerindo a utilização desta biblioteca de terceiros!Para mostrar notificações enquanto o aplicativo está aberto, precisamos manipulá-lo manualmente. Então, o que estou fazendo abaixo é lidar com a notificação uma vez recebida.
Adicione tudo abaixo em AppDelegate.m
Deixe-me saber se esta é uma solução aceitável. Funcionou bem para mim, mas não tenho certeza se este é o caminho certo.
fonte
Aqui está o código para receber a notificação por push quando o aplicativo estiver em primeiro plano ou em estágio aberto, iOS 10 e Swift 2.3
Se você precisar acessar as informações do usuário da notificação, use o código:
notification.request.content.userInfo
O método
userNotificationCenter(_:willPresent:withCompletionHandler:)
só é chamado se você adicionar a carga útil atributocontent-available:1
. A carga final deve ser algo como:fonte
userNotificationCenter(_:willPresent:withCompletionHandler:)
será chamado quando seu aplicativo estiver sendo executado em primeiro plano. Portanto, NÃO importa com " conteúdo disponível ", relacionado à " busca em segundo plano ".Posso mostrar notificação por push quando o aplicativo está ativo para iOS 10.
A notificação por push do servidor deve ser silenciosa .
Ao receber uma notificação remota do servidor, você envia uma notificação local e define o valor para keyPath: shouldAlwaysAlertWhileAppIsForeground = True
fonte
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
, certo? (com "Sim" e não é verdade)Você pode lidar com a notificação e mostrar um alerta personalizado. Aplicativos como Viber, Whatsapp e BisPhone usam essa abordagem.
Um exemplo de alerta personalizado de terceiros é CRToast .
Tente agendar uma notificação local enquanto o aplicativo estiver em primeiro plano e você verá que nenhum alerta do iOS para ações é mostrado:
fonte
Versão Swift 3
Isso mostra um alerta quando o aplicativo está em primeiro plano.
A implementação do ApplicationDelegate de
UNUserNotificationCenterDelegate
fonte
Para mostrar a notificação local, esta é a melhor opção. precisa de menos código para escrever "BRYXBanner" https://cocoapods.org/pods/BRYXBanner
fonte
BRYXBanner
estrutura não parece usar o banner de notificação do iOS para ações .Se o seu destino de implantação> = iOS10, use UNUserNotification como abaixo:
fonte