Uma maneira rápida de adicionar notificações a um aplicativo Android



Traduzido para você um artigo de Brandon Weaver sobre o trabalho com notificações no sistema operacional Android. O programador explica como adicionar rapidamente essa funcionalidade ao seu aplicativo. O artigo, antes de tudo, será útil para desenvolvedores iniciantes do Android.

As notificações são uma das maneiras mais fáceis e rápidas de tornar seu aplicativo mais interativo, o que atrairá mais usuários. As notificações fornecem ao usuário informações breves sobre o que ele pode precisar no momento. É também uma maneira de informar sobre os próximos eventos. Vamos tentar adicionar rapidamente esse recurso ao aplicativo.

A Skillbox recomenda: O Curso Online Aplicado do Python Data Analyst .

Lembramos que: para todos os leitores de "Habr" - um desconto de 10.000 rublos ao se inscrever em qualquer curso Skillbox usando o código promocional "Habr".

Criar notificação


O primeiro passo é criar um objeto de "notificação". Para fazer isso, use NotificationCompat.Builder. O conteúdo mínimo de notificação permitido pelos desenvolvedores do Android é um pequeno ícone. Isso é bom, mas não muito útil para o usuário. Abaixo está um diagrama de uma notificação padrão que é bem recebida.



Um pequeno ícone será exibido constantemente e é importante torná-lo alfa-transparente. Sem isso, em vez de um ícone, você obtém uma caixa branca.

O título da notificação também é importante. Esta deve ser uma descrição curta para entender por que o usuário geralmente está preocupado.

O corpo da notificação contém um texto longo com todas as informações necessárias.

Um ícone grande pode ser o logotipo da empresa ou outra coisa.

Abaixo estão duas opções para o usuário.

Para exibir tudo isso, você precisa de um código curto:

.setSmallIcon(R.drawable.ic_announcement) .setContentTitle(title) .setContentText(body) .build() 

Mostrar notificação


Criamos nossa notificação, agora a tarefa é mostrá-la. O Android possibilita isso usando o NotificationManagerCompat. Para enviar uma notificação, você deve usar o notificationID e a própria notificação.

 with(NotificationManagerCompat.from(context)) { if (getNotificationChannel(CHANNEL_ID) == null) { createNotificationChannel(context) } notify(notificationId, builder.build()) } 

É necessário código adicional para verificar a existência do canal de notificação.

Canais e importância


Pela primeira vez, um usuário teve a oportunidade de escolher os tipos de notificações de seus aplicativos no Oreo. É importante criar vários canais, porque se tudo acontecer em um canal, o usuário não poderá selecionar os tipos de notificações de que precisa e bloqueará tudo.

 teNotificationChannel(context: Context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = context.getString(R.string.channel_name) val descriptionText = context.getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_HIGH val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText } NotificationManagerCompat.from(context).createNotificationChannel(channel) } } 

O canal deve incluir as seguintes informações:

  • ID - identificador de canal;
  • nome - deve ser curto, por exemplo, "Mensagens";
  • importância - pode ser alto, padrão, baixo ou mínimo;
  • descrição - será exibido nas configurações do Android. O desenvolvedor deve cuidar da qualidade da descrição.

Interação do usuário


Existem várias maneiras pelas quais um usuário pode interagir com as notificações. Felizmente, as APIs que permitem controlar o processo são bastante semelhantes. Intents e PendingIntents são usados ​​para fornecer feedback ao aplicativo, fornecendo lógica de processamento específica.

A maneira mais fácil de lidar com um grande número de notificações é usar o BroadcastReceiver. Quando o usuário começa a interagir com a notificação, o Intent será acionado e o método onReceive BroadcastReceiver será chamado.

 val builder = NotificationCompat.Builder(context, CHANNEL_ID) ... .setContentIntent(onContentTapped /** Pending intent */) .setDeleteIntent(onSwipedAway /** Pending intent */) .addAction( R.drawable.ic_announcement, actionTitle, onActionTapped /** Pending intent */ ) 

O ContentIntent será iniciado clicando na notificação. Vale lembrar que a notificação não será rejeitada se você não chamar setAutoCancel (true).
DeleteIntent será iniciado depois que o usuário excluir a notificação.
Ações são os botões na parte inferior da notificação. Eles também têm emblemas e nomes.

Para criar um BroadcastReceiver, você precisa estender a classe BroadcastReceiver, substituir o método onReceive e lembre-se de declarar o Receiver em AndroidManifest.xml.

 class NotificationBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action when (action) { ACTION_ONE -> { Toast.makeText(context, "Action One hit!", Toast.LENGTH_SHORT).show() } ACTION_TWO -> { Toast.makeText(context, "Action Two hit!", Toast.LENGTH_SHORT).show() } } } } object NotificationController { fun pendingIntent(context: Context, name: String, extras: Bundle?): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java).apply { action = name putExtra(EXTRA_NOTIFICATION_ID, extras) } return PendingIntent.getBroadcast(context, 0, intent, 0) } } 

NotificationController é uma ferramenta rápida para criar PendingIntents para notificações. O mais importante é atribuir nomes diferentes às ações para lidar corretamente com as reações do usuário à notificação. Além disso, se você pretende iniciar uma atividade a partir de BroadcastReceiver, use IntentFlag NEW_TASK.

Isso é necessário para processar todas as notificações em um único local. As intenções também podem ser registradas para diferentes BroadcastReceivers, para que você possa limitar o escopo a um BroadcastReceiver para cada tipo de notificação.

Tudo isso é apenas o começo do trabalho. A documentação possui muitos exemplos excelentes. Portanto, estude-a se tiver dúvidas ou quiser fazer algo mais avançado.
A Skillbox recomenda:

Source: https://habr.com/ru/post/pt438462/


All Articles