{"id":5024,"date":"2025-11-27T13:19:21","date_gmt":"2025-11-27T16:19:21","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5024"},"modified":"2025-11-27T13:19:22","modified_gmt":"2025-11-27T16:19:22","slug":"notificacoes-push","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/","title":{"rendered":"Notifica\u00e7\u00f5es Push em PWA"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">As <strong>Notifica\u00e7\u00f5es Push<\/strong> s\u00e3o o recurso final que permite que um <strong>Progressive Web App (PWA)<\/strong> transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao sistema operacional. Elas possibilitam que seu PWA <strong>receba mensagens em tempo real<\/strong> e <strong>alerta o usu\u00e1rio<\/strong> sobre novos conte\u00fados ou eventos, mesmo quando o aplicativo est\u00e1 fechado ou o navegador n\u00e3o est\u00e1 ativo.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Esta funcionalidade \u00e9 totalmente habilitada pelo <strong>Service Worker (SW)<\/strong>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. \u2699\ufe0f Arquitetura das Notifica\u00e7\u00f5es Push<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O sistema de Notifica\u00e7\u00f5es Push envolve quatro componentes principais que trabalham em conjunto:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>A PWA (Cliente):<\/strong> O c\u00f3digo JavaScript que solicita permiss\u00e3o e gera a chave de assinatura.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Service Worker (SW):<\/strong> O ouvinte em segundo plano que <strong>intercepta a mensagem push<\/strong> e a exibe como uma notifica\u00e7\u00e3o.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Servi\u00e7o Push:<\/strong> O servidor de mensagens do navegador (ex: FCM do Google, APNs da Apple), que recebe a mensagem do seu servidor e a entrega ao dispositivo.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Servidor da Aplica\u00e7\u00e3o:<\/strong> O seu <em>backend<\/em> (API) que armazena a chave de assinatura do usu\u00e1rio e envia a mensagem de notifica\u00e7\u00e3o para o Servi\u00e7o Push.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. \ud83d\udd11 Habilitando Notifica\u00e7\u00f5es: Inscri\u00e7\u00e3o e Permiss\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O processo de envio de uma notifica\u00e7\u00e3o come\u00e7a com a inscri\u00e7\u00e3o do usu\u00e1rio e a solicita\u00e7\u00e3o de permiss\u00e3o.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. Solicitando Permiss\u00e3o<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O acesso \u00e0 API de Notifica\u00e7\u00f5es Push requer a permiss\u00e3o expl\u00edcita do usu\u00e1rio. Esta solicita\u00e7\u00e3o deve ser feita de forma <strong>contextualizada<\/strong> (ap\u00f3s o usu\u00e1rio demonstrar interesse).<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Frontend JavaScript (no lado da aplica\u00e7\u00e3o)\nfunction subscribeUser() {\n  if ('Notification' in window) {\n    Notification.requestPermission().then(permission =&gt; {\n      if (permission === 'granted') {\n        \/\/ Prossegue para a inscri\u00e7\u00e3o\n        subscribeToPushService(); \n      } else {\n        console.log('Permiss\u00e3o de notifica\u00e7\u00e3o negada.');\n      }\n    });\n  }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. Inscri\u00e7\u00e3o e Chave VAPID<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ap\u00f3s a permiss\u00e3o ser concedida, o PWA usa o Service Worker para se <strong>inscrever no Servi\u00e7o Push<\/strong> do navegador, gerando um objeto <strong><code>PushSubscription<\/code><\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Este objeto cont\u00e9m o <strong>endpoint<\/strong> (o endere\u00e7o \u00fanico do Servi\u00e7o Push) e a chave p\u00fablica de criptografia, essenciais para enviar a mensagem.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ O Service Worker \u00e9 a base para a inscri\u00e7\u00e3o\nfunction subscribeToPushService() {\n  navigator.serviceWorker.ready.then(registration =&gt; {\n    \/\/ Chave VAPID p\u00fablica (necess\u00e1ria para autentica\u00e7\u00e3o)\n    const applicationServerKey = urlBase64ToUint8Array('SUA_CHAVE_VAPID_PUBLICA'); \n\n    registration.pushManager.subscribe({\n      userVisibleOnly: true, \/\/ Requisito: a notifica\u00e7\u00e3o deve ser vis\u00edvel\n      applicationServerKey: applicationServerKey\n    })\n    .then(subscription =&gt; {\n      \/\/ 1. Envie este objeto 'subscription' (endpoint e keys) para o seu servidor\n      sendSubscriptionToServer(subscription); \n      console.log('Usu\u00e1rio inscrito com sucesso:', subscription);\n    });\n  });\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. \ud83d\udee1\ufe0f Interceptando e Exibindo a Notifica\u00e7\u00e3o<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O <strong>Service Worker<\/strong> \u00e9 o \u00fanico componente que pode interceptar o evento push do servidor, mesmo quando o PWA est\u00e1 fechado.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">A. O Evento <code>push<\/code> (No Service Worker)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O SW ouve o evento <code>push<\/code>. Quando a mensagem do servidor chega:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ service-worker.js\nself.addEventListener('push', (event) =&gt; {\n  \/\/ O payload da mensagem push (dados do seu servidor)\n  const data = event.data.json(); \n  \n  const title = data.title || 'Nova Mensagem';\n  const options = {\n    body: data.body || 'Voc\u00ea tem uma atualiza\u00e7\u00e3o.',\n    icon: '\/icons\/icon-192x192.png', \/\/ \u00cdcone exibido na notifica\u00e7\u00e3o\n    badge: '\/icons\/badge.png', \/\/ \u00cdcone exibido na barra de status (Android)\n    data: { url: data.url } \/\/ Dados adicionais para usar no clique\n  };\n\n  \/\/ Exibe a notifica\u00e7\u00e3o na tela do usu\u00e1rio\n  event.waitUntil(self.registration.showNotification(title, options));\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">B. O Evento <code>notificationclick<\/code> (No Service Worker)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Quando o usu\u00e1rio clica na notifica\u00e7\u00e3o, o SW intercepta o evento e pode executar a\u00e7\u00f5es, como abrir o PWA em uma URL espec\u00edfica.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">JavaScript<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ service-worker.js\nself.addEventListener('notificationclick', (event) =&gt; {\n  event.notification.close(); \/\/ Fecha a notifica\u00e7\u00e3o\n\n  \/\/ Recupera a URL de destino\n  const targetUrl = event.notification.data.url || '\/'; \n\n  event.waitUntil(\n    \/\/ Abre ou foca a janela do PWA na URL de destino\n    clients.openWindow(targetUrl) \n  );\n});\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. \ud83d\ude80 Enviando a Mensagem (Lado do Servidor)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O servidor da sua aplica\u00e7\u00e3o \u00e9 respons\u00e1vel por:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Armazenar as chaves de inscri\u00e7\u00e3o (<code>PushSubscription<\/code>) de todos os usu\u00e1rios.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Usar uma biblioteca (como <strong>web-push<\/strong> em Node.js) para enviar a mensagem (o <em>payload<\/em>) para o Servi\u00e7o Push (usando o <em>endpoint<\/em> e as chaves de criptografia).<\/li>\n\n\n\n<li class=\"has-medium-font-size\">A mensagem deve ser enviada com autentica\u00e7\u00e3o <strong>VAPID<\/strong> (Voluntary Application Server Identification), garantindo que apenas seu servidor possa enviar mensagens ao seu PWA.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. \ud83c\udf4f Considera\u00e7\u00f5es Espec\u00edficas do iOS\/Safari<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Historicamente, o suporte para Notifica\u00e7\u00f5es Push em PWAs instaladas no iOS era limitado.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>iOS 16.4 e superior:<\/strong> A Apple introduziu suporte para <strong>Notifica\u00e7\u00f5es Push em PWAs instaladas<\/strong> no iOS e iPadOS. Isso funciona de forma semelhante ao Android, exigindo o uso da mesma arquitetura <strong>Push API<\/strong> e <strong>Service Worker<\/strong>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Requisito iOS:<\/strong> O PWA deve ser <strong>instalado<\/strong> na tela inicial para receber Notifica\u00e7\u00f5es Push.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">\u2705 Conclus\u00e3o <strong>Notifica\u00e7\u00f5es Push<\/strong><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Notifica\u00e7\u00f5es Push<\/strong>: As <strong>Notifica\u00e7\u00f5es Push<\/strong> s\u00e3o a funcionalidade final para elevar um PWA ao n\u00edvel de um aplicativo nativo em termos de engajamento. O processo requer a coopera\u00e7\u00e3o de quatro partes \u2013 o PWA solicita permiss\u00e3o, o <strong>Service Worker<\/strong> se inscreve e ouve, o <strong>Servi\u00e7o Push<\/strong> entrega a mensagem, e seu <strong>Servidor<\/strong> envia o <em>payload<\/em> criptografado. Ao implementar corretamente os eventos <strong><code>push<\/code><\/strong> e <strong><code>notificationclick<\/code><\/strong> no seu Service Worker, voc\u00ea garante que seu PWA pode alertar e reengajar os usu\u00e1rios de forma eficaz, mesmo quando o aplicativo n\u00e3o est\u00e1 em uso.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Toda jornada tem um in\u00edcio, e o in\u00edcio para se tornar um desenvolvedor web \u00e9 dominar as seguintes tecnologias, que voc\u00ea encontra aqui mesmo:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/html\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/css\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/category\/javascript\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA)&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1497,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-5024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pwa","wpcat-16-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-27T16:19:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T16:19:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Notifica\u00e7\u00f5es Push em PWA\",\"datePublished\":\"2025-11-27T16:19:21+00:00\",\"dateModified\":\"2025-11-27T16:19:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/\"},\"wordCount\":700,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"articleSection\":[\"PWA\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/\",\"name\":\"Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"datePublished\":\"2025-11-27T16:19:21+00:00\",\"dateModified\":\"2025-11-27T16:19:22+00:00\",\"description\":\"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"width\":758,\"height\":426,\"caption\":\"PWA\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/notificacoes-push\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Notifica\u00e7\u00f5es Push em PWA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI","description":"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/","og_locale":"pt_BR","og_type":"article","og_title":"Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI","og_description":"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..","og_url":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2025-11-27T16:19:21+00:00","article_modified_time":"2025-11-27T16:19:22+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","type":"image\/webp"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Notifica\u00e7\u00f5es Push em PWA","datePublished":"2025-11-27T16:19:21+00:00","dateModified":"2025-11-27T16:19:22+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/"},"wordCount":700,"commentCount":0,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","articleSection":["PWA"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/","url":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/","name":"Notifica\u00e7\u00f5es Push em PWA - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","datePublished":"2025-11-27T16:19:21+00:00","dateModified":"2025-11-27T16:19:22+00:00","description":"As Notifica\u00e7\u00f5es Push s\u00e3o o recurso final que permite que um Progressive Web App (PWA) transcenda a experi\u00eancia de navega\u00e7\u00e3o e se integre ao..","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","width":758,"height":426,"caption":"PWA"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/notificacoes-push\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Notifica\u00e7\u00f5es Push em PWA"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5024"}],"version-history":[{"count":1,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5024\/revisions"}],"predecessor-version":[{"id":5025,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5024\/revisions\/5025"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/1497"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}