Notificações ricas de mídia no iOS

Prev Next

Envie notificações push com imagens, GIFs e vídeos

O iOS 10 introduziu a capacidade de enviar notificações push com imagens, GIFs e vídeos. Para habilitar essa funcionalidade, os clientes devem criar uma Extensão de Serviço que possibilita a modificação de uma carga útil push antes que ela seja exibida.

Criando uma extensão de serviço

Para criar uma Extensão de Serviço de Notificação, no Xcode, navegue até Arquivo > Novo > Destino e selecione Extensão de Serviço de Notificação.

1648

Extensão do Serviço de Notificação Xcode

Certifique-se de que o Embed In Application esteja configurado para incorporar a extensão na sua aplicação.

Certifique-se de definir o objetivo de implantação para iOS 10 ou superior, dependendo das suas especificidades. Por padrão, o Xcode define o objetivo de implantação para o iOS mais recente, que falha silenciosamente em funcionar na versão inferior do sistema operacional. Por exemplo, se você definir o alvo de implantação da Extensão de Serviço como 11.0 e rodar o app em um dispositivo iOS 10.3 e em um dispositivo iOS 11.0, a Extensão de Serviço não funcionará no dispositivo 10.3, mas ao definir o alvo de implantação para 10.0, funcionará em ambos.

Configuração da extensão de serviço

Uma Extensão de Serviço de Notificação é um binário próprio que vem junto com seu app. Assim, ele deve ser configurado no Portal de Desenvolvedores da Apple com seu próprio ID de App e Perfil de Provisão. Extensões geralmente são nomeadas com um sufixo no ID da aplicação principal (por exemplo, com.xtremepush.test.testwatchnotificationservice). Detalhes dos tipos e tamanhos de arquivos suportados para mídia rica podem ser encontrados na documentação do Apple Developer.

Por fim, certifique-se de que as notificações estejam ativadas para sua extensão de serviço. Em Alvos > Capacidades , selecione sua extensão de serviço e certifique-se de que as Notificações Push estejam ativadas.

2040

Notificações push de alternância de extensão Xcode

Exibindo uma imagem

Este é o caso de uso mais comum de mídia rica e possui um campo dedicado na aba de conteúdo push do iOS ao criar uma campanha no Xtremepush. O iOS suporta formatos JPG, GIF e PNG de até 2 MB. Revise nossas diretrizes criativas de notificações push para dispositivos móveis para mais detalhes.

Se quiser adicionar uma imagem via API, pode usar o push_picture parâmetro nos métodos Campanha, por exemplo:

Exemplo simples de um push iOS de transmissão com uma imagem hospedada no seu CMS ou em outro lugar sendo carregada e enviada via API abaixo:

curl --request POST \
  --url https://external-api.xtremepush.com/api/external/create/campaign \
  --header 'content-type: application/json' \
  --data '{
    "apptoken": "YOURAPPTOKEN", 
    "text": "Just Testing My Service Extension",
    "ios": {"active": 1},
    "push_picture": "https://pathtoyourhostedimage.com/large/gold-coast-coffee30665.jpg",
    "send_type": 0,
    "broadcast": 1
  }'

Para exibir a imagem no dispositivo móvel, ela deve ser tratada na extensão de serviço.

1400

Exemplo de notificação rica no iOS

O SDK Xtremepush pode gerenciar a exibição da imagem, vinculando o SDK ao seu destino de extensão.

Se você usar CocoaPods, pode fazer algo parecido com isso:

def shared_pods
  pod 'Xtremepush-iOS-SDK'
end

target 'MainTarget' do

  shared_pods
  
  pod 'Alamofire'
  ...
  
end

target 'ExtensionTarget' do
  shared_pods
end

Ou, você pode adicionar o framework manualmente usando o drag and drop na pasta de extensões, ou adicionando a Extensão à Associação de Alvos do framework na janela direita, como mostrado abaixo:

1142

Framework de alvo de extensão

Por fim, você deve adicionar o código do serviço de notificação:

import XPush
class NotificationService: UNNotificationServiceExtension {
    var token: String? 
    override func didReceive(_ request: UNNotificationRequest,
                             withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.token = XPush.didReceive(request, withContentHandler: contentHandler)
    }
    override func serviceExtensionTimeWillExpire() {
        XPush.serviceExtensionTimeWillExpire(with: token)
    }
}
#import <XPush/XPush.h>
@interface NotificationService ()
@property (nonatomic) NSString* token;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request 
                   withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.token = [XPush didReceiveNotificationRequest:request
                                   withContentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
    [XPush serviceExtensionTimeWillExpireWith:self.token];
}
@end