Pular para o conteúdo

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 to

Para adicionar uma extensão de aplicativo de conteúdo de notificação ao seu aplicativo iOS:

  1. Escolha File > New > Target no Xcode.
  2. Selecione Notification Content Extension em iOS Application Extension.
  3. Clique em Next.
  4. Forneça um nome para a sua extensão de aplicativo.
  5. Clique em Finish.

Adicione visualizações ao seu view controller

Anchor link to

O 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 to

Use 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 to

No 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:

  1. Abra o arquivo info.plist da sua Extensão de Conteúdo de Notificação.
  2. Adicione a chave UNNotificationExtensionUserInteractionEnabled aos atributos da sua extensão. Dê a ela um valor booleano, definido como YES.
Habilitando interações do usuário no arquivo info.plist da extensão de notificação

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 to
import UIKit
import Foundation
import UserNotifications
import UserNotificationsUI
import 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
}
}
}