https://kimizuka.github.io/web-app-store/example/
北斗市公式キャラクター ずーしーほっきー ©2013 北海道北斗市 を使用させていただいております。
ウェブページをできる限りネイティブアプリっぽくみせて配信するために色々研究しました。
もくじ
- はじめに
- ウェブアプリとは
- 今回制作したもの
- ネイティブアプリとの比較
- ストア以外での配信方法
- ホームアイコンの設定方法
- フルスクリーンでの表示方法
- オフラインでのアクセス
- プッシュ通知(断念)
- カメラへのアクセス
- GPS / 加速度センサ / ジャイロセンサ へのアクセス
- ランドスケープでの固定(断念)
- 大技(Safariから開かれたかホーム画面からひらかれたかの判定)
- 小技(タップした際の黒ずみ除去 / 長押しでメニューを開かない / テキスト選択不可 / スクロール不可)
- その他、実装の上で頑張ったところ
- まとめ
1. はじめに
このエントリーは Tech KAYAC Advent Calendar 2016 の12日目の記事です。
こんにちは。カヤックのフロントエンジニア、@ki_230 です。
普段はウェブフロントエンジニアとして勤務しているのですが、趣味でiPhoneアプリをつくったりもしています。
今年も2本アプリをつくっていたのですが、、、
全然審査を通過できない! (T_T)
そう。全然審査を通過できないまま2016年が終わろうとしているのです。
ちなみに審査を通過できない理由は、「価値が長続きしない」とのこと。
https://developer.apple.com/app-store/review/rejections/jp/ より引用
価値が長続きしない! (T_T)
別にアップルさんを責めたいわけじゃないんです。
なにに価値を感じるかは人それぞれなわけですから。
ただ、私が本職で無い分、凝ったアプリがつくれないんですね。
大体がウェブでも成立するようなアプリになってしまうんです。
しかし、ここで逆転の発想です。
こうなったら、ウェブアプリで実装してしまおう。と。
そして、それを配信する仕組みもつくってしまおう。と。
アップルから逃げるのは恥ではあるのだけど、役に立つであろう。と。
そう決意したところからこのプロジェクトははじまりました。
2. ウェブアプリとは
定義
一般的なウェブアプリとは、ウェブ上で動作するアプリケーションのことですが、
今回はサーバサイドをつかわずに HTML + CSS + JavaScript で動作するアプリケーションのこととします。
配信方法
iOSのSafariにはホーム画面に追加という、ウェブクリップをホーム画面に追加する機能があります。
例えば カヤックサイト をホーム画面に追加すると、、、
こんな感じです。
今回はこの機能をつかって、ユーザーにホーム画面においてもらうことを配信と呼ぶことにしましょう。
3. 今回制作したもの
- iOSのSafariからアクセスした際はストアっぽい見た目になる
- ホーム画面に追加してから開いた際はアプリっぽい見た目になる
- ホーム画面に登録して1度開けば、2度目以降はオフラインでも開ける
また、
- Androidからアクセスした場合はアプリっぽい見た目になる
- PCなどからアクセスした場合はQRコードが表示される
というものを比較的簡単につくれるフレームワーク風のものをつくりました。
2016年なんで、 React とか Gulp とかつかおうかともおもったんですが、
そんなに複雑なものをつくるわけじゃないので、生HTML、生JavaScriptで書きました。(CSSだけはCompassをつかいました)
オフラインでの動作を考えると、余計なライブラリを読み込ませるのは勿体無いですからね。
DEMO
北斗市公式キャラクター ずーしーほっきー ©2013 北海道北斗市 を使用させていただいております。
Safariで開いたときと、ホーム画面から開いたときで表示が全然違うものになっています。
kimizuka.github.io
※ iPhoneでご観覧ください!
4. ネイティブアプリとの比較
ネイティブアプリ | ウェブアプリ | |
---|---|---|
ストア以外での配信 | △ | ○ |
ホームアイコンの設定 | ○ | ○ |
フルスクリーンでの表示 | ○ | △ |
オフラインでのアクセス | ○ | △ |
プッシュ通知 | ○ | × |
カメラへのアクセス | ○ | △ |
GPSへのアクセス | ○ | ○ |
加速度センサへのアクセス | ○ | ○ |
ジャイロセンサへのアクセス | ○ | ○ |
マイクへのアクセス | ○ | × |
ランドスケープでの固定 | ○ | × |
前提として、あたりまえのことですが、基本的にネイティブアプリの方が高性能です。
プッシュ通知 や アプリケーションバッジ をつかいたい場合、マイク をつかいたい場合、 横向きで固定 したい場合はネイティブアプリをつくりましょう。
最近はSafariの性能があがってきているので、簡単なカジュアルゲームぐらいだったらウェブアプリでもなんとかなります。
では、ひとつずつ解説していきましょう。