From 51904be16de1db67378d455ac0dce5ba07aed78c Mon Sep 17 00:00:00 2001 From: Matthew Farias Date: Mon, 30 Jul 2018 12:11:08 -0400 Subject: [PATCH 1/4] Added service worker that caches pages and allows users to view them even when offline --- app/app/Http/Controllers/PWAController.php | 2 +- app/package.json | 3 + app/public/js/firebase-messaging-sw.js | 6 ++ app/public/js/service_worker_script.js | 10 +++ app/public/service-worker.js | 76 ++++++++++++++++++++++ app/resources/views/pages/home.blade.php | 18 +++++ 6 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 app/public/js/firebase-messaging-sw.js create mode 100644 app/public/js/service_worker_script.js create mode 100644 app/public/service-worker.js diff --git a/app/app/Http/Controllers/PWAController.php b/app/app/Http/Controllers/PWAController.php index e2d4900a..c0e774cd 100644 --- a/app/app/Http/Controllers/PWAController.php +++ b/app/app/Http/Controllers/PWAController.php @@ -34,4 +34,4 @@ public function manifest() ] ]); } -} +} \ No newline at end of file diff --git a/app/package.json b/app/package.json index 80a1f096..eaa89a88 100644 --- a/app/package.json +++ b/app/package.json @@ -15,5 +15,8 @@ "lodash": "^4.16.2", "vue": "^2.0.1", "vue-resource": "^1.0.3" + }, + "dependencies": { + "firebase": "^5.3.0" } } diff --git a/app/public/js/firebase-messaging-sw.js b/app/public/js/firebase-messaging-sw.js new file mode 100644 index 00000000..63ef81bb --- /dev/null +++ b/app/public/js/firebase-messaging-sw.js @@ -0,0 +1,6 @@ +importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-app.js'); +importScripts('https://www.gstatic.com/firebasejs/4.8.1/firebase-messaging.js'); +firebase.initializeApp({ + messagingSenderId: "your messagingSenderId again" +}); +const messaging = firebase.messaging(); \ No newline at end of file diff --git a/app/public/js/service_worker_script.js b/app/public/js/service_worker_script.js new file mode 100644 index 00000000..1f3d0ce5 --- /dev/null +++ b/app/public/js/service_worker_script.js @@ -0,0 +1,10 @@ +if ('serviceWorker' in navigator) { + navigator.serviceWorker + .register('./service-worker.js', { scope: './'}) + .then((registration)=> { + firebase.messaging().useServiceWorker(registration); + }) + .catch(function(err) { + console.log("Service Worker Failed to Register", err); + }) +} \ No newline at end of file diff --git a/app/public/service-worker.js b/app/public/service-worker.js new file mode 100644 index 00000000..d15c06f3 --- /dev/null +++ b/app/public/service-worker.js @@ -0,0 +1,76 @@ +var cacheName = 'v1'; + +var cacheFiles = []; + +self.addEventListener('install', function(e) { + try { + e.waitUntil( + caches.open(cacheName).then(function(cache) { + return cache.addAll(cacheFiles); + }) + ) + } catch(e) { + console.log(e); + } + +}) + +self.addEventListener('activate', function(e) { + e.waitUntil( + caches.keys().then(function(cacheNames) { + return Promise.all(cacheNames.map(function(thisCacheName) { + + if (thisCacheName !== cacheName) { + return caches.delete(thisCacheName); + } + })); + }) + ); + e.waitUntil( + + caches.keys().then(function(cacheNames) { + return Promise.all(cacheNames.map(function(thisCacheName) { + + if (thisCacheName !== cacheName) { + return caches.delete(thisCacheName); + } + })); + }) + ); +}) + +self.addEventListener('fetch',function(e) { + e.respondWith( + + caches.match(e.request) + + + .then(function(response) { + + if (response) { + return response; + } + + var requestClone = e.request.clone(); + return fetch(requestClone) + .then(function(response) { + + if (!response) { + return response; + } + + var responseClone = response.clone(); + caches.open(cacheName).then(function(cache) { + cache.put(e.request, responseClone); + return response; + }); + + }) + .catch(function(err) { + console.log('[ServiceWorker] Error Fetching & Caching New Data', err); + }); + + + }) + ); +}) \ No newline at end of file diff --git a/app/resources/views/pages/home.blade.php b/app/resources/views/pages/home.blade.php index b8820924..160ed961 100644 --- a/app/resources/views/pages/home.blade.php +++ b/app/resources/views/pages/home.blade.php @@ -4,6 +4,7 @@ + + + + + + + @stop @section('content')
From cab75dfdefb81f5c7b78d49d5347ae535e94d6aa Mon Sep 17 00:00:00 2001 From: Matthew Farias Date: Fri, 10 Aug 2018 12:45:49 -0400 Subject: [PATCH 2/4] Fixed google map errors with caching and added some changed to environment variables to hide api key --- app/app/Http/Controllers/HomeController.php | 8 ++- app/config/app.php | 10 ++++ app/public/service-worker.js | 66 +++++++++++---------- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/app/app/Http/Controllers/HomeController.php b/app/app/Http/Controllers/HomeController.php index c5c94e18..e6b91377 100644 --- a/app/app/Http/Controllers/HomeController.php +++ b/app/app/Http/Controllers/HomeController.php @@ -37,7 +37,13 @@ public function index(Request $request) 'default_location' => BaseUser::getDefaultLocation(), 'google_map_api_key' => config('app.google_map_api_key'), 'turn_off_maps' => config('app.turn_off_maps'), - 'location_search_options' => $location_search_options + 'location_search_options' => $location_search_options, + 'firebase_api_key' => config('app.firebase_api_key'), + 'firebase_auth_domain' => config('app.firebase_auth_domain'), + 'firebase_database_url' => config('app.firebase_database_url'), + 'firebase_project_id' => config('app.firebase_project_id'), + 'firebase_storage_bucket' => config('app.firebase_storage_bucket'), + 'firebase_messaging_sender_id' => config('firebase_messaging_sender_id') ]); } diff --git a/app/config/app.php b/app/config/app.php index 95687005..7c343a5b 100644 --- a/app/config/app.php +++ b/app/config/app.php @@ -118,6 +118,16 @@ 'cipher' => 'AES-256-CBC', + /* Firebase keys + | Will be used for push notifications + */ + 'firebase_api_key' => env('FIREBASE_API_KEY', ''), + 'firebase_auth_domain'=> env('FIREBASE_AUTH_DOMAIN', ''), + 'firebase_database_url' => env('FIREBASE_DATABASE_URL, '), + 'firebase_project_id' => env('FIREBASE_PROJECT_ID', ''), + 'firebase_storage_bucket' => env('FIREBASE_STOREAGE_BUCKET', ''), + 'firebase_messaging_sender_id' => env('FIREBASE_MESSAGING_SENDER_ID', ''), + /* |-------------------------------------------------------------------------- | Logging Configuration diff --git a/app/public/service-worker.js b/app/public/service-worker.js index d15c06f3..279efa3e 100644 --- a/app/public/service-worker.js +++ b/app/public/service-worker.js @@ -40,37 +40,39 @@ self.addEventListener('activate', function(e) { }) self.addEventListener('fetch',function(e) { - e.respondWith( - - caches.match(e.request) - - - .then(function(response) { - - if (response) { - return response; - } - - var requestClone = e.request.clone(); - return fetch(requestClone) - .then(function(response) { - - if (!response) { - return response; - } - - var responseClone = response.clone(); - caches.open(cacheName).then(function(cache) { - cache.put(e.request, responseClone); - return response; + + if (e.request.url.indexOf('https://maps.googleapi.com') !== 0 || + e.request.url.indexOf('http://maps.googleapis.com') !== 0) { + e.respondWith( + caches.match(e.request) + .then(function(response) { + + if (response) { + return response; + } + + var requestClone = e.request.clone(); + return fetch(requestClone) + .then(function(response) { + + if (!response) { + return response; + } + + var responseClone = response.clone(); + caches.open(cacheName).then(function(cache) { + cache.put(e.request, responseClone) + .catch(function(err) { + console.log('Post Request Made', err); + }); + return response; + }); + + }) + .catch(function(err) { + console.log('[ServiceWorker] Error Fetching & Caching New Data', err); }); - - }) - .catch(function(err) { - console.log('[ServiceWorker] Error Fetching & Caching New Data', err); - }); - - - }) - ); + }) + ); + } }) \ No newline at end of file From 491961773573d0e44a530989fa70a0877dd7b2cc Mon Sep 17 00:00:00 2001 From: Matthew Farias Date: Fri, 10 Aug 2018 12:47:16 -0400 Subject: [PATCH 3/4] Completed changes to hide API Key --- app/app/Http/Controllers/HomeController.php | 2 +- app/resources/views/pages/home.blade.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/app/Http/Controllers/HomeController.php b/app/app/Http/Controllers/HomeController.php index e6b91377..cb558319 100644 --- a/app/app/Http/Controllers/HomeController.php +++ b/app/app/Http/Controllers/HomeController.php @@ -43,7 +43,7 @@ public function index(Request $request) 'firebase_database_url' => config('app.firebase_database_url'), 'firebase_project_id' => config('app.firebase_project_id'), 'firebase_storage_bucket' => config('app.firebase_storage_bucket'), - 'firebase_messaging_sender_id' => config('firebase_messaging_sender_id') + 'firebase_messaging_sender_id' => config('app.firebase_messaging_sender_id') ]); } diff --git a/app/resources/views/pages/home.blade.php b/app/resources/views/pages/home.blade.php index 160ed961..be73bb43 100644 --- a/app/resources/views/pages/home.blade.php +++ b/app/resources/views/pages/home.blade.php @@ -22,12 +22,12 @@ From 07dfcd9d087d740d2ddddd0940d102d106226975 Mon Sep 17 00:00:00 2001 From: Matthew Farias Date: Mon, 13 Aug 2018 10:05:53 -0400 Subject: [PATCH 4/4] Checks if user is running it as a PWA before launching service worker --- app/public/js/service_worker_script.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/public/js/service_worker_script.js b/app/public/js/service_worker_script.js index 1f3d0ce5..cd208692 100644 --- a/app/public/js/service_worker_script.js +++ b/app/public/js/service_worker_script.js @@ -1,4 +1,7 @@ -if ('serviceWorker' in navigator) { +var url= window.location.href; +var pos = url.search('using_pwa'); + +if (pos+1 && url[pos+8] && 'serviceWorker' in navigator) { navigator.serviceWorker .register('./service-worker.js', { scope: './'}) .then((registration)=> {