====== Ionic4でPWA(Progressive Web Apps) ======
---//2019/02/16 更新//
PWA(Progressive Web Apps)とは、Webサイトをスマホアプリのように使える仕組みです。
例えば、PWA普及以前は、オフラインで動作するAndroidアプリを作成したい場合は
-WEBサイトをIonicで作る
-Ionic上で、ionic cordova build androidして、apkファイルを作成
-Google Playにアプリを登録
-ユーザはGoogle Playからアプリをダウンロードしてインストール
という流れが必要でしたが、PWAであれば、
-WEBサイトをIonicで作ってPWA化して公開
-ユーザはWEBサイトを閲覧すれば、『ホーム画面に追加する』(A2HS: Add to HomeScreen)画面が表示されて、追加する
-以降、オフラインで、まるでスマホアプリのようにWEBサイトを利用できる
といったことが可能になります。もちろん、『プッシュ通知』なども備えることができるそうです。(個人的にプッシュ通知は嫌いですが。)
今回は、http://www.jomendez.com/2018/06/05/add-home-screen-pwas/をIonic4で写経して、Add to HomeScreen(A2HP)ボタンを実装し、Firebase Hostingにデプロイするところまでやってみたいと思います。
===== PWAメニュー =====
[[00.ionic4:09.ionic4でpwa|Ionic4でPWA(Progressive Web Apps)]] ← このページ
[[03.初めてのjavascriptでおみくじアプリ:おみくじアプリのpwa化|おみくじアプリのPWA化]]
[[z_blog:2019:190220_angular7でpwa|Angular7でPWAをNetlifyにデプロイ]]
===== すること =====
-Ionic4のtabsデフォルトアプリをPWA化する
-Tab1に、Add to HomeScreen(A2HP)ボタンを実装する
-Firebase Hostingにデプロイして、Androidスマホでホーム画面にアプリを追加し、オフラインで起動してみる
-同じアプリを、Netlifyにデプロイしてみる。Androidスマホでホーム画面にアプリを追加し、オフラインで起動してみる
今回は、http://www.jomendez.com/2018/06/05/add-home-screen-pwas/をIonic4で写経してみます。
https://ionicframework.com/docs/publishing/progressive-web-app も参考にします。
ソースコード
https://github.com/adash333/ionic4-pwa2
DEMO
https://minutes-b77c0.firebaseapp.com/
===== 開発環境 =====
WindowsでのIonic4環境構築方法については、[[00.ionic4:01.windowsでionicを始める方法#オプション:nvm-windowsでNode.jsのバージョン管理|WindowsでIonicを始める方法]]をご覧ください。
Panasonic CF-RZ6
Windows10 Pro (1803)
VisualStudioCode
git version 2.20.1.windows.1
Node v10.15.1
npm 6.4.1
Ionic (Ionic CLI) 4.10.2
@ionic/angular 4.0.1
今回構築した環境
@angular/cli 7.3.1
@angular/pwa 0.13.1
firebase-tools@6.3.1
===== 新規Ionic4アプリの作成 =====
-VisualStudioCodeでWindowsのC:/ionic/フォルダを開く
-Ctrl+@でターミナル画面を開いて、以下を入力します
ionic start ionic4-pwa sidemenu --type=angular
// 何か聞かれたら、n + Enter
{{:00.ionic4:pasted:20190214-214649.png}}
{{:00.ionic4:pasted:20190214-214700.png}}
数分待ちます。なお、
-ionic4-pwaがアプリの名前
-sidemenuがサイドメニューが作成されるテンプレートを利用
-''%%--type=angular%%''がAngularを利用
を表しています。''%%--type%%''は、今後、vueやreactが実装されるのかもしれません。
*以下を入力して、サーバを起動します。
cd ionic4-pwa
ionic serve
{{:00.ionic4:pasted:20190214-215036.png}}
なお、サーバを停止するためには、Ctrl+C, Y, Enterの操作を行います。
以下の操作でもよいです。
ionic serve -l
? Install @ionic/lab? には、Enterを入力します。(@ionic/labがインストールされます)
{{:00.ionic4:pasted:20190214-215415.png}}
===== @angular/cliのインストール =====
npm install -g @angular/cli
{{:00.ionic4:pasted:20190215-092610.png}}
@angular/cli 7.3.1 がインストールされました。
===== アプリのPWA化 =====
ng add @angular/pwa
{{:00.ionic4:pasted:20190215-154251.png}}
{{:00.ionic4:pasted:20190215-154302.png}}
@angular/pwa 0.13.1 がインストールされました。
===== build =====
ionic build --prod --service-worker
https://ionicframework.com/docs/publishing/progressive-web-appによると、
"serviceWorker": true
のままなら、''%%--service-worker%%''は不要のようだが、、、
{{:00.ionic4:pasted:20190215-221655.png}}
{{:00.ionic4:pasted:20190215-221705.png}}
===== firebaseにデプロイ =====
npm install -g firebase-tools
{{:00.ionic4:pasted:20190215-222139.png}}
{{:00.ionic4:pasted:20190215-222149.png}}
firebase-tools@6.3.1 がインストールされた。
https://firebase.google.com/docs/cli/?hl=ja に従ってやっていく。
firebase login
{{:00.ionic4:pasted:20190215-222540.png}}
{{:00.ionic4:pasted:20190215-222556.png}}
{{:00.ionic4:pasted:20190215-222629.png}}
firebase init
{{:00.ionic4:pasted:20190215-222919.png}}
{{:00.ionic4:pasted:20190215-222947.png}}
質問に対しては以下のように答えていきます。
{{:00.ionic4:pasted:20190215-223411.png}}
Create a new projectを選んでいるのに、new projectを作成してくれませんでした。(Firebase consoleで作成する必要があります。)
firebase.jsonのhosting.propertyに以下を追加
"headers": [
{
"source": "/build/app/**",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000"
}
]
},
{
"source": "sw.js",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache"
}
]
}
]
(変更前)
{{:00.ionic4:pasted:20190215-223027.png}}
(変更後)
{{:00.ionic4:pasted:20190215-223128.png}}
ionic build --prod
firebase deploy --project minutes-b77c0
''%%--project minutes-b77c0%%'' のところは、firebaseのプロジェクトを、https://console.firebase.google.com にログインして作成しておく必要があります。
{{:00.ionic4:pasted:20190215-224238.png}}
指定されたアドレスをCtrl+クリック で開きます。
{{:00.ionic4:pasted:20190215-224322.png}}
今回は、以下のアドレスとなりましたが、、、
https://minutes-b77c0.firebaseapp.com/
{{:00.ionic4:clip_now_20190216_084940.png|}}
{{:00.ionic4:clip_now_20190216_084952.png|}}
無事、Androidスマホで、アプリとして保存できました。
また、オフラインでもアプリとして動作することを確認できました。(Arrows M03)
参考:
https://qiita.com/sachiko-kame/items/f1a9b35a361296688c9a
{{:00.ionic4:pasted:20190215-224215.png}}
===== メモ =====
http://www.jomendez.com/2018/06/05/add-home-screen-pwas/
src/app/home/home.page.html
Install
src/app/home/home.page.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-home',
templateUrl: 'home.page.html',
styleUrls: ['home.page.scss'],
})
export class HomePage {
showBtn: boolean = false;
deferredPrompt;
constructor() {
}
ngOnInit(){
window.addEventListener('beforeinstallprompt', (e) => {
// Prevent Chrome 67 and earlier from automatically showing the prompt
e.preventDefault();
// Stash the event so it can be triggered later on the button event.
this.deferredPrompt = e;
// Update UI by showing a button to notify the user they can add to home screen
this.showBtn = true;
});
//button click event to show the promt
window.addEventListener('appinstalled', (event) => {
alert('installed');
});
if (window.matchMedia('(display-mode: standalone)').matches) {
alert('display-mode is standalone');
}
}
add_to_home(){
debugger
// hide our user interface that shows our button
// Show the prompt
this.deferredPrompt.prompt();
// Wait for the user to respond to the prompt
this.deferredPrompt.userChoice
.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
alert('User accepted the prompt');
} else {
alert('User dismissed the prompt');
}
this.deferredPrompt = null;
});
};
}
https://www.smashingmagazine.com/2018/09/pwa-angular-6/
===== ソースコード =====
https://github.com/adash333/ionic4-pwa2
DEMO
https://minutes-b77c0.firebaseapp.com/
同じものをNetlifyにデプロイしようとすると、以下のような手順となります。
===== Netlifyにデプロイにトライ =====
ググったところ、さすがJosh様、、、
ポイントは、GitHubにpushする前に、ローカルパソコンで、以下のコマンドを入力しておくことです。
(Ionic3のときはNetlifyの方で、npm run build --prod とすればよかったのですが、今回は、そのコマンドだと、私の場合はPWA化されませんでした。)
npm install --save-dev ionic
最初からコードを書くと、以下のようになります。
ionic start ionic4-pwa6 sidemenu --type=angular
cd ionic4-pwa6
ng add @angular/pwa
npm install --save-dev ionic
{{:00.ionic4:pasted:20190223-075743.png}}
から、GitHubにpushして、Netlifyにデプロイ。Netlifyでのコマンドは
ionic build --prod
www
うまくいったようです。PWAとしてスマホでも『ホーム画面に追加』ができそうです。
{{:00.ionic4:pasted:20190223-080433.png}}
Netlify用ソースコード
https://github.com/adash333/ionic4-pwa6
DEMO
https://loving-wright-2a163f.netlify.com
===== サイト内PWAリンク =====
PWAメニュー
[[00.ionic4:09.ionic4でpwa|Ionic4でPWA(Progressive Web Apps)]] ← このページ
[[03.初めてのjavascriptでおみくじアプリ:おみくじアプリのpwa化|おみくじアプリのPWA化]]
[[z_blog:2019:190220_angular7でpwa|Angular7でPWAをNetlifyにデプロイ]]
===== PWAについての参考リンク =====
https://www.seohacks.net/basic/terms/pwa/
{{:00.ionic4:pasted:20190214-153733.png}}
https://ionicthemes.com/tutorials/about/the-complete-guide-to-progressive-web-apps-with-ionic4
https://www.smashingmagazine.com/2018/09/pwa-angular-6/
http://www.jomendez.com/2018/06/05/add-home-screen-pwas/
https://www.joshmorony.com/create-a-pwa-with-angular-service-workers-in-ionic-4/
https://qiita.com/kponda/items/b06d350cb616458d33cd
@kponda
2018年12月20日に投稿
Ionic Advent Calendar 201819日目
Ionic 4 / Angular で PWA
https://qiita.com/bunty/items/a0dc2d6b3986dd1c5a73
@bunty
2019年02月09日に更新
PWAに興味を持っている人向けに概要とか動向とかをまとめた
https://codezine.jp/article/detail/11151
AngularのPWA(Progressive Web Apps)機能でアプリのようなWebページを作成
次世代Webアプリケーションフレームワーク「Angular」の活用 第16回
WINGSプロジェクト 吉川 英一[著] / 山田 祥寛[監修]
2018/10/30 14:00
https://medium.com/poka-techblog/turn-your-angular-app-into-a-pwa-in-4-easy-steps-543510a9b626
Turn your Angular App into a PWA in 4 Easy Steps
Go to the profile of Etienne Talbot
Etienne Talbot
Jul 16, 2018
→Bonus step 2に、add to homescreenのボタンの作成方法の記載があります。
http://www.jomendez.com/2018/06/05/add-home-screen-pwas/
Add to Home Screen your ionic PWA
→ionic3での方法
https://assist-software.net/snippets/building-progressive-web-apps-angular-6-pwa-tutorial
Building Progressive Web Apps with Angular 6 (PWA Tutorial)
October 11, 2018
https://developers.google.com/web/fundamentals/app-install-banners/?hl=ja
ウェブアプリのインストール バナー
https://qiita.com/narikei/items/4240f03542f29e313989
@narikei
2018年09月15日に更新
「ホーム画面に追加」からはじめる『PWA(Service Worker)』
https://swfz.hatenablog.com/entry/2018/08/15/080034?amp=1
2018-08-15
AngularでデスクトップPWAをインストールしてみる
===== リンク =====
目次:[[00.ionic4:index.html|スマホ用ホームページ&スマホアプリ作成ソフトIonic4]]
前:[[00.ionic4:08.ionic4でタイマーアプリ|Ionic4でタイマーアプリ]]
次: