<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>PWA Archives - Hiago Silva Souza</title>
	<atom:link href="https://www.hiago.me/category/pwa/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hiago.me/category/pwa/</link>
	<description></description>
	<lastBuildDate>Sat, 08 Sep 2018 22:40:44 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.5</generator>

<image>
	<url>https://www.hiago.me/wp-content/uploads/2019/01/cropped-icon-hiagus-2-32x32.png</url>
	<title>PWA Archives - Hiago Silva Souza</title>
	<link>https://www.hiago.me/category/pwa/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">147457425</site>	<item>
		<title>Ionic &#038; Angular: Fazendo o CORS seu amigo</title>
		<link>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/</link>
					<comments>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sat, 08 Sep 2018 18:03:07 +0000</pubDate>
				<category><![CDATA[Infraestrutura]]></category>
		<category><![CDATA[Ionic]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[angular]]></category>
		<category><![CDATA[cors]]></category>
		<category><![CDATA[ionic]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[técnicas]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=418</guid>

					<description><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de segurança e como fazer o seu uso de forma consciente e clara. Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Se esse post chamou sua atenção, com certeza você já teve ou ainda tem problemas com o CORS. Meu objetivo aqui é mostrar a importância desse mecanismo de <em><strong>segurança</strong></em> e como fazer o seu uso de forma consciente e clara.</p>
<p>Antes de criticarmos ou falar que algo é ruim, é bom entendermos o motivo pelo qual aquilo existe.</p>
<h1>Porque o CORS existe?</h1>
<p>O CORS (do inglês cross-origin resource sharing) é um mecanismo que permite que os conteúdos de domínios diferentes sejam compartilhados. Ele existe para evitar que o conteúdo de um determinado domínio seja utilizado por outro sem a autorização do mesmo.</p>
<p>Exemplo: supondo que eu queira exibir os conteúdos do youtube em meu site, faço uma análise das requisições HTTP&#8217;s feitas pelo youtube, obtendo os parâmetros da chamada criaria uma UI para usar as informações do youtube, tirando assim proveiro dos dados deles. O CORS impediria que essa ação fosse executada na <em>camada do navegador</em>, ou seja é uma segurança para você!</p>
<h1>Como funcionar o CORS?</h1>
<p>O CORS vai analisar se o recurso que você tenta carregar está sob o mesmo domínio e porta. Com isso mesmo que você tenha sua API rodando no endereço &#8220;http://localhost:8080&#8221; e sua aplicação ionic/angular rodando em suas respectivas portas (8100/4200) ao chamar a API com toda certeza vai ter sua requisição bloqueada e vai receber a mensagem de CORS.</p>
<p>Quando você não está sob o mesmo domínio você vai notar na parte de redes que uma requisição http gera 2 outras chamadas. A primeira chamada usa o verbo http OPTIONS, ele é utilizado pelo navegador para perguntar ao  seu servidor/aplicação quais os tipos de requisição sua aplicação permite e é no OPTIONS que você deve informar suas configurações do CORS através de Headers.</p>
<h2>Opções para o CORS</h2>
<ol>
<li><strong>Access-Control-Allow-Origin: </strong>Header utilizado para informar quais domínios você <em><strong>permite</strong></em> que use o seu conteúdo.</li>
<li><strong>Access-Control-Allow-Methods:</strong> Header utilizado para informar quais verbos http você <em><strong>permite</strong></em> a partir dos <em><strong>domínios</strong></em> liberados.</li>
<li><strong>Access-Control-Allow-Headers:</strong> Header utilizado para informar quais &#8220;Headers&#8221; os domínios liberados podem enviar para você.</li>
<li><strong>Access-Control-Max-Age:</strong> Header utilizado para informar quanto tempo é válido essas configurações de CORS.</li>
</ol>
<h1>O que não devo fazer?</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_3]</span></p>
<p>Bom acho que a primeira coisa que você deve se questionar é: Preciso realmente liberar o CORS em seu ambiente? Mesmo em aplicações ionic a liberação não é necessária. O mesmo para Angular, vendo que em produção o domínio será o mesmo (ou não rs).</p>
<p>Mas vamos lá, supondo que você chegou a conclusão que liberar o CORS é realmente necessário, não faça isso &#8220;<strong>Access-Control-Allow-Origin: *</strong>&#8221; ao fazer isso você está simplesmente tirando uma camada de segurança que foi criada para você. Caso você esteja rodando uma aplicação ionic (já compilada), não é necessário liberar o CORS mas caso queira liberar é necessário apenas  permitir o endereço http://localhost:8080/ que é o endereço que o ionic utiliza para carregar sua aplicação compilada ou seja a liberação correta (caso deseje fazer) é &#8220;<strong>Access-Control-Allow-Origin: http://localhost:8080</strong>&#8220;.</p>
<p>Outra coisa bem importante é o <strong>Access-Control-Max-Age </strong>geralmente nos tutoriais ninguém comenta sobre ele. Lembra aquela segunda requisição? A do tipo OPTIONS, então ela é feita quando expira o <strong>Access-Control-Max-Age </strong>então se você não falar para o navegador que essas definições só mudam de X em X tempos todo e qualquer request que você fizer o seu servidor vai receber duas requisições (cada browser tem seu tempo padrão). Em ambiente de desenvolvimento, geralmente desabilitamos os cache&#8217;s e com isso o <strong>Access-Control-Max-Age</strong> não vai fazer efeito. Mas em ambiente de produção é algo muito importante.</p>
<h1>Como assim não preciso liberar o CORS para o ionic?</h1>
<p>Sim é isso mesmo, não precisa! E já vou explicar o motivo. Quando você desenvolve seu aplicativo, você geralmente testa seu projeto seu navegador e ele implementa o Same-Origin-Policy por isso que você tem problemas com CORS e acaba fazendo tudo quanto é tipo de liberação. Porém quando o seu aplicativo é compilado para APK ou IPA o ionic de forma nativa consegue desabilitar o CORS da WebView (e eles já fazem isso).</p>
<p>Vale lembrar que para o iOS o ionic sempre usou o <em><strong>UIWebView</strong></em> só que agora eles migraram para o <em><strong>MKWebView</strong></em> e no iOS eles não conseguem desabilitar o CORS nessa webview em especifico =/. Então ou você faz um downgrade da webview, ou você libera o CORS para a origem &#8220;<strong>http://localhost:8080</strong>&#8221; ai é uma decisão pessoal, basta acessar a <a href="https://ionicframework.com/docs/wkwebview/">documentação</a> com as melhorias propostas pela <em><strong>MKWebView</strong></em> e colocar na balança.</p>
<p>Para fazer o downgrade da WebView basta colocar o conteúdo abaixo em seu config.xml para a plataforma iOS:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;preference name=&quot;CordovaWebViewEngine&quot; value=&quot;CDVUIWebViewEngine&quot; /&gt;

</pre>
<h1>E meu ambiente de desenvolvimento, como faço?</h1>
<p>Então para você desabilitar a checagem do CORS em seu ambiente de desenvolvimento você pode fazer uso de uma <a href="https://chrome.google.com/webstore/detail/moesif-origin-cors-change/digfbfaphojjndkpccljibejjbppifbc">extensão do google chrome </a>mas eu não recomendo, tive muitos problemas com essa extensão. Ela liberou o CORS mas sempre me trouxe problema com encodings em outros sites que eu acessava.</p>
<h2>Não quer usar a extensão?</h2>
<p>Então vamos lá, o ionic e o angular tem um recurso bem interessante e muito pouco conhecido que tem exatamente essa função (impedir problemas com CORS) são os proxies.  É algo bem simples, mas eles são apenas para ambientes de desenvolvimento. Então não se esqueça de criar uma configuração para seu endpoint  🙂</p>
<h2>O que é um proxy? Como ele funciona?</h2>
<p>Um proxy basicamente é um serviço intermediário entre você e seu servidor de aplicação, ele recebe sua requisição e repassa ela para o servidor original.</p>
<p>Vamos criar o seguinte cenário: Tenho a url (http://localhost:8888/) rodando um backend, então vamos criar um mapeamento para informar que tudo que for chamado na uri <strong>/api </strong>seja passado para o backend.</p>
<p>Vamos supor que você esteja desenvolvendo em uma aplicação ionic, ao digitar o endereço http://localhost:8100/api/criar-usuario ele vai redirecionar internamente no processo do ionic serve a requisição para http://localhost:8888/criar-usuario então sua aplicação vai estar chamando uma URL que está no mesmo <strong>domínio</strong> e na mesma <strong>porta </strong>assim a Same-Origin-Policy não vai ser aplicada e você pode seguir seu desenvolvimento sem necessidade de liberar o CORS para desenvolver.</p>
<h1>Configurando o proxy no ionic</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_2]</span></p>
<p>Para configurar o proxy no ionic basta abrir o arquivo <strong>ionic.config.json </strong>e criar uma nova propriedade chamada <strong>proxies</strong> e nela definir seus paths.</p>
<p>Exemplo:</p>
<pre class="brush: jscript; title: ; notranslate">
{
	&quot;name&quot;: &quot;app-meuapp&quot;,
	&quot;app_id&quot;: &quot;&quot;,
	&quot;type&quot;: &quot;ionic-angular&quot;,
	&quot;proxies&quot;: &#x5B;{
		&quot;path&quot;: &quot;/api&quot;,
		&quot;proxyUrl&quot;: &quot;http://localhost:8888/&quot;
	}],
	&quot;integrations&quot;: {
		&quot;cordova&quot;: {}
	}
}
</pre>
<h1>Configurando o proxy no Angular</h1>
<p>Para fazer a configuração de seu proxy no Angular o processo é semelhante. Para isso é necessário criar um arquivo JSON com as configurações os paths desejados. Então vamos criar o arquivo <strong>proxy.conf.json </strong>e vamos colocar o conteúdo abaixo. Após isso basta você inicializar seu projeto com o comando <strong>ng serve &#8211;proxy-config proxy.conf.json.</strong></p>
<p>Observação: Recomendo que coloque esse comando na chave start do <strong>package.json</strong> assim você só vai precisar rodar o comando <strong>npm start</strong></p>
<p>Conteúdo para o proxy.conf.json</p>
<pre class="brush: jscript; title: ; notranslate">
{
  &quot;/api&quot;: {
    &quot;target&quot;: &quot;http://localhost:8888&quot;,
    &quot;secure&quot;: false
  }
}
</pre>
<h1>Conclusão</h1>
<p><span style="display: inline !important; float: none; background-color: transparent; color: #333333; cursor: text; font-family: 'Source Sans Pro',Arial,sans-serif; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;">[wp_ad_camp_1]</span></p>
<p>O CORS é um recurso de segurança muito importante e precisamos gerenciar ele de acordo com as necessidades do nosso projeto, fazendo o uso das técnicas mencionadas nesse post é possível trabalhar sem dor de cabeça e claro ter um desenvolvimento saudável e seguro.</p>
<p>The post <a href="https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/">Ionic &#038; Angular: Fazendo o CORS seu amigo</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/09/08/ionic-angular-fazendo-o-cors-seu-amigo/feed/</wfw:commentRss>
			<slash:comments>28</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">418</post-id>	</item>
		<item>
		<title>PWA: Progressive Web Apps no iOS chegaram ?</title>
		<link>https://www.hiago.me/2018/04/01/pwa-progressive-web-apps-no-ios-chegaram/</link>
					<comments>https://www.hiago.me/2018/04/01/pwa-progressive-web-apps-no-ios-chegaram/#comments</comments>
		
		<dc:creator><![CDATA[Hiago Souza]]></dc:creator>
		<pubDate>Sun, 01 Apr 2018 10:41:21 +0000</pubDate>
				<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Novas Tecnologias]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[liberado]]></category>
		<category><![CDATA[pwa]]></category>
		<guid isPermaLink="false">https://www.hiago.me/?p=268</guid>

					<description><![CDATA[<p>Apesar desse post esta sendo escrito dia primeiro de abril, não é mentira não galerinha. É isso mesmo a Apple adicionou de forma &#8220;discreta&#8221; PWA&#8217;s no iOS 11.3. O conteúdo abaixo é uma tradução de um post do Maximiliano feita no Meredium. Vamos lá! [wp_ad_camp_3] Com a chegada do iOS 11.3, a Apple adicionou silenciosamente &#8230;</p>
<p>The post <a href="https://www.hiago.me/2018/04/01/pwa-progressive-web-apps-no-ios-chegaram/">PWA: Progressive Web Apps no iOS chegaram ?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Apesar desse post esta sendo escrito dia primeiro de abril, não é mentira não galerinha. É isso mesmo a Apple adicionou de forma &#8220;discreta&#8221; PWA&#8217;s no iOS 11.3. O conteúdo abaixo é uma tradução de um post do Maximiliano feita no Meredium.</p>
<h2>Vamos lá!</h2>
<p>[wp_ad_camp_3]</p>
<p>Com a chegada do iOS 11.3, a Apple adicionou silenciosamente os o suporte ao conjunto básico de novas tecnologias por trás da ideia dos &#8220;Progressive Web Apps&#8221; (PWA&#8217;s). Agora é h<span id="result_box" class="" lang="pt"><span class="">ora de ver como elas funcionam, quais são seus recursos e desafios, e o que você precisa saber caso já tem um PWA publicado.</span></span></p>
<figure id="attachment_269" aria-describedby="caption-attachment-269" style="width: 480px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" class="wp-image-269 " src="https://www.hiago.me/wp-content/uploads/2018/04/1-3Lym8IvTuv0LbghC6wtp8w-300x225.png" alt="imagem do Trivado" width="480" height="360" srcset="https://www.hiago.me/wp-content/uploads/2018/04/1-3Lym8IvTuv0LbghC6wtp8w-300x225.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/1-3Lym8IvTuv0LbghC6wtp8w-768x576.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/1-3Lym8IvTuv0LbghC6wtp8w-1024x768.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/1-3Lym8IvTuv0LbghC6wtp8w.png 1266w" sizes="(max-width: 480px) 100vw, 480px" /><figcaption id="caption-attachment-269" class="wp-caption-text">Este aplicativo é um PWA e parece tela cheia -offline capaz em um iPad. Ele também aparece no dock do iPad como qualquer outro aplicativo nativo da App Store.</figcaption></figure>
<p><span id="result_box" class="" lang="pt"><span class="">Se você veio até aqui e ainda não sabe o que é um PWA, vamos começar dizendo que não há uma definição única ou precisa.</span> <span class="">Mas é um aplicativo criado com tecnologias da Web que, sem empacotar ou assinar, pode funcionar offline e pode, opcionalmente, ser instalado no sistema operacional, onde ele será exibido e funcionará como qualquer outro aplicativo.</span></span></p>
<p><span id="result_box" class="" lang="pt"><span class="">Não há nenhum processo de &#8220;Lojas para Aplicativos&#8221; envolvido na maioria das plataformas &#8211; somente o Edge / Windows 10 está atualmente forçando os PWA&#8217;s a estarem na loja.</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Então você está certo, agora você pode instalar aplicativos no iOS sem a aprovação da App Store.</span> <span class="">Esse é provavelmente um dos motivos pelos quais a Apple não mencionou nada sobre essa novo recurso;</span> <span class="">eles podem não querer confundir os usuários.</span> <span class="">Nem mesmo as notas de lançamento do Safari mencionam as tecnologias.</span></span></p>
<figure id="attachment_271" aria-describedby="caption-attachment-271" style="width: 487px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-271" src="https://www.hiago.me/wp-content/uploads/2018/04/diferencas-googlemaps-googlemaps-pwa-300x98.png" alt="" width="487" height="159" srcset="https://www.hiago.me/wp-content/uploads/2018/04/diferencas-googlemaps-googlemaps-pwa-300x98.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/diferencas-googlemaps-googlemaps-pwa-768x252.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/diferencas-googlemaps-googlemaps-pwa-1024x335.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/diferencas-googlemaps-googlemaps-pwa.png 1600w" sizes="(max-width: 487px) 100vw, 487px" /><figcaption id="caption-attachment-271" class="wp-caption-text">Você sabe a diferença entre o aplicativo nativo do Google Maps e a versão do PWA?</figcaption></figure>
<h2>A Apple não foi a criadora de PWAs?</h2>
<p>[wp_ad_camp_2]</p>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Vamos ser honestos aqui; <span class="">enquanto o Google, com a equipe do Google Chrome, cunhou o termo PWA, a ideia estava inicialmente disponível no Safari no iPhone OS original.</span> <span class="">Em 2007, Steve Jobs anunciou “mais uma coisa” na WWDC: como desenvolver aplicativos para o iPhone original e, surpreendentemente, aplicativos da web!</span> <span class="">A App Store não estava no roteiro original e o SDK nativo não estava disponível durante o primeiro ano do dispositivo.</span> <span class="">Do ponto de vista da Apple, os PWA&#8217;s até hoje são apenas “aplicativos da web na tela inicial”, e o ícone é algo chamado de WebClip.</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Também é verdade que a ideia não recebeu muita atenção há 11 anos e a Apple se esqueceu de atualizar essa plataforma, por isso, embora ainda estivesse lá há mais de 10 anos, era problemática e inconsistente.</span> <span class="">Alguns anos mais tarde, outras plataformas clonaram a ideia, incluindo o MeeGo Browser no Nokia N9 e o Chrome no Android.</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1">O Chrome ajudou a desenvolver as tecnologias para oferecer uma experiência melhor, principalmente com os Service Workers e as especificações do Manifest do Web App. A partir do iOS 11.3 sexta-feira (30 de março de 2018), a Apple está combinando o Chrome, o Firefox, a Samsung Internet, o UC Browser e o Opera (principalmente no Android) suportando essas duas especificações. <span class="">Outros navegadores na área de trabalho suportam os Trabalhadores de Serviços, mas o suporte ao Manifest da Web App está em andamento neste ano.</span></span></p>
<figure id="attachment_274" aria-describedby="caption-attachment-274" style="width: 616px" class="wp-caption alignnone"><img decoding="async" class=" wp-image-274" src="https://www.hiago.me/wp-content/uploads/2018/04/steev-jovbs-apresentando-300x165.png" alt="" width="616" height="339" srcset="https://www.hiago.me/wp-content/uploads/2018/04/steev-jovbs-apresentando-300x165.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/steev-jovbs-apresentando-768x422.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/steev-jovbs-apresentando-1024x563.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/steev-jovbs-apresentando.png 1594w" sizes="(max-width: 616px) 100vw, 616px" /><figcaption id="caption-attachment-274" class="wp-caption-text">Steve Jobs apresentando PWAs (com um nome diferente) na WWDC 07 com o primeiro iPhone.</figcaption></figure>
<p>&nbsp;</p>
<h2>Espere aí, por isso, o aplicativo não passou no teste de qualidade da App Store, certo? ?</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Sim esta correto. No entanto, o aplicativo será executado somente sob o modelo de segurança e execução do navegador ou da Web Platform. <span class="">Isso significa que você pode “publicar” aplicativos que não são aprovados na loja, como um aplicativo interno para os funcionários da sua empresa (e sim, também conteúdo adulto), mas não é possível acessar recursos nativos puros, como a ID Facial no iPhone</span> <span class="">X ou ARKit para realidade aumentada.</span> <span class="">Ou, pelo menos, você precisa esperar que a Plataforma Web capture esses novos recursos.</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">O PWA pode ser executado dentro do Safari como qualquer site ou no modo autônomo, como qualquer outro aplicativo no sistema.</span> <span class="">Se você estiver se perguntando se os PWA&#8217;s estão usando a Web View, esse não é o caso do Safari ou do ícone instalado, mas será o caso durante a navegação em outros navegadores ou no Facebook com o navegador In-App.</span></span></p>
<h2>Funcionalidades dos PWA&#8217;s no iOS</h2>
<p><span id="result_box" class="short_text" lang="pt" tabindex="-1">Com a Plataforma Web no iOS, você pode acessar:</span></p>
<ul>
<li>Geolocalização</li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">Sensores (Magnetômetro, Acelerômetro, Giroscópio)</span></li>
<li>Câmera</li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">Saída de áudio</span></li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1"><span class="">Síntese de fala (somente com fones de ouvido conectados)</span></span></li>
<li>Apple Pay</li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">WebAssembly, WebRTC, WebGL, bem como muitos outros recursos experimentais sob uma bandeira.</span></span></li>
</ul>
<p>&nbsp;</p>
<figure id="attachment_276" aria-describedby="caption-attachment-276" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-276 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/icons-pwa-1-cTRvyVCe5TDVcBd7Pcpv8A-1024x519.png" alt="" width="1024" height="519" srcset="https://www.hiago.me/wp-content/uploads/2018/04/icons-pwa-1-cTRvyVCe5TDVcBd7Pcpv8A-1024x519.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/icons-pwa-1-cTRvyVCe5TDVcBd7Pcpv8A-300x152.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/icons-pwa-1-cTRvyVCe5TDVcBd7Pcpv8A-768x389.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/icons-pwa-1-cTRvyVCe5TDVcBd7Pcpv8A.png 1125w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-276" class="wp-caption-text">Você consegue detectar esses ícones são todos PWAs em um iPhone?</figcaption></figure>
<p>&nbsp;</p>
<h2>Limitações em comparação com aplicativos iOS nativos</h2>
<ul>
<li><span id="result_box" class="" lang="pt" tabindex="-1">O aplicativo pode armazenar dados e arquivos offline de até 50 Mb.</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Se o usuário não usar o aplicativo por algumas semanas, o iOS liberará os arquivos do aplicativo. O ícone ainda estará lá na tela inicial e, quando acessado, o aplicativo será baixado novamente</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Sem acesso a alguns recursos, como Bluetooth, serial, Beacons, Touch ID, ID de Face, ARKit, sensor de altímetro, informações sobre bateria</span></li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">Nenhum acesso para executar código enquanto estiver em segundo plano</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Sem acesso a informações privadas (contatos, local em segundo plano) e também sem acesso a aplicativos sociais nativos</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Sem acesso ao In App Payments e muitos outros serviços baseados na Apple</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">No iPad, sem acesso para trabalhar com visualizações laterais ou divididas compartilhando a tela com outros aplicativos, os PWA&#8217;s sempre ocuparão a tela inteira</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Sem notificações push, sem badge icon ou integração com a Siri</span></span></li>
</ul>
<p>&nbsp;</p>
<figure id="attachment_283" aria-describedby="caption-attachment-283" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-283 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA-1024x388.png" alt="" width="1024" height="388" srcset="https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA-1024x388.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA-300x114.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA-768x291.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA-1320x500.png 1320w, https://www.hiago.me/wp-content/uploads/2018/04/open-tinder-siri1-H-lKB3P61zF7JbvR9U27IA.png 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-283" class="wp-caption-text">Mesmo se você tiver um PWA instalado com um ícone e o nome Tinder, Siri não conseguirá encontrá-lo</figcaption></figure>
<p>&nbsp;</p>
<h2>O que os PWA&#8217;s podem fazer no Android e não no iOS</h2>
<ul>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">No Android você pode armazenar mais de 50 Mb</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">O Android não exclui os arquivos se você não usa o aplicativo, mas pode excluir os arquivos sob pressão de armazenamento. <span class="">Além disso, se instalado ou usado muito pelo usuário, o PWA pode solicitar Armazenamento Persistente</span></span></li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1"><span class="">Acesso Bluetooth para dispositivos BLE</span></span></li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1"><span class="">Web Share para acessar o diálogo de compartilhamento nativo</span></span></li>
<li>Speech Recognition</li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">Sincronização em Segundo Plano e Notificações por Push via Web</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Banner do aplicativo Web para convidar o usuário a instalar o aplicativo</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Você pode personalizar (um pouco) a tela inicial e as orientações que você quer</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Com o WebAPK e o Chrome, os usuários não podem instalar mais de uma instância de um PWA</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Com o WebAPK e o Chrome, os PWAs aparecem em Configurações e você pode ver o uso de dados;</span> no iOS tudo aparece no Safari</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Com o WebAPK e o Chrome, o PWA gerencia as intenções de seu URL, portanto, se você obtiver um link para o PWA, ele será aberto no modo independente e não na janela do navegador.</span></span></li>
</ul>
<h2>O que os PWA&#8217;s podem fazer no iOS e não no Android</h2>
<ul>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1"><span class="">Os usuários podem alterar o nome do ícone antes de instalá-lo</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Eles podem ser configurados em um perfil de configuração, para que os usuários corporativos possam receber atalhos do PWA da empresa (que é muito bom!).</span> <span class="">O Safari usa o termo WebClip para esse recurso;</span> <span class="">no entanto, parece que não está lendo o manifest do aplicativo Web (de acordo com a documentação)</span></span></li>
</ul>
<h2>Mas se não houver App Store, como você instala um PWA?<img src="https://s.w.org/images/core/emoji/15.0.3/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /></h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Esse é um dos desafios mais significativos no iOS, pois não haverá prompt&#8217;s ou convites do Safari (conhecidos como Banners de Aplicativos da Web no Android).</span> <span class="">Portanto, o usuário precisa ir até a URL do PWA de alguma forma dentro do Safari e, em seguida, pressionar manualmente o ícone Compartilhar e, em seguida, “Adicionar à tela inicial”. Não haverá indicação de que um site que você está visitando seja um PWA.</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Além disso, pseudo-navegadores adicionais disponíveis na App Store, como o Chrome, o Firefox, o Brave ou o Edge, não poderão instalar um PWA ou usar os Service Workers.</span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Depois de instalado, será exibido como qualquer outro ícone na tela inicial. Não haverá menu 3D Touch para ele. <span class="">E se você instalar o mesmo PWA novamente, você terá outro ícone apontando para o mesmo PWA (felizmente, os arquivos instalados serão compartilhados).</span></span></p>
<p><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Além disso, muitos aplicativos da Web têm um link para instalar o aplicativo nativo a partir da App Store, e isso ainda está sendo exibido mesmo dentro do PWA, como o exemplo do Tinder:</span></span></p>
<figure id="attachment_284" aria-describedby="caption-attachment-284" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-284 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/tinder-swipe-1024x696.png" alt="" width="1024" height="696" srcset="https://www.hiago.me/wp-content/uploads/2018/04/tinder-swipe-1024x696.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/tinder-swipe-300x204.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/tinder-swipe-768x522.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/tinder-swipe.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-284" class="wp-caption-text">Eu já tenho o aplicativo, certo?</figcaption></figure>
<p>[wp_ad_camp_1]</p>
<h2>Eu já tenho um PWA, ele funcionará no iOS imediatamente?</h2>
<p><span id="result_box" class="" lang="pt" tabindex="-1">Seu PWA estará disponível para instalação imediatamente após os usuários atualizarem para o iOS 11.3. Você não precisa ativar o iOS. Cada PWA está disponível para instalação. Mas isso não significa que tudo funcionará como esperado.</span></p>
<figure id="attachment_285" aria-describedby="caption-attachment-285" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-285 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/uber-1-wX58NoKXFcM-KvyZtf50w-1024x831.png" alt="" width="1024" height="831" srcset="https://www.hiago.me/wp-content/uploads/2018/04/uber-1-wX58NoKXFcM-KvyZtf50w-1024x831.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/uber-1-wX58NoKXFcM-KvyZtf50w-300x244.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/uber-1-wX58NoKXFcM-KvyZtf50w-768x624.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/uber-1-wX58NoKXFcM-KvyZtf50w.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-285" class="wp-caption-text">O Uber PWA parece muito legal. Mas se você clicar em “Login” ou “Continue”, a autorização vai para o Safari, então você está fora do PWA independente… portanto, é inútil.</figcaption></figure>
<h2>O que não vai funcionar</h2>
<ul>
<li><span id="result_box" class="" lang="pt" tabindex="-1">O display: tela cheia e display: o minimal-ui não funciona no iOS; <span class="">fullscreen irá disparar standalone, e minimal-ui será apenas um atalho para o Safari.</span> <span class="">Você pode obter algo semelhante ao fullscreen (a barra de status existirá, mas sobre o seu aplicativo) usando a extensão de viewport cover-fit ou uma metatag descontinuada.</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Se você confia no Background Sync, você deve ter uma implementação de backup</span></li>
<li><span id="result_box" class="short_text" lang="pt" tabindex="-1">Não há maneira de bloquear a orientação do seu PWA</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">A cor do tema para estilizar a barra de status não funciona; <span class="">você pode usar a meta tag reprovada para barras de status pretas ou brancas ou usar um truque de CSS / HTML para emular uma cor de tema.</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Se o seu PWA não tiver gestos posteriores ou botões na interface do usuário do aplicativo, o usuário não poderá navegar entre as telas</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Seu ícone Android pode parecer péssimo no iOS, pois a Apple não oferece suporte a ícones transparentes, por isso, confira.</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Além disso, o iOS não está tirando os ícones do Manifest do Aplicativo da Web, mas do link do ícone do Apple-touch. Se você não fornecer a tag de link, uma captura de tela será usada para o ícone (consulte o exemplo do Google Keep PWA)</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Não há tela inicial, portanto, a maioria das propriedades de cores do manifesto é ignorada</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Nenhum evento de manifest será acionado. Portanto, se você estiver acompanhando a instalação por esses canais, não funcionará no iOS (mas você poderá verificar navigator.standalone).</span></span></li>
</ul>
<h2>O que ter em mente</h2>
<ul>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Seu PWA não manterá estado entre as sessões, se o usuário sair de um PWA, ele será reiniciado ao voltar, portanto, se você precisar que o usuário valide um email, SMS ou faça uma autenticação de dois fatores, tenha isso em</span> <span class="">mente para oferecer uma solução adequada.</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Os PWAs na história não têm nenhuma captura de tela, então todos parecem telas brancas, infelizmente</span></span> ?</li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Existem erros quando o aplicativo é executado no modo autônomo. Não confie no Safari para testes.</span></li>
</ul>
<figure id="attachment_286" aria-describedby="caption-attachment-286" style="width: 1024px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-286 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/nasa-ux-problema-1024x627.png" alt="" width="1024" height="627" srcset="https://www.hiago.me/wp-content/uploads/2018/04/nasa-ux-problema-1024x627.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/nasa-ux-problema-300x184.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/nasa-ux-problema-768x470.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/nasa-ux-problema.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-286" class="wp-caption-text">A tentativa da Nasa de usar a área do entalhe para o PWA está dando algumas falhas UX</figcaption></figure>
<ul>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Se você quiser usar a área de entalhe do iPhone X para o seu aplicativo, precisará fazer algumas alterações no HTML e no CSS. Se você não fizer certo, coisas estranhas podem acontecer</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Às vezes, você adiciona à tela inicial e o manifest não é usado, então apenas um atalho é instalado</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">O Safari e o atalho da tela inicial compartilham o mesmo registro do Service Worker (mas não a instância) e os arquivos em cache.</span> <span class="">O Safari View Controller (como o In-App Browser no Twitter) suporta Service Worker e o cache, mas parece que está excluindo todos os dados depois que a sessão é fechada.</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Cada pseudo-navegador, como o Chrome ou o Firefox, e cada aplicativo que usa o WebView, como o navegador In-App do Facebook, não suporta Service Workers (estava funcionando durante os betas), portanto, nenhum arquivo será instalado.</span> <span class="">Meu palpite é que uma API pode ser necessária para o WKWebView permitir que o proprietário do aplicativo decida o que fazer com os Service Workers, mas… quem sabe.</span></span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1"><span class="">Para depurar os Service Workers no iOS, você precisa instalar o Safari Technology Preview ou o Safari 11.1 disponível com as atualizações do macOS 10.11.5, 10.12.6 e 10.13.4.</span></span></li>
</ul>
<figure id="attachment_287" aria-describedby="caption-attachment-287" style="width: 1024px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-287 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/debug-1024x715.png" alt="" width="1024" height="715" srcset="https://www.hiago.me/wp-content/uploads/2018/04/debug-1024x715.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/debug-300x210.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/debug-768x537.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/debug.png 1148w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-287" class="wp-caption-text">O inspetor do Service Worker ainda é experimental; por exemplo, não há suporte para ver o conteúdo do Armazenamento em Cache</figcaption></figure>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-288 size-large" src="https://www.hiago.me/wp-content/uploads/2018/04/configuracoes-sw-1024x592.png" alt="" width="1024" height="592" srcset="https://www.hiago.me/wp-content/uploads/2018/04/configuracoes-sw-1024x592.png 1024w, https://www.hiago.me/wp-content/uploads/2018/04/configuracoes-sw-300x173.png 300w, https://www.hiago.me/wp-content/uploads/2018/04/configuracoes-sw-768x444.png 768w, https://www.hiago.me/wp-content/uploads/2018/04/configuracoes-sw.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<ul>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Service Workers podem ser desativados nas configurações em Tecnologias experimentais (ativado por padrão)</span></li>
<li><span id="result_box" class="" lang="pt" tabindex="-1">Às vezes, quando você abre muitos PWAs ao mesmo tempo, a barra de tarefas do iOS fica louca, mostrando aplicativos &#8220;fantasmas&#8221; sem ícone ou título no histórico</span></li>
</ul>
<p>Então é isso ai pessoal, acredito que estamos caminhando para a era dos PWA&#8217;s e logo logo teremos muitas outras novidades sobre o assunto.</p>
<p>Vou estar compartilhando mais conteúdos sobre o PWA e você vai poder <a href="https://www.hiago.me/category/pwa/">conferir aqui</a>!</p>
<p>Esse post é uma tradução do Maximiliano no Meredium, segue link original em inglês: <a href="https://medium.com/@firt/progressive-web-apps-on-ios-are-here-d00430dee3a7">https://medium.com/@firt/progressive-web-apps-on-ios-are-here-d00430dee3a7</a></p>
<p>Obrigado e até mais <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>The post <a href="https://www.hiago.me/2018/04/01/pwa-progressive-web-apps-no-ios-chegaram/">PWA: Progressive Web Apps no iOS chegaram ?</a> appeared first on <a href="https://www.hiago.me">Hiago Silva Souza</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.hiago.me/2018/04/01/pwa-progressive-web-apps-no-ios-chegaram/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">268</post-id>	</item>
	</channel>
</rss>
