====== 10.ionic4とcapacitorでgps取得 ======
---//2019/08/28 更新//
Vue.jsとOpenstreetMapを用いた方法を記載させて頂きました。
→[[https://i-doctor.sakura.ne.jp/font/?p=40732|Vue.jsとleaflet.jsとOpenStreetMapで現在値を地図表示するPWAを作成してみる]]
以下のサイトを写経してみたいと思います。
https://alligator.io/ionic/capacitor-location/
{{:00.ionic4:pasted:20190828-101538.png}}
===== ソースコードとDEMOサイト =====
ソースコード
https://github.com/adash333/ionic4-capacitor-gps
DEMOサイト
https://suspicious-pare-d3ae32.netlify.com/
===== 開発環境 =====
Windows 8.1 Pro
nvm-windows 1.1.7
node 10.14.1
npm 6.4.1
ionic@5.2.6
git version 2.17.1.windows.2
Java SE Development Kit 12.0.2 (JDK)
Android Studio 3.5
Node.jsをインストールした状態で、npm install -g ionic@latestでIonic CLIをインストールしています。
また、JDKとAndroid Studioのインストールについては、https://i-doctor.sakura.ne.jp/font/?p=40540に記載しました。
===== 新規Ionic4アプリ作成 =====
C:/ionic/ フォルダをVisualStudioCodeで開き、Ctrl+@でコマンドプロンプトを開き、以下を入力します。
5分くらいかかります。
ionic start ionic4-capacitor-gps tabs --type=angular --capacitor
{{:00.ionic4:pasted:20190828-105755.png}}
{{:00.ionic4:pasted:20190828-105809.png}}
{{:00.ionic4:pasted:20190828-110109.png}}
{{:00.ionic4:pasted:20190828-110128.png}}
次に以下を入力して、一旦、Ionic4アプリを起動してみます。
cd ionic4-capacitor-gps
ionic serve
{{:00.ionic4:pasted:20190828-110418.png}}
{{:00.ionic4:pasted:20190828-110429.png}}
いったん、Ctrl+C => y + Enter でサーバを停止します。
===== tab1.page.htmlの編集 =====
src/app/tab1/tab1.page.html を以下のように編集します。
Coordinates
Latitude: {{ latitude }}
Longitude: {{ longitude }}
(変更前)
{{:00.ionic4:pasted:20190828-111131.png}}
(変更後)
{{:00.ionic4:pasted:20190828-111315.png}}
===== tab1.page.tsの編集 =====
src/app/tab1/tab1.page.ts を以下のように編集します。
import { Geolocation} from '@capacitor/core';
//一部省略
export class Tab1Page {
latitude: number;
longitude: number;
constructor() {
this.getLocation();
}
async getLocation() {
const position = await Geolocation.getCurrentPosition();
this.latitude = position.coords.latitude;
this.longitude = position.coords.longitude;
}
}
(変更前)
{{:00.ionic4:pasted:20190828-111401.png}}
(変更後)
{{:00.ionic4:pasted:20190828-111631.png}}
===== ionic serveで開発サーバで確認 =====
以下を入力して開発サーバを起動すると、ノートパソコンなのに、現在の緯度と経度が表示されました。
{{:00.ionic4:pasted:20190828-112131.png}}
{{:00.ionic4:pasted:20190828-112200.png}}
===== GitHubにpush(アップロード) =====
Ctrl+C => y + Enter でサーバを停止します。
https://github.com/ にログインして、新規リポジトリを作成し、GitHubへpush(アップロード)します。
{{:00.ionic4:pasted:20190828-112500.png}}
{{:00.ionic4:pasted:20190828-112552.png}}
{{:00.ionic4:pasted:20190828-112628.png}}
VisualStudioCodeのターミナル画面(Cmd.exe)で上記を参考にしながら、以下を入力します。
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/adash333/ionic4-capacitor-gps.git
git push -u origin master
{{:00.ionic4:pasted:20190828-112835.png}}
GitHubのページは以下となります。
https://github.com/adash333/ionic4-capacitor-gps
===== Netlifyにデプロイ =====
https://www.netlify.com にログインして、"New site from Git"をクリック。
{{:00.ionic4:pasted:20190828-113119.png}}
GitHubをクリックして
{{:00.ionic4:pasted:20190828-113202.png}}
今回作成したリポジトリ(ionic4-capacitor-gps)を選択します。
{{:00.ionic4:pasted:20190828-113257.png}}
以下のように入力して、"Deploy site"をクリック
npm run build --prod
www
{{:00.ionic4:pasted:20190828-113421.png}}
1分くらい待つと、以下のようになるので、リンクをクリックします。
{{:00.ionic4:pasted:20190828-113654.png}}
https://happy-goldberg-809fba.netlify.com/
次の許可を求めています。。。と表示されるので、許可 をクリック。
{{:00.ionic4:pasted:20190828-113803.png}}
ノートパソコンなのに、緯度と経度が表示されました。これは簡単!すごい!
{{:00.ionic4:pasted:20190828-113847.png}}
上記のアドレスをAndroidスマホで開いてみます。
{{:00.ionic4:pasted:20190828-120056.png}}
許可 をクリックすると、ちゃんと緯度と経度が表示されました。これはすごく簡単!
===== サイトのPWAにtry(新しくNetlifyのサイトを作成する必要あり) =====
せっかくなので、オフラインでも動作してほしいと思うので、PWA化したいと思います。
npm install -g @angular/cli
{{:00.ionic4:pasted:20190828-121844.png}}
私の環境では、Angular CLI: 8.1.3 がインストールされました。
ng add @angular/pwa
npm install --save-dev ionic
{{:00.ionic4:pasted:20190828-122028.png}}
{{:00.ionic4:pasted:20190828-122115.png}}
{{:00.ionic4:pasted:20190828-122221.png}}
GitHubへpushします。
git add .
git commit -m "PWA"
git push
{{:00.ionic4:pasted:20190828-122400.png}}
{{:00.ionic4:pasted:20190828-122416.png}}
GitHubへpushすると、自動的にNetlifyの方も更新されますが、今回は、Netlifyのbuildコマンドも変更する必要があります。
Netlifyでのコマンドは
ionic build --prod
www
に変更となります。
Site Settings をクリック。
{{:00.ionic4:pasted:20190828-122952.png}}
Build and Deploy をクリック。
{{:00.ionic4:pasted:20190828-123057.png}}
{{:00.ionic4:pasted:20190828-123153.png}}
以下のように変更します。
(変更前)
{{:00.ionic4:pasted:20190828-123251.png}}
(変更後)
{{:00.ionic4:pasted:20190828-123316.png}}
しかし、うまくいきませんでした。sevice-worker.jsがうまく読み込めていません。原因は分かりません。
{{:00.ionic4:pasted:20190828-125428.png}}
ちなみに、開発サーバですと、以下の2つのコマンドで、pwa化できていました。
ionic build --prod
npx node-static ./www --spa --port=9000
{{:00.ionic4:pasted:20190828-130712.png}}
{{:00.ionic4:pasted:20190828-130851.png}}
ということで、この www/ フォルダをZIPファイルにしてNetlifyにZIPファイルを投げ込んだら、PWAアプリになりました。なぜGitHubからのデプロイでうまくいかないのか、原因は分かりません。。。
{{:00.ionic4:pasted:20190828-131649.png}}
PWA化したDEMOサイト
https://epic-edison-2e341f.netlify.com/tabs/tab1
{{:00.ionic4:pasted:20190828-131810.png}}
新しくNetlifyのサイトを作成したら、PWA化されていました。
https://suspicious-pare-d3ae32.netlify.com/tabs/tab1
===== (オプション)Add to HomeScreenボタンの追加 =====
http://i-doctor.sakura.ne.jp/web/doku.php?id=00.ionic4:09.ionic4%E3%81%A7pwa#%E3%83%A1%E3%83%A2 を参考に、Add to HomeScreenボタンを追加します。
[[https://gist.github.com/adash333/879641b7d021530c163cae4e3e9c502e|src/app/tab1/tab1.page.html]]
// 一部省略
Install
{{:00.ionic4:pasted:20190828-140934.png}}
[[https://gist.github.com/adash333/879641b7d021530c163cae4e3e9c502e|src/app/tab1/tab1.page.ts]]
// 一部省略
export class Tab1Page {
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;
});
};
}
{{:00.ionic4:pasted:20190828-141129.png}}
{{:00.ionic4:pasted:20190828-141146.png}}
インストールボタンができました。
{{:00.ionic4:pasted:20190828-145604.png}}
===== ソースコードとDEMOサイト =====
ソースコード
https://github.com/adash333/ionic4-capacitor-gps
DEMOサイト
https://suspicious-pare-d3ae32.netlify.com/
===== IonicとCapacitorに関するリンク =====
https://alligator.io/ionic/capacitor-location/
Getting Location Data with Ionic 4 and Capacitor
Brooks Forsyth
https://capacitor.ionicframework.com/docs/apis/geolocation/
Geolocation
===== リンク =====
前:[[00.ionic4:09.ionic4でpwa|Ionic4でPWA(Progressive Web Apps)]]
次:[[00.ionic4:11.IonicとLeafletで地図表示|00.ionic4:11.IonicとLeafletで地図表示]]
[[00.ionic4:index.html|スマホ用ホームページ&スマホアプリ作成ソフトIonic4]]