はじめに
概要
このエントリでは、iOSとAndroidで、ネイティブアプリの形でWebサイトを表示するまでの方法を紹介します。
ネット上に同じような趣旨のエントリは散見されるのですが、自分でもやってみたかったのと、iOS/Android両方ともやって見ている記事は少ない気がしたので書いてみることにしました。
このエントリでわかること
- アプリで表示させたいWebサイトがあったとして、ざっくりどんなステップでアプリで表示させるかまでがわかることを狙っています。
対象
- iOS/Androidでアプリの開発をするにあたり、Webサーバをそのままアプリで「表示」するときの手間の度合いが知りたい人
- 自分でネイティブアプリは書けるので、わざわざこのエントリみたいなものを描くのが面倒な人
- Cordovaがあるのは知っているけれど、自分で書き始めてみたらどんな手順になるか知りたい人
iOS版
テンプレを用意しました。
上記サイト内のリポジトリURLをcloneすると、Xcodeのプロジェクトがダウンロードされます。
$ git clone https://github.com/hrkt/dongara-ios.git
XcodeでiOSアプリを開発するとき、実機で動かす上ではハマるポイントがあるので、まずはシミュレータで動作させてみるとよいでしょう(Xcode8で随分便利になりましたが、慣れない人はハマりポイントがあると思われます)。
筆者の作業環境
- macOS 10.12.4
- Xcode 8.3.2 / Swift 3.1
作った手順概要
- XcodeでiOS Appのprojectを新規作成します。
- テストコードなど、デフォルトでつけてくれるものを削除してすっきりさせました。
- デフォルトで作られる「Main.storyboard」に、WebViewを一枚貼り付けて、全体に伸びるようにAuto-layoutのパラメータを指定します。
- デフォルトで作られる「ViewController.swift」に上記webViewのreferenceを設定します。
- URLベタがきはイマイチかなってことで、App.plistからAppUrlプロパティで表示ページを指定できるようにします。
- Webの読み込みイベントくらいは確認したいだろうということで、ViewContrrollerにUIWebViewDelegegateのプロトコルに対応できるような宣言をして、webViewFinishLoadメソッドを記述します。ログを1行書いているだけです。
Android版
テンプレを用意しました。
上記サイト内のリポジトリURLをcloneすると、Android Studioのプロジェクトがダウンロードされます。
$ git clone https://github.com/hrkt/dongara-android.git
筆者の作業環境
- macOS 10.12.4
- Android Studio 2.3.1
作った手順概要
- Android Studioで、新規アプリの作成から「EmptyProject」を選択します。
- テストコードなど、デフォルトでつけてくれるものを削除してすっきりさせました。
- デフォルトで作られるlayout/activity_main.xmlに、WebViewを追加します。xmlの定義で、webViewが画面目一杯になるように設定します。
- デフォルトで作られるMainActivity.javaのonCreateに、webViewの初期化コードを指定します。
- URLベタがきはイマイチかなってことで、res/values/appSettings.xmlからapp_urlプロパティで表示ページを指定できるようにします。
- Androidだと、「戻る」ボタン連打でアプリを終了しますが、これを少しカスタマイズし、webViewで「戻る」ができるときにはページを戻れるようにし、「戻る」ができないときにも、アプリは終了しないように、MainActivityのonKeyDownメソッド内で処理を加えました。
- Androidの標準で付いてくるタイトルバーのアプリ表示は不要なので、AndroidManifest.xmlの中で「android:theme="@android:style/Theme.NoTitleBar"」を指定することにより消しています。
両方に共通のやっていない事項
- 画面の回転制御は何もいじっていません。
- JavaScript側との連携の話は触れていません。気が向いたら今後やってみるかもしれません。
- ダブルタップ時の画面の制御をどうするかなど、いわゆる「OS付属のブラウザの動き」をどこまでゆるすか、制御をかけていくか、という話は書いていません。
今後のTODO
- 気が向いたら、JavaScriptとの連携機能のサンプルを書いてみたり、ネイティブ側の機能を足すサンプルを書いてみる