iOS
Send Push Notifications
Notificações Push com Swift e Cloud Code no iOS
28 min
enviando notificações push usando código em nuvem com swift introdução esta seção explica como você pode enviar notificações push usando código em nuvem através do back4app é assim que ficará a qualquer momento, você pode acessar o projeto completo construído com este tutorial em nosso repositório do github para completar este guia rápido, você precisa xcode um aplicativo criado no back4app siga o tutorial de novo aplicativo parse para aprender como criar um aplicativo parse no back4app um aplicativo ios conectado ao back4app nota siga o tutorial de instalação do sdk parse (swift) para criar um projeto xcode conectado ao back4app um aplicativo ios configurado via tutorial de notificações push do back4app via dashboard um dispositivo ios, iphone ou ipad, executando ios 10 ou mais recente uma conta de desenvolvedor apple paga 1 configure seu aplicativo ios para receber push cada aplicação parse instalada em um dispositivo registrado para notificações push tem um associado instalação instalação objeto o instalação instalação objeto é onde você armazena todos os dados necessários para direcionar notificações push por exemplo, em seu aplicativo, você poderia armazenar quais equipes um de seus usuários está interessado para enviar atualizações sobre seu desempenho salvar o instalação instalação objeto também é necessário para rastrear eventos de abertura de aplicativo relacionados a push a maneira mais simples de começar a enviar notificações é usando canais isso permite que você use um modelo de publicador assinante para enviar notificações os dispositivos começam se inscrevendo em um ou mais canais, e as notificações podem ser enviadas posteriormente para esses assinantes os canais aos quais um determinado instalação instalação estão armazenados no campo de canais canais do objeto instalação instalação depois disso, vamos abordar o envio de notificações push direcionadas a um único usuário ou a um grupo de usuários com base em uma consulta a partir de agora, vamos assumir que você completou todas as etapas do tutorial de notificações push do back4app via dashboard , mesmo que você use o projeto ios construído com este tutorial que está disponível em nosso repositório do github você deve ter notificações push básicas funcionando e também ser capaz de enviar pushes através do console de administração 2 inscreva seu dispositivo no canal de notícias primeiro, vamos adicionar um canal ao seu objeto de instalação vamos fazer isso alterando o método createinstallationonparse createinstallationonparse no nosso arquivo app delegate abra o arquivo appdelegate m arquivo appdelegate m , e certifique se de que sua versão de createinstallationonparse createinstallationonparse é a mesma que o código abaixo appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } estamos adicionando uma nova linha de código ‘installation setobject(\[“news”], forkey “channels”)’ que definirá o array de canais do objeto de instalação para conter um canal chamado ‘news’ isso nos permitirá enviar uma mensagem para todos que se inscreverem no canal chamado news news via código em nuvem 2\ teste executando seu aplicativo em um dispositivo físico você não pode executar isso no simulador você precisará de um token de push real para atualizar seu registro de instalação, então um dispositivo físico é imprescindível 3\ depois que ele for executado com sucesso, você deve ver algo semelhante à imagem abaixo na instalação instalação seção do seu painel você pode verificar isso acessando o painel do seu aplicativo em site da back4app e, em seguida, verificando a tabela de instalação na coluna de canais, você deve ver notícias notícias , mostrando que você agora está inscrito no notícias notícias canal de push 3 crie seu cloud code para saber mais sobre como começar com cloud code veja tutorial de cloud code para ios crie um js js arquivo para colocar seu cloud code você precisa chamá lo de main js main js para que o back4app saiba que é aqui que você armazena seu código em nuvem defina uma função em nuvem, usando parse cloud define parse cloud define , para chamar a notificação push dentro da função, chamaremos parse push send parse push send para enviar um push para o canal ‘ news news ’ é necessário usar a chave mestre nesta operação o código a seguir executa esses passos parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 carregar para o cloud code vá para seu app em site do back4app e clique em painel painel encontre o cloud code cloud code e clique em funções e hospedagem web funções e hospedagem web ele se parece com isso 3\ carregue ou crie um novo arquivo (você também pode editar o main js main js arquivo diretamente no navegador) então, clique em implantar implantar como mostrado aqui 5 chame o cloud code do seu app ios agora, vamos escrever algum código para chamar esta função em nuvem do seu app você precisará tanto do simulador quanto de um dispositivo físico para completar esta tarefa você chamará a função em nuvem do seu app rodando no simulador e verá a notificação aparecer no seu dispositivo físico seu dispositivo físico deve estar realmente bloqueado com a tela de bloqueio ativada para ver a notificação uma notificação não aparecerá na tela se você estiver dentro do app que está enviando quando receber a notificação 2\ abra o arquivo viewcontroller swift viewcontroller swift do seu projeto precisamos incluir o parse no controlador de visualização adicionando o seguinte código ‘import parse’ no topo do arquivo viewcontroller swift 3\ em seguida, no viewcontroller swift viewcontroller swift arquivo, chamaremos uma função de alerta do método viewdidappear o alerta permitirá que você acione o código do cloud code que enviará um push para o seu dispositivo certifique se de incluir o seguinte bloco de código depois da viewdidload viewdidload função viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ execute seu aplicativo no simulador e, quando o alerta pedir para enviar o push, clique em “ok” no seu dispositivo físico, você deve ver o push aparecer na tela de bloqueio, assim 6 chamar o cloud code a partir da api rest a api rest fornece uma maneira rápida e fácil de testar se sua função cloud está funcionando basta usar o código abaixo no seu terminal ou prompt de comando clique para saber mais sobre como começar a usar a linha de comando em linux , macos ou windows para testar as notificações push, basta usar o código rest enquanto o dispositivo estiver fechado 7 enviar notificações push direcionadas usando um objeto de usuário daqui para frente, usaremos um projeto ios diferente que já possui recursos básicos de cadastro e login vamos usar este projeto ios que podemos mostrar como detectar se um usuário está logado e, se sim, salvar sua instalação com um link para seu id de objeto para consulta no código em nuvem você pode baixar o projeto ios completo construído com o tutorial desta seção em nosso repositório do github mas você ainda terá que fazer toda a configuração do tutorial anterior que explica como enviar pushes do painel do back4app você pode baixar o projeto ios completo construído com o tutorial desta seção em nosso repositório do github mas você ainda terá que fazer toda a configuração do tutorial anterior que explica como enviar pushes do painel do back4app obtenha a nova versão do aplicativo configurada e cadastre se ou faça login no aplicativo primeiro, certifique se de baixar o modelo funcional do nosso repositório do github não vamos passar por todas as etapas de construção deste aplicativo, em vez disso, vamos nos concentrar na configuração do código em nuvem e por que ele funciona assim que você abrir este novo aplicativo, certifique se de colocar as credenciais do seu próprio aplicativo no arquivo appdelegate swift appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ este aplicativo tem algumas diferenças importantes em relação ao aplicativo anterior ele possui 2 seções, uma para estar conectado ao seu aplicativo e uma seção quando você não está conectado ao seu aplicativo a próxima grande mudança é a função ‘createinstallationonparse’ do arquivo appdelegate swift adicionamos 1 linha que armazena o id do objeto do usuário como parte do objeto de instalação dessa forma, podemos saber qual usuário está associado a qual objeto de instalação e podemos direcioná los individualmente para notificações appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ como agora estamos armazenando o id do objeto do usuário como parte do objeto de instalação, não queremos solicitar um novo token de push até que o usuário esteja conectado não queremos solicitar um token diretamente da função ‘application didfinishlaunchingwithoptions’ do arquivo appdelegate swift, em vez disso, queremos chamá lo da função ‘viewdidappear’ do loggedinviewcontroller em ‘viewdidappear’ chamamos uma função no appdelegate para solicitar acesso a um token de notificação push da apple como você só pode visualizar esta seção uma vez que esteja conectado, podemos assumir que o usuário está conectado quando criamos o objeto de instalação, mas apenas para ter certeza, usamos uma ‘if let statement’ para desembrulhar o objeto parse currentuser() e recuperar o id do objeto loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ ok, agora, para se inscrever ou fazer login no seu dispositivo físico (iphone ou ipad) inicie o aplicativo você deve ver a imagem abaixo você deve se inscrever para criar um novo usuário ou fazer login se já tiver criado um usuário no seu aplicativo é assim que vai parecer agora você deve ser capaz de ver o loggedinviewcontroller deve parecer assim se você tentar enviar notificações para si mesmo, ainda não funcionará porque ainda não adicionamos esses métodos ao código da nuvem então, é isso que faremos a seguir 8 adicione os métodos de push direcionados ao código da nuvem abra seu main js main js arquivo que você criou anteriormente e adicione as seguintes funções para direcionar as instalações pelo id do usuário é necessário usar a chave mestre nesta operação parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 carregar para o cloud code vá para o seu app em site do back4app e clique em painel painel encontre o cloud code cloud code e clique em funções e hospedagem web funções e hospedagem web ele se parece com isso 3\ carregue ou crie um novo arquivo (você também pode editar o arquivo main js main js diretamente no navegador) em seguida, clique em implantar implantar como mostrado aqui 10 teste se você pode enviar notificações push direcionadas para si mesmo abra seu aplicativo no simulador enquanto mantém seu dispositivo físico fechado com a tela de bloqueio ativada você pode testar se ambas as funções de push estão funcionando pressionando o botão ‘enviar push para si mesmo’ e o botão ‘enviar push para um grupo de pessoas’ você deve ver os pushes aparecerem na tela de bloqueio do seu dispositivo considerações finais agora, você deve ter uma compreensão firme de como enviar pushes com base no canal de um usuário ou no id do objeto de um usuário ou qualquer outra consulta que envolva obter o id do objeto do usuário lembre se de que, para armazenar o id do objeto do usuário, você deve adicioná lo à instalação do push e solicitar um token de push apenas quando o usuário estiver logado ao enviar pushes via consulta, esteja ciente de que é limitado por padrão a 100 resultados e alguns usuários podem ter mais de um objeto de instalação além disso, não é recomendado enviar pushes para um array de objetos de instalação que sejam maiores que 100 resultados isso pode resultar em alguns pushes não sendo enviados se você estiver lidando com grandes grupos de pessoas, é melhor usar canais ou enviar os pushes em solicitações repetidas está feito! neste estágio, você pode enviar notificações push usando cloud code através do back4app! parabéns!