Personalização de push no iOS
Quando um dispositivo iOS recebe uma notificação contendo um alerta, o sistema exibe o conteúdo do alerta em duas etapas. Inicialmente, ele exibe um banner abreviado com o título, subtítulo e duas a quatro linhas do corpo do texto da notificação. Se o usuário pressionar o banner abreviado, o iOS exibe a interface completa da notificação, incluindo quaisquer ações relacionadas à notificação. O sistema fornece a interface para o banner abreviado, mas você pode personalizar a interface completa usando uma extensão de aplicativo de conteúdo de notificação.

A extensão de aplicativo de conteúdo de notificação gerencia um view controller que exibe sua interface de notificação personalizada. Este view controller pode complementar ou substituir a interface padrão do sistema para suas notificações. Você pode usar seu view controller para:
- Personalizar o posicionamento dos itens, incluindo o título, subtítulo e corpo do texto do alerta.
- Substituir fontes ou estilos diferentes para elementos da interface.
- Exibir dados específicos do aplicativo — por exemplo, dados armazenados em chaves específicas do aplicativo no payload da notificação.
- Incluir imagens personalizadas ou branding.
Sua extensão de aplicativo deve configurar seu view controller usando os dados imediatamente disponíveis, como o conteúdo da notificação e os arquivos presentes no pacote da sua extensão de aplicativo. Se você usar um grupo de aplicativos para compartilhar dados entre seu aplicativo e sua extensão de aplicativo, também poderá usar quaisquer arquivos encontrados no grupo de aplicativos. Para garantir que suas notificações sejam entregues em tempo hábil, configure as visualizações o mais rápido possível. Não execute tarefas de longa duração, como tentar recuperar dados pela rede.
Adicione a extensão de aplicativo de conteúdo de notificação ao seu projeto
Anchor link toPara adicionar uma extensão de aplicativo de conteúdo de notificação ao seu aplicativo iOS:
- Escolha File > New > Target no Xcode.
- Selecione Notification Content Extension em iOS Application Extension.
- Clique em Next.
- Forneça um nome para a sua extensão de aplicativo.
- Clique em Finish.
Adicione visualizações ao seu view controller
Anchor link toO modelo fornecido pelo Xcode inclui um storyboard e um view controller para você configurar. Construa sua interface de notificação personalizada adicionando visualizações ao seu view controller. Por exemplo, use rótulos para exibir o título, subtítulo e corpo do texto da notificação. Você também pode adicionar visualizações de imagem e visualizações que exibem conteúdo não interativo. Você não precisa fornecer nenhum conteúdo inicial para suas visualizações.
Você pode adicionar controles interativos (por exemplo, botões ou interruptores) no iOS 12 e posterior. Para mais informações, consulte Suporte a Controles Interativos.
Configure seu view controller
Anchor link toUse o método didReceive(_:) do seu view controller para atualizar seus rótulos e outras visualizações. O payload da notificação contém os dados a serem usados ao configurar seu view controller. Você também pode usar dados de outros arquivos da sua extensão de aplicativo. A Listagem 1 mostra uma versão deste método que recupera o título e o corpo do texto do payload da notificação e atribui as strings a dois controles UILabel, que são armazenados como outlets no view controller.
// Configuring the notification interface at runtime
func didReceive(_ notification: UNNotification) { self.bodyText?.text = notification.request.content.body self.headlineText?.text = notification.request.content.title}Se uma segunda notificação chegar quando seu view controller já estiver visível, o sistema chamará o método didReceive(_:) novamente com o novo payload da notificação.
Suporte a controles interativos
Anchor link toNo iOS 12 e posterior, você pode habilitar interações do usuário em suas notificações personalizadas. Isso permite que você adicione controles interativos, como botões e interruptores, à sua interface personalizada.
Para habilitar as interações do usuário:
- Abra o arquivo
info.plistda sua Extensão de Conteúdo de Notificação. - Adicione a chave
UNNotificationExtensionUserInteractionEnabledaos atributos da sua extensão. Dê a ela um valor booleano, definido comoYES.

Adicione o Apple Pay à sua extensão de notificação push (visualização de exemplo)
Anchor link to
Exemplo de bloco de código com o botão Apple Pay na extensão de Notificação Push
Anchor link toimport UIKitimport Foundationimport UserNotificationsimport UserNotificationsUIimport PassKit
class NotificationViewController: UIViewController, UNNotificationContentExtension, PKPaymentAuthorizationViewControllerDelegate {
func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) { controller.dismiss(animated: true, completion: nil) }
@IBOutlet weak var buyWithApplePayButton: UIButton! @IBOutlet weak var containerView: UIView! @IBOutlet weak var payInAppButton: UIButton! @IBOutlet weak var segmentCustom: UISegmentedControl!
private var amount: NSDecimalNumber = 0;
override func viewDidLoad() { super.viewDidLoad()
buttonCustomisation()
amount = NSDecimalNumber.init(value: 5) }
func buttonCustomisation () { self.buyWithApplePayButton.layer.masksToBounds = true self.buyWithApplePayButton.layer.cornerRadius = 10 self.payInAppButton.layer.masksToBounds = true self.payInAppButton.layer.cornerRadius = 10 self.containerView.layer.borderColor = UIColor.gray.cgColor self.containerView.layer.borderWidth = 0.7 self.containerView.layer.masksToBounds = true self.containerView.layer.cornerRadius = 20 }
func didReceive(_ notification: UNNotification) { // Configuring the notification interface at runtime }
@IBAction func buyWithApplePayAction(_ sender: Any) { let request = PKPaymentRequest() request.merchantIdentifier = "merchant.com.sample.ApplePayAction" request.supportedNetworks = [PKPaymentNetwork.visa, PKPaymentNetwork.masterCard, PKPaymentNetwork.amex] request.merchantCapabilities = PKMerchantCapability.capability3DS request.countryCode = "US" request.currencyCode = "USD"
request.paymentSummaryItems = [ PKPaymentSummaryItem(label: "Some Product", amount: amount) ]
let applePayController = PKPaymentAuthorizationViewController(paymentRequest: request) applePayController?.delegate = self self.present(applePayController!, animated: true, completion: nil) }
@IBAction func payInAppButtonAction(_ sender: Any) { print("pay in app button tapped") }
@IBAction func segmentAction(_ sender: Any) { switch segmentCustom.selectedSegmentIndex { case 0: amount = NSDecimalNumber.init(value: 5) break case 1: amount = NSDecimalNumber.init(value: 10) break case 2: amount = NSDecimalNumber.init(value: 20) break default: amount = NSDecimalNumber.init(value: 5) break } }}