新たな自分専用アプリを作り始めました、Safariのアクション・ボタンから起動し表示中のWebページをPDFに変換し保存するアプリです。
作った理由は今までは気になるWeb記事等はEvernoteに保存していたのですが、Evernoteの無料プランの容量制限で保存出来ない事がまま発生してしまう事です。しかも保存した記事を調べる事は年に1〜2回くらいしか無いので、有料プランに移行することは躊躇します。
もう一つの理由は Firebase を使ってみたかったからです。
Firebase
Firebaseは、 MBaaS(Mobile Backend as a Service)と言われるスマフォアプリやSPA(PWA)用のバックエンド(サーバー)に必用な機能を提供してくれるサービスです。
数年前に多数のMBaaS(BaaS)が現れましたが、ほとんどが消えてしまいました。しかしFirebaseはGoogleに買収されサービスとして存続しています。
Firebaseには NonSQLデータベース Cloud Firestore 、大規模なファイルストレージ Cloud Storage 、SNSやパスワード認証を行う Firebase Auth など、スマフォアプリのバックエンドに必用な機能を提供してくれます、またサーバー側にロジックを置ける Cloud Functions や画像やテキストの認識などが簡単に出来る機械学習 ML Kit などもサポートされています。
今回は、PDFファイルの保存に Cloud Storage、保存情報(URL, タイトル、保存日時・・・)の管理を Cloud Firestore、ログイン認証に Firebase Authを使いました。
Firebaseには ガイド などわかりやすいドキュメントが日本語で用意されていて、比較的直ぐに使い始める事が出来ます。ただしガイドだけではわからない事もありAPIリファレンスやサンプルコード、ネット上の情報を参照する必用もままありました。
App Extention
思った以上に難しかったのがSafariのアクション(共有)・ボタンに表示中ページを取り込む機能を追加する部分でした。このような機能は App Extension と呼ばれ、独自のApp Extensionを作る事ができます。
App Extentionは既存アプリと連携して動く特殊なコードで、ドキュメント App Extension Programming Guide がありますが判りにくく、サンプルコード等も少なく作るのに手間取りました。
またApp Extensionのコードはいろいろな制限があり、App Extensionから直接 Firebase APIが呼べない事が、だいぶ開発が進んでから判りました ^^);
そこで 「Web記事保存アプリ」本体にWebを取り込む機能を付け、App ExtensionはWeb記事保存アプリをCustom URL Schemeを使って起動するだけにしました。
開発状況
現時点で、
- Safariのアクション・ボタンから起動し表示中のWebページをPDFに変換し、ページ情報と共に保存する
- 保存したWebページの一覧、選択したWebページのPDF表示
の基本機能は出来ましたが、まだUIは完成にはほど遠い状況なので、GitHubでのソースコードの公開は次回にしたいと思います。
今後、時間を見つけUIの改善、バグ対応を行って使えるアプリにして行きたいと思います。
また、Web記事の保存はMacでも行いたいのでこちらも調査・実装したいと思っています。