Notificações Locais e DatePicker com Swift 5

Marina Lima
Apple Developer Academy | UFPE
4 min readSep 11, 2020

Estava adiando MUITO fazer um post no Medium, mas pelo visto esse momento chega para todos. Então minha primeira contribuição aqui será dar um passo a passo de como utilizar o DatePicker para agendar notificações locais.

Entender como tudo funcionava foi uma saga, porque:

1º — Todos os tutoriais estavam em inglês;

2º — Os tutoriais usavam contagem regressiva em vez do DatePicker para agendar notificações;

3º — A versão de Swift era antiga.

Mas ao final de um longo dia pesquisando como conectar as duas coisas, consegui fazer funcionar — obrigada pela ajuda, Chico!

E sem mais enrolação, vamos criar um app que agenda notificações a partir de um DatePicker.

Crie um novo projeto

Com o template ‘Single View App’.

Para que s você consiga criar uma notificação local é preciso importar a biblioteca apropriada, nesse caso iremos fazer:

import UserNotifications

Depois vá até o Storyboard e adicione um DatePicker na sua tela.

Selecionar o Date Picker
Selecionar o Date Picker

Você deve fazer a ligação do DatePicker no seu View Controller, e logo aqui no começo está o pulo do gato.

Além de conectar o DatePicker como um IBOutlet do tipo UIDatePicker, você deve conecta-lo novamente como uma IBAction, que terá o sender do tipo UIDatePicker.

Então sua class ViewController deve ficar assim:

class ViewController: UIViewController {@IBOutlet weak var datePicker: UIDatePicker!@IBAction func datePickerChange(_ sender: UIDatePicker) {}

Ajustando as Notificações

Agora vamos montar a função datePickerChange. Com o UserNotifications conseguimos definir alguns parâmetros da nossa notificação, como título, corpo de mensagem, o som que deve fazer e também ajustar quando essa notificação deve surgir. É bem simples.

Dentro da função datePickerChange vamos escrever o seguinte código:

let center = UNUserNotificationCenter.current()// cria o conteúdo da notificaçãolet content = UNMutableNotificationContent()content.title = "Nomezinho etc"content.body = "Um textinho etc etc"content.sound = .default

Aqui conseguimos definir, a partir de UNMutableNotificationContent() os aspectos da notificação. Nesse caso usei apenas .title, .body e .sound, mas você pode definir outros aspectos também.

Em seguida devemos criar uma instância que irá conectar o DatePicker que criamos com as notificações.

// cria uma instância do tipo Calendarlet date = datePicker.datelet dateComponents = Calendar.current.dateComponents([.hour, .minute], from: date)

É preciso definir date = datePicker.date para que possamos identificar no dateComponents que .hour e .minute devem ser os mesmos que o usuário selecionar no DatePicker.

Definido o conteúdo da notificação e quando ela deve aparecer, é necessário definirmos o trigger, o request e então finalizar com o registro da request.

//Notificações triggerlet trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false)//Cria a requestlet request = UNNotificationRequest(identifier: "Alert", content: content, trigger: trigger)//Register the requestcenter.add(request) { (error) in}

Aqui o trigger pega as informações de quando a notificação deve aparecer de dateComponents, definido na etapa anterior.

Permitindo Notificações

Quando um app deseja enviar notificações pro seu iPhone ele pede autorização. Pra finalizar o passo a passo vamos configurar a autorização do usuário.

Todo código anterior deve ser escrito antes do ViewDidLoad. O código abaixo precisa estar dentro do ViewDidLoad, para que o pedido de autorização apareça assim que o app for aberto.

override func viewDidLoad() {super.viewDidLoad()// Pede permissãolet center = UNUserNotificationCenter.current()center.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in}}

Aqui estamos pedindo autorização para que haja notificações com certos aspectos, como .alert, .sound e .badge. Você pode configurar do jeito que melhor se encaixar em seu app.

Não acabou não…

Até aqui parece que tudo vai funcionar perfeitamente… Mas não vai. Para que as notificações comecem a funcionar você precisa definir um Team para o projeto. É necessário ter uma conta de desenvolvedor para poder selecionar uma Equipe.

Para configurar uma Equipe você deve clicar na aba geral do projeto, que é sempre a primeira do lado esquerdo do Xcode.

Em seguida selecione Signing & Capabilities no menu superior da tela que irá abrir.

Clique em Team e selecione sua conta desenvolvedor. Caso você não esteja logado será necessário que você faça o login (óbvio) para que o projeto funcione.

A partir daqui suas notificações devem começar a funcionar perfeitamente ✨.

É isso! O tutorial está todo em português pra ajudar mais gente que procura aprender Swift e não domina muito o inglês.

Até a próxima!

--

--