15 Jun, 2012 23:58

Recebendo Push Notifications no seu aplicativo iOS

Habilitando o recebimento de Push Notifications na Apple

Para receber notificações, a primeira coisa que deve ser feita é ir no iOS provisioning portal e criar um App ID para o seu aplicativo. Esse App ID não pode conter wild-card, o asterisco, que permite que o mesmo App ID consiga ser usado em diversos aplicativos. Habilite esse App ID para receber Push Notifications:

push notifications

Depois disso, basta criar um perfil de desenvolvimento que utilize esse App IDe utilize-o para dar build no aplicativo que você deseja que receba as notificações. Para o servidor que enviará a notificação será necessário baixar também um certificado, mas isso é assunto para um outro momento, nesse post falarei apenas no cliente.

Habilitando o dispositivo para receber notificações

Dentro do aplicativo, o trabalho que você tem que fazer para receber notificações é bem pequeno. No App Delegate escreva no didFinishLaunchingWithOptions o método registerForRemoteNotificationTypes, como abaixo:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

// Let the device know we want to receive push notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
    (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

return YES;
}

Você pode selecionar 3 tipos de notificações: o Badge que coloca um número no ícone do aplicativo, o Sound que toca um pequeno som quando a notificação é enviada ou o Alert, que mostra um texto para o usuário. Ao fazer isso, o usuário receberá um alerta perguntando se ele permite que o aplicativo receba mensagens, como na figura abaixo.

push notifications

Para saber se o usuário aceitou ou não as notificações, você deve implementar os seguintes callbacks:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

Caso o usuário tenha aceitado, você receberá um Token que deverá ser enviado via internet em algum momento para seu servidor que enviará as notificações. É somente com este Token que o cliente poderá ser endereçado em uma mensagem.

Recebendo notificações

Depois dessas poucas linhas de código e configurações, seu aplicativo já está pronto para receber as mensagens, mas é bom que o aplicativo esteja preparado para elas. Essas mensagens podem chegar de duas formas: quando seu aplicativo está aberto, ou quando ele está fechado.

Se o seu app estiver aberto no momento do recebimento da mensagem, o iOS não irá mostrar nenhuma mensagem na tela (ou emitir sons), então você deverá fazer isso manualmente através do seguinte método:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)_userInfo {
    NSLog(@"Notificacao: %@", [_userInfo objectForKey:@"texto"];);
}

O userInfo é um Dictionary que pode ser enviado pelo seu servidor. Você pode enviar qualquer coisa ao aplicativo, mas o limite é bem curto: a mensagem inteira (mensagem e dados internos) devem ter no máximo 64 bytes.

A outra forma de receber mensagens é com o usuário fora do aplicativo. Nesse caso, o iOS se comporta automaticamente, mas se o usuário clicar na notificação, ou abri-la na central de notificações você poderá também obter os dados da mensagem que chegou. Esses dados são recebidos no parâmetro launchOptions do App Delegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"])
    {
        NSDictionary *userInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
    }
}

O ideal é que após receber esses dados você mande o usuário para uma seção específica do seu aplicativo relativa a mensagem.

POSTS RELACIONADOS:

Ao navegar neste site, você consente o uso de cookies nossos e de terceiros, que coletam informações anônimas e são essenciais para melhorar sua experiência em nosso site.