{"action":"created","comment":{"url":"https://api.github.com/repos/DockYard/reefpoints/pulls/comments/127003669","pull_request_review_id":49544776,"id":127003669,"diff_hunk":"@@ -0,0 +1,37 @@\n+---\n+layout: post\n+title: \"Safari, iOS, and Progressive Web Apps: What You Should Know\"\n+social: true\n+author: Jess Krywosa\n+twitter: \"jesskry\"\n+github:\n+summary: \"Interested in a Progressive Web App but unsure about implementing one without Safari/iOS support? Here’s what you should know before making a decision.\"\n+published: true\n+tags: PWA, Business\n+---\n+\n+Progressive Web Apps (PWAs) are gaining in popularity due to their ability to send push notifications, add to homescreen prompts, and provide offline content, with one build for all devices. Since PWAs focus on the browser and are device agnostic, they allow for seamless adoption by all users, while cutting costs and maintenance for businesses. Outcomes for implementors like MakeMyTrip.com include [triple the conversion rates, 38% improvement in page load times, and 160% increase in sessions](https://developers.google.com/web/showcase/2017/make-my-trip). \n+\n+A lot of the functionality that PWAs provide is due to the addition of [service workers](https://developers.google.com/web/fundamentals/getting-started/primers/service-workers). Currently, Chrome, Opera, Firefox, Samsung internet, and Edge [all support or plan to support, service workers](https://jakearchibald.github.io/isserviceworkerready/). But many still feel unsure about adopting PWAs due to the lack of full-throated support for service workers—and PWAs–from Apple. \n+\n+Interested in transitioning to a Progressive Web App but unsure about implementing one without Safari/iOS support? Here’s what you should know before making a decision. \n+\n+## What about PWAs doesn’t Safari/iOS readily support?\n+\n+As of today, Safari/iOS do not support service worker and web app manifest. Without these, many forward thinking components of PWAs will not work as intended including push notifications, homescreen installation, and offline mode. \n+\n+## Are there any browsers that support PWAs on Apple devices? \n+\n+Sadly, No. Browsers like Chrome that do readily support all aspects of PWAs are really only [re-skinned versions of Safari](https://www.digitalcommerce360.com/2017/05/02/apples-dirty-little-secret-about-chrome/) on iOS devices.\n+\n+## So, if my primary mobile audience is Apple users, why would I implement a PWA?\n+\n+Even without this support, PWAs still work, just not as they were originally envisioned and require workarounds. You can still implement an add to homescreen prompt, you’ll just have to do so by using ember-web-app if using Ember. While you can implement OS X push notifications from your web site using [Apple’s developer guides](https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/Introduction/Introduction.html) this does not solve the issue for iOS. One inelegant solution is to wrap the PWA in a native app to gain initial approval for notifications. Offline content is a harder issue to solve, though the other enhancements can be combatted while we anxiously await iOS support. \n+\n+[Documented early adopter outcomes](https://developers.google.com/web/showcase/2017/) actually show that not only do PWAs work across all browsers, but they actually convert higher than non-PWA sites. Since Progressive Web Apps were built to be lighter they automatically perform better via mobile even without the added enhancements. Lancome recently opted to upgrade to a PWA instead of developing a native app to be able to both serve current customers and reach new users. Even without iOS support [they still saw iOS sessions increase by 53% and overall conversions increase by 17%](https://developers.google.com/web/showcase/2017/lancome). \n+\n+## Will Apple adopt?\n+\n+Indications look positive. Webkit shows that both [service workers](https://webkit.org/status/#specification-service-workers) and [web app manifests](https://webkit.org/status/#specification-web-app-manifest) are ‘under consideration’, with the former given specific mention in the [five year plan](https://webkit.org/status/#specification-web-app-manifest). Speculation is that Apple could be slow to adopt due to their current reliance on apps and the App Store. Why promote technology that may eat into that owned pipeline? With Samsung, Google, and Microsoft currently running with this functionality, Apple may be hedging their bets. And with PWAs meaning an easier, single point of contact with consumers, will apps soon be a thing of the past? \n+\n+Curious about how what it would take for your company to upgrade to a Progressive Web App? [Let’s talk](https://dockyard.com/contact/hire-us).","path":"source/posts/2017-07-13-safari-ios-and-progressive-web-apps.md","position":37,"original_position":37,"commit_id":"8174aac3f42a0914e1189501fe2aed4baf7e6a7e","original_commit_id":"8174aac3f42a0914e1189501fe2aed4baf7e6a7e","user":{"login":"jesskry","id":26748322,"avatar_url":"https://avatars1.githubusercontent.com/u/26748322?v=3","gravatar_id":"","url":"https://api.github.com/users/jesskry","html_url":"https://github.com/jesskry","followers_url":"https://api.github.com/users/jesskry/followers","following_url":"https://api.github.com/users/jesskry/following{/other_user}","gists_url":"https://api.github.com/users/jesskry/gists{/gist_id}","starred_url":"https://api.github.com/users/jesskry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jesskry/subscriptions","organizations_url":"https://api.github.com/users/jesskry/orgs","repos_url":"https://api.github.com/users/jesskry/repos","events_url":"https://api.github.com/users/jesskry/events{/privacy}","received_events_url":"https://api.github.com/users/jesskry/received_events","type":"User","site_admin":false},"body":"Thank you!","created_at":"2017-07-12T16:24:52Z","updated_at":"2017-07-12T16:24:52Z","html_url":"https://github.com/DockYard/reefpoints/pull/585#discussion_r127003669","pull_request_url":"https://api.github.com/repos/DockYard/reefpoints/pulls/585","_links":{"self":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/comments/127003669"},"html":{"href":"https://github.com/DockYard/reefpoints/pull/585#discussion_r127003669"},"pull_request":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/585"}}},"pull_request":{"url":"https://api.github.com/repos/DockYard/reefpoints/pulls/585","id":130156324,"html_url":"https://github.com/DockYard/reefpoints/pull/585","diff_url":"https://github.com/DockYard/reefpoints/pull/585.diff","patch_url":"https://github.com/DockYard/reefpoints/pull/585.patch","issue_url":"https://api.github.com/repos/DockYard/reefpoints/issues/585","number":585,"state":"open","locked":false,"title":"Create 2017-07-13-safari-ios-and-progressive-web-apps.md","user":{"login":"jesskry","id":26748322,"avatar_url":"https://avatars1.githubusercontent.com/u/26748322?v=3","gravatar_id":"","url":"https://api.github.com/users/jesskry","html_url":"https://github.com/jesskry","followers_url":"https://api.github.com/users/jesskry/followers","following_url":"https://api.github.com/users/jesskry/following{/other_user}","gists_url":"https://api.github.com/users/jesskry/gists{/gist_id}","starred_url":"https://api.github.com/users/jesskry/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jesskry/subscriptions","organizations_url":"https://api.github.com/users/jesskry/orgs","repos_url":"https://api.github.com/users/jesskry/repos","events_url":"https://api.github.com/users/jesskry/events{/privacy}","received_events_url":"https://api.github.com/users/jesskry/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-07-12T14:41:14Z","updated_at":"2017-07-12T16:24:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1343ab22c7d63988ece7a8fd61b2b82a853276da","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/DockYard/reefpoints/pulls/585/commits","review_comments_url":"https://api.github.com/repos/DockYard/reefpoints/pulls/585/comments","review_comment_url":"https://api.github.com/repos/DockYard/reefpoints/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DockYard/reefpoints/issues/585/comments","statuses_url":"https://api.github.com/repos/DockYard/reefpoints/statuses/8174aac3f42a0914e1189501fe2aed4baf7e6a7e","head":{"label":"DockYard:jesskry-patch-2","ref":"jesskry-patch-2","sha":"8174aac3f42a0914e1189501fe2aed4baf7e6a7e","user":{"login":"DockYard","id":873981,"avatar_url":"https://avatars0.githubusercontent.com/u/873981?v=3","gravatar_id":"","url":"https://api.github.com/users/DockYard","html_url":"https://github.com/DockYard","followers_url":"https://api.github.com/users/DockYard/followers","following_url":"https://api.github.com/users/DockYard/following{/other_user}","gists_url":"https://api.github.com/users/DockYard/gists{/gist_id}","starred_url":"https://api.github.com/users/DockYard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DockYard/subscriptions","organizations_url":"https://api.github.com/users/DockYard/orgs","repos_url":"https://api.github.com/users/DockYard/repos","events_url":"https://api.github.com/users/DockYard/events{/privacy}","received_events_url":"https://api.github.com/users/DockYard/received_events","type":"Organization","site_admin":false},"repo":{"id":2262874,"name":"reefpoints","full_name":"DockYard/reefpoints","owner":{"login":"DockYard","id":873981,"avatar_url":"https://avatars0.githubusercontent.com/u/873981?v=3","gravatar_id":"","url":"https://api.github.com/users/DockYard","html_url":"https://github.com/DockYard","followers_url":"https://api.github.com/users/DockYard/followers","following_url":"https://api.github.com/users/DockYard/following{/other_user}","gists_url":"https://api.github.com/users/DockYard/gists{/gist_id}","starred_url":"https://api.github.com/users/DockYard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DockYard/subscriptions","organizations_url":"https://api.github.com/users/DockYard/orgs","repos_url":"https://api.github.com/users/DockYard/repos","events_url":"https://api.github.com/users/DockYard/events{/privacy}","received_events_url":"https://api.github.com/users/DockYard/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DockYard/reefpoints","description":"DockYard Blog","fork":false,"url":"https://api.github.com/repos/DockYard/reefpoints","forks_url":"https://api.github.com/repos/DockYard/reefpoints/forks","keys_url":"https://api.github.com/repos/DockYard/reefpoints/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DockYard/reefpoints/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DockYard/reefpoints/teams","hooks_url":"https://api.github.com/repos/DockYard/reefpoints/hooks","issue_events_url":"https://api.github.com/repos/DockYard/reefpoints/issues/events{/number}","events_url":"https://api.github.com/repos/DockYard/reefpoints/events","assignees_url":"https://api.github.com/repos/DockYard/reefpoints/assignees{/user}","branches_url":"https://api.github.com/repos/DockYard/reefpoints/branches{/branch}","tags_url":"https://api.github.com/repos/DockYard/reefpoints/tags","blobs_url":"https://api.github.com/repos/DockYard/reefpoints/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DockYard/reefpoints/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DockYard/reefpoints/git/refs{/sha}","trees_url":"https://api.github.com/repos/DockYard/reefpoints/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DockYard/reefpoints/statuses/{sha}","languages_url":"https://api.github.com/repos/DockYard/reefpoints/languages","stargazers_url":"https://api.github.com/repos/DockYard/reefpoints/stargazers","contributors_url":"https://api.github.com/repos/DockYard/reefpoints/contributors","subscribers_url":"https://api.github.com/repos/DockYard/reefpoints/subscribers","subscription_url":"https://api.github.com/repos/DockYard/reefpoints/subscription","commits_url":"https://api.github.com/repos/DockYard/reefpoints/commits{/sha}","git_commits_url":"https://api.github.com/repos/DockYard/reefpoints/git/commits{/sha}","comments_url":"https://api.github.com/repos/DockYard/reefpoints/comments{/number}","issue_comment_url":"https://api.github.com/repos/DockYard/reefpoints/issues/comments{/number}","contents_url":"https://api.github.com/repos/DockYard/reefpoints/contents/{+path}","compare_url":"https://api.github.com/repos/DockYard/reefpoints/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DockYard/reefpoints/merges","archive_url":"https://api.github.com/repos/DockYard/reefpoints/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DockYard/reefpoints/downloads","issues_url":"https://api.github.com/repos/DockYard/reefpoints/issues{/number}","pulls_url":"https://api.github.com/repos/DockYard/reefpoints/pulls{/number}","milestones_url":"https://api.github.com/repos/DockYard/reefpoints/milestones{/number}","notifications_url":"https://api.github.com/repos/DockYard/reefpoints/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DockYard/reefpoints/labels{/name}","releases_url":"https://api.github.com/repos/DockYard/reefpoints/releases{/id}","deployments_url":"https://api.github.com/repos/DockYard/reefpoints/deployments","created_at":"2011-08-24T16:55:40Z","updated_at":"2017-04-24T13:50:06Z","pushed_at":"2017-07-12T14:45:59Z","git_url":"git://github.com/DockYard/reefpoints.git","ssh_url":"git@github.com:DockYard/reefpoints.git","clone_url":"https://github.com/DockYard/reefpoints.git","svn_url":"https://github.com/DockYard/reefpoints","homepage":"https://dockyard.com/blog","size":23634,"stargazers_count":42,"watchers_count":42,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":65,"mirror_url":null,"open_issues_count":14,"forks":65,"open_issues":14,"watchers":42,"default_branch":"master"}},"base":{"label":"DockYard:master","ref":"master","sha":"b307c1091545562a872ed2b7285234e5d207f846","user":{"login":"DockYard","id":873981,"avatar_url":"https://avatars0.githubusercontent.com/u/873981?v=3","gravatar_id":"","url":"https://api.github.com/users/DockYard","html_url":"https://github.com/DockYard","followers_url":"https://api.github.com/users/DockYard/followers","following_url":"https://api.github.com/users/DockYard/following{/other_user}","gists_url":"https://api.github.com/users/DockYard/gists{/gist_id}","starred_url":"https://api.github.com/users/DockYard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DockYard/subscriptions","organizations_url":"https://api.github.com/users/DockYard/orgs","repos_url":"https://api.github.com/users/DockYard/repos","events_url":"https://api.github.com/users/DockYard/events{/privacy}","received_events_url":"https://api.github.com/users/DockYard/received_events","type":"Organization","site_admin":false},"repo":{"id":2262874,"name":"reefpoints","full_name":"DockYard/reefpoints","owner":{"login":"DockYard","id":873981,"avatar_url":"https://avatars0.githubusercontent.com/u/873981?v=3","gravatar_id":"","url":"https://api.github.com/users/DockYard","html_url":"https://github.com/DockYard","followers_url":"https://api.github.com/users/DockYard/followers","following_url":"https://api.github.com/users/DockYard/following{/other_user}","gists_url":"https://api.github.com/users/DockYard/gists{/gist_id}","starred_url":"https://api.github.com/users/DockYard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DockYard/subscriptions","organizations_url":"https://api.github.com/users/DockYard/orgs","repos_url":"https://api.github.com/users/DockYard/repos","events_url":"https://api.github.com/users/DockYard/events{/privacy}","received_events_url":"https://api.github.com/users/DockYard/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/DockYard/reefpoints","description":"DockYard Blog","fork":false,"url":"https://api.github.com/repos/DockYard/reefpoints","forks_url":"https://api.github.com/repos/DockYard/reefpoints/forks","keys_url":"https://api.github.com/repos/DockYard/reefpoints/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DockYard/reefpoints/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DockYard/reefpoints/teams","hooks_url":"https://api.github.com/repos/DockYard/reefpoints/hooks","issue_events_url":"https://api.github.com/repos/DockYard/reefpoints/issues/events{/number}","events_url":"https://api.github.com/repos/DockYard/reefpoints/events","assignees_url":"https://api.github.com/repos/DockYard/reefpoints/assignees{/user}","branches_url":"https://api.github.com/repos/DockYard/reefpoints/branches{/branch}","tags_url":"https://api.github.com/repos/DockYard/reefpoints/tags","blobs_url":"https://api.github.com/repos/DockYard/reefpoints/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DockYard/reefpoints/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DockYard/reefpoints/git/refs{/sha}","trees_url":"https://api.github.com/repos/DockYard/reefpoints/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DockYard/reefpoints/statuses/{sha}","languages_url":"https://api.github.com/repos/DockYard/reefpoints/languages","stargazers_url":"https://api.github.com/repos/DockYard/reefpoints/stargazers","contributors_url":"https://api.github.com/repos/DockYard/reefpoints/contributors","subscribers_url":"https://api.github.com/repos/DockYard/reefpoints/subscribers","subscription_url":"https://api.github.com/repos/DockYard/reefpoints/subscription","commits_url":"https://api.github.com/repos/DockYard/reefpoints/commits{/sha}","git_commits_url":"https://api.github.com/repos/DockYard/reefpoints/git/commits{/sha}","comments_url":"https://api.github.com/repos/DockYard/reefpoints/comments{/number}","issue_comment_url":"https://api.github.com/repos/DockYard/reefpoints/issues/comments{/number}","contents_url":"https://api.github.com/repos/DockYard/reefpoints/contents/{+path}","compare_url":"https://api.github.com/repos/DockYard/reefpoints/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DockYard/reefpoints/merges","archive_url":"https://api.github.com/repos/DockYard/reefpoints/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DockYard/reefpoints/downloads","issues_url":"https://api.github.com/repos/DockYard/reefpoints/issues{/number}","pulls_url":"https://api.github.com/repos/DockYard/reefpoints/pulls{/number}","milestones_url":"https://api.github.com/repos/DockYard/reefpoints/milestones{/number}","notifications_url":"https://api.github.com/repos/DockYard/reefpoints/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DockYard/reefpoints/labels{/name}","releases_url":"https://api.github.com/repos/DockYard/reefpoints/releases{/id}","deployments_url":"https://api.github.com/repos/DockYard/reefpoints/deployments","created_at":"2011-08-24T16:55:40Z","updated_at":"2017-04-24T13:50:06Z","pushed_at":"2017-07-12T14:45:59Z","git_url":"git://github.com/DockYard/reefpoints.git","ssh_url":"git@github.com:DockYard/reefpoints.git","clone_url":"https://github.com/DockYard/reefpoints.git","svn_url":"https://github.com/DockYard/reefpoints","homepage":"https://dockyard.com/blog","size":23634,"stargazers_count":42,"watchers_count":42,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":65,"mirror_url":null,"open_issues_count":14,"forks":65,"open_issues":14,"watchers":42,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/585"},"html":{"href":"https://github.com/DockYard/reefpoints/pull/585"},"issue":{"href":"https://api.github.com/repos/DockYard/reefpoints/issues/585"},"comments":{"href":"https://api.github.com/repos/DockYard/reefpoints/issues/585/comments"},"review_comments":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/585/comments"},"review_comment":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DockYard/reefpoints/pulls/585/commits"},"statuses":{"href":"https://api.github.com/repos/DockYard/reefpoints/statuses/8174aac3f42a0914e1189501fe2aed4baf7e6a7e"}}}}
{"actor":{"display_login":"jesskry"}}