{"id":1590,"date":"2024-10-14T15:55:14","date_gmt":"2024-10-14T18:55:14","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=1590"},"modified":"2025-11-27T13:08:16","modified_gmt":"2025-11-27T16:08:16","slug":"interagindo-com-hardware-pwa","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/","title":{"rendered":"Interagindo com hardware 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\"><strong>Interagindo com hardware PWA<\/strong>: A capacidade de um <strong>Progressive Web App (PWA)<\/strong> de acessar e utilizar o hardware do dispositivo \u00e9 um fator chave que o eleva ao patamar de um aplicativo nativo. Por meio de APIs web padronizadas e seguras, as PWAs podem explorar recursos como <strong>c\u00e2mera, sensores e geolocaliza\u00e7\u00e3o<\/strong>, criando experi\u00eancias altamente interativas e contextuais.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">\u00c9 crucial lembrar que todo acesso a hardware \u00e9 regido pelo princ\u00edpio de <strong>permiss\u00e3o expl\u00edcita do usu\u00e1rio<\/strong> e deve ser feito via <strong>HTTPS<\/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. \ud83d\uddfa\ufe0f Localiza\u00e7\u00e3o e Multim\u00eddia (APIs Cl\u00e1ssicas)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Essas APIs s\u00e3o amplamente suportadas e formam a base da intera\u00e7\u00e3o de hardware na web.<\/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. Geolocaliza\u00e7\u00e3o (<code>navigator.geolocation<\/code>)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Permite determinar a posi\u00e7\u00e3o geogr\u00e1fica do dispositivo do usu\u00e1rio (latitude e longitude) usando GPS, Wi-Fi ou dados de rede.<\/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>navigator.geolocation.getCurrentPosition(\n  (position) =&gt; {\n    \/\/ Retorna a localiza\u00e7\u00e3o atual\n    console.log(\"Latitude: \" + position.coords.latitude);\n  },\n  (error) =&gt; {\n    \/\/ Lidar com o usu\u00e1rio negando a permiss\u00e3o\n    console.error(\"Erro ao obter a localiza\u00e7\u00e3o:\", error.message);\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. C\u00e2mera e Microfone (<code>navigator.mediaDevices.getUserMedia<\/code>)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A API <code>MediaDevices<\/code> (parte da WebRTC) fornece acesso aos dispositivos de entrada de m\u00eddia, como c\u00e2mera e microfone, permitindo a captura de \u00e1udio e v\u00eddeo em tempo real.<\/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>\/\/ Solicita acesso \u00e0 c\u00e2mera\nnavigator.mediaDevices.getUserMedia({ video: true, audio: false })\n  .then(stream =&gt; {\n    const videoElement = document.getElementById('camera-feed');\n    \/\/ Exibe o stream de v\u00eddeo em um elemento &lt;video&gt;\n    videoElement.srcObject = stream; \n    videoElement.play();\n  })\n  .catch(err =&gt; {\n    console.error(\"Erro ao acessar a c\u00e2mera. Permiss\u00e3o negada ou hardware indispon\u00edvel:\", err);\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\">2. \ud83e\uddbe Sensores e Intera\u00e7\u00e3o F\u00edsica<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">APIs espec\u00edficas permitem que o PWA reaja ao movimento, orienta\u00e7\u00e3o e intera\u00e7\u00e3o direta do usu\u00e1rio com a tela.<\/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. Sensores de Movimento e Orienta\u00e7\u00e3o<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Permite que as PWAs usem o <strong>Aceler\u00f4metro<\/strong> (movimento linear) e o <strong>Girosc\u00f3pio<\/strong> (orienta\u00e7\u00e3o rotacional) para criar experi\u00eancias imersivas (ex: jogos, realidade virtual).<\/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>\/\/ Ouve eventos de movimento do dispositivo (acelera\u00e7\u00e3o, rota\u00e7\u00e3o)\nwindow.addEventListener('devicemotion', (event) =&gt; {\n  \/\/ Dados de acelera\u00e7\u00e3o\n  const x = event.accelerationIncludingGravity.x; \n  console.log(`Inclina\u00e7\u00e3o no eixo X: ${x}`);\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. Touch e Ponteiro<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O gerenciamento de eventos de toque \u00e9 fundamental para a UX m\u00f3vel, permitindo gestos como <em>swipe<\/em> e <em>pinch-to-zoom<\/em>.<\/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>const element = document.getElementById('touch-area');\n\n\/\/ Detecta o in\u00edcio de um toque\nelement.addEventListener('touchstart', (event) =&gt; {\n  \/\/ Previne o comportamento padr\u00e3o do navegador (ex: scroll)\n  event.preventDefault(); \n  console.log(`N\u00famero de toques: ${event.touches.length}`);\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\">C. Gamepads API<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Permite que PWAs se conectem a controladores de jogos (Gamepads) via Bluetooth ou USB, ampliando o potencial para jogos e simula\u00e7\u00f5es.<\/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>\/\/ Captura o estado dos gamepads conectados\nconst controllers = navigator.getGamepads();\nif (controllers&#91;0]) {\n  console.log('Bot\u00e3o A (\u00cdndice 0):', controllers&#91;0].buttons&#91;0].pressed);\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\">3. \ud83d\udd12 Autentica\u00e7\u00e3o e APIs Avan\u00e7adas<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Com o desenvolvimento do <strong>Projeto Fugu<\/strong> (Recursos Experimentais), as PWAs ganham acesso a funcionalidades de seguran\u00e7a e baixo n\u00edvel do sistema.<\/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. Autentica\u00e7\u00e3o Biom\u00e9trica (Web Authentication API &#8211; WebAuthn)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Permite autenticar usu\u00e1rios de forma segura usando recursos biom\u00e9tricos do dispositivo (impress\u00e3o digital, reconhecimento facial) sem depender de senhas tradicionais.<\/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>\/\/ Exemplo simplificado de solicita\u00e7\u00e3o de credencial\nnavigator.credentials.get({\n    publicKey: { \n        \/\/ Par\u00e2metros de desafio e ID de usu\u00e1rio \n        \/\/ (Requer um setup robusto no servidor)\n    }\n})\n.then(credential =&gt; {\n    \/\/ Credencial biom\u00e9trica validada\n})\n.catch(error =&gt; {\n    console.error(\"Falha na autentica\u00e7\u00e3o biom\u00e9trica:\", error);\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. Outras APIs Fugu (Avan\u00e7adas)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Essas APIs, ainda em fase de teste (principalmente em navegadores Chromium), estendem as capacidades do PWA:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Web Bluetooth:<\/strong> Permite conex\u00e3o a dispositivos Bluetooth de baixa energia.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Web NFC:<\/strong> Intera\u00e7\u00e3o com tags NFC.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Web Serial API:<\/strong> Comunica\u00e7\u00e3o com dispositivos conectados por porta serial (ex: microcontroladores).<\/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\">4. \u2696\ufe0f Considera\u00e7\u00f5es \u00c9ticas e de UX<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Permiss\u00f5es:<\/strong> Sempre solicite permiss\u00f5es de forma <strong>contextualizada<\/strong> (somente quando a funcionalidade for realmente necess\u00e1ria) e explique o porqu\u00ea do acesso. O usu\u00e1rio deve ser o agente de controle.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Otimiza\u00e7\u00e3o e Bateria:<\/strong> O acesso cont\u00ednuo a sensores (como geolocaliza\u00e7\u00e3o em tempo real) consome muita bateria. Utilize t\u00e9cnicas de <em>throttling<\/em> ou desative os sensores quando o aplicativo estiver em segundo plano.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Fallback:<\/strong> Forne\u00e7a mecanismos de <em>fallback<\/em> claros caso o dispositivo n\u00e3o suporte uma API espec\u00edfica ou o usu\u00e1rio negue a permiss\u00e3o.<\/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 Interagindo com hardware PWA<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Interagindo com hardware PWA<\/strong>: As PWAs oferecem um vasto leque de intera\u00e7\u00f5es de hardware, desde a <strong>Geolocaliza\u00e7\u00e3o<\/strong> e <strong>M\u00eddia<\/strong> (APIs cl\u00e1ssicas) at\u00e9 o uso de <strong>Sensores de Movimento<\/strong> e <strong>Autentica\u00e7\u00e3o Biom\u00e9trica<\/strong> (APIs modernas). <\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ao integrar essas funcionalidades de forma respons\u00e1vel e com foco na UX, voc\u00ea pode criar PWAs que s\u00e3o indistingu\u00edveis de aplicativos nativos, proporcionando experi\u00eancias inovadoras e altamente personalizadas para o usu\u00e1rio.<\/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>Interagindo com hardware PWA: A capacidade de um Progressive Web App (PWA) de acessar e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1497,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-1590","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.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Interagindo com hardware PWA - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...\" \/>\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\/interagindo-com-hardware-pwa\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Interagindo com hardware PWA - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-14T18:55:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-27T16:08:16+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\\\/interagindo-com-hardware-pwa\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Interagindo com hardware PWA\",\"datePublished\":\"2024-10-14T18:55:14+00:00\",\"dateModified\":\"2025-11-27T16:08:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/\"},\"wordCount\":636,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"articleSection\":[\"PWA\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/\",\"name\":\"Interagindo com hardware PWA - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/08\\\/Capa-Artigos.webp\",\"datePublished\":\"2024-10-14T18:55:14+00:00\",\"dateModified\":\"2025-11-27T16:08:16+00:00\",\"description\":\"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/interagindo-com-hardware-pwa\\\/#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\\\/interagindo-com-hardware-pwa\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Interagindo com hardware 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":"Interagindo com hardware PWA - BLOG THIAGO ROSSI","description":"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...","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\/interagindo-com-hardware-pwa\/","og_locale":"pt_BR","og_type":"article","og_title":"Interagindo com hardware PWA - BLOG THIAGO ROSSI","og_description":"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2024-10-14T18:55:14+00:00","article_modified_time":"2025-11-27T16:08:16+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\/interagindo-com-hardware-pwa\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Interagindo com hardware PWA","datePublished":"2024-10-14T18:55:14+00:00","dateModified":"2025-11-27T16:08:16+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/"},"wordCount":636,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","articleSection":["PWA"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/","url":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/","name":"Interagindo com hardware PWA - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/Capa-Artigos.webp","datePublished":"2024-10-14T18:55:14+00:00","dateModified":"2025-11-27T16:08:16+00:00","description":"Interagindo com hardware PWA: Neste artigo, exploraremos as diversas possibilidades de intera\u00e7\u00e3o entre PWAs e hardware, com exemplos de ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/interagindo-com-hardware-pwa\/#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\/interagindo-com-hardware-pwa\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Interagindo com hardware 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\/1590","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=1590"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/1590\/revisions"}],"predecessor-version":[{"id":5023,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/1590\/revisions\/5023"}],"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=1590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}