スマートフォンアプリケーションを作成するときに企業が直面する主要な問題の1つは、 異なるプラットフォーム間でネイティブアプリケーションを構築する 。一方 精通したフロントエンド開発者 この問題への対処を支援することを約束するいくつかのハイブリッドプラットフォームの開発に同調しました、 Ionicフレームワーク そして Firebase はダイナミックなデュオであり、JavaScriptとHTML5を使用してリアルタイムのスマートフォンアプリケーションを構築する際に驚くほどの柔軟性を提供します。
このチュートリアルでは、これらのマルチプラットフォームモバイル開発ツールの機能を紹介し、IonicとFirebaseの例もいくつか提供します。
(注:この記事は、AngularJSフレームワークの基本にある程度精通していることを前提としています。 AngularJSに関するすばらしい紹介記事 その背景がない人のために。)
Ionic Frameworkは、次の3つの主要コンポーネントで構成されています。
Ionicフレームワークにも 便利なCSSコンポーネントがたくさん すぐに使用できます。
学習曲線を簡素化し、開発者を迅速に立ち上げて実行するのに役立つ広範なドキュメント、例、およびスタータービデオを提供してくれたIonicに称賛を送ります。
Firebaseは、サービスとしてのバックエンドスキーマレスデータシステムであり、カスタムコードを記述しなくても、リアルタイムのデータ同期を提供します。 Firebaseを使用すると、バックエンド開発の多くが廃止されるため、マルチプラットフォームの開発時間が大幅に短縮されます。
主な機能と利点は次のとおりです。
Firebaseは、フロントエンドコードをホストするためのクラウドサービスも提供します。これにより、デプロイとメンテナンスにかなりの時間を費やすことができます。
また、注目に値する FirebaseはGoogleに買収されました 今年の10月は、注目と可視性が大幅に向上しました。
ルームメイトはしばしば費用を分担し、必要なときにお互いに頼ります。それでは、ルームメイトが経費を追跡し、月末に調整できるようにしましょう。
さらに面白くするために、リアルタイムの更新を提供するマルチプラットフォームのモバイルアプリケーションを構築して、それぞれが発生した経費を監視できるようにします。
何を構築するかを決定し、ツールを紹介したので、始めましょう。
最初に行う必要があるのは、Ionicをインストールすることです。 Ionicに記載されているインストール手順に従ってください 入門 ページ。 (Ionicはに依存していることに注意してください NodeJS 、そのため、まだマシンにインストールしていない場合は、手順でそれもインストールする必要があります)。
ザ・ AngularFire5分のチュートリアル Firebaseに慣れるための絶好の場所です。そして、あなたが「いじくり回し」または私のような触覚学習者であるなら、あなたは引っ張りたいと思うかもしれません 私の実装 GitHubから、コードで遊んでみましょう。
このチュートリアルでは、サンプルtabs
を使用します。私たちのアプリの基礎としてIonicインストールの一部として提供されるアプリ。 (サンプルアプリはコマンドionic start myApp tabs
で実行できます。)
オブジェクト指向プログラミング言語は、ソフトウェア開発者によって使用されなくなりました。
サンプルを開くtabs
お気に入りのIDEのアプリ(私は使用しています ウェブストーム )そして、ルームメイトアプリを構築するためにそれを変更し始めましょう。
IonicとFirebaseアプリの例では、次の3つの画面が必要です。
![]() | ![]() | ![]() |
これらの画面を作成する前に、サンプルアプリでデフォルトで提供されている「友達の詳細画面」を次のように削除しましょう。
www/templates/friend-detail.html
を削除しますファイル。www/js/app.js
で、friend-detail.html
の状態を削除(またはコメントアウト)します。www/js/controllers.js
で、FriendDetailCtrl
を削除します削除した状態で参照されているコントローラー。それでは、 アイコン 画面下部のタブセレクターのテキストは次のようになります。
これは、www/templates/tabs.html
に次の変更を加えるだけで簡単に実行できます。
expenses
データをFirebaseに接続する前に、リストを作成してwww/templates/tab-dash.html
という配列にバインドしましょう。次のコードを {{expense.label}} {{expense.cost}} Total Spent {{getTotal()}} Add
に追加します。
DashCtrl
www/js/controllers.js
も拡張する必要がありますexpenses
でaddExpense
を含める配列、およびgetTotal
メソッドと.controller('DashCtrl', function($scope) { $scope.expenses = [{ by: ‘email’, label: ’test’, cost: 10 }]; $scope.addExpense = function(e) { $scope.expenses.push({ by: label: $scope.label, cost: $scope.cost }); $scope.label = ''; $scope.cost = 0; }; $scope.getTotal = function() { var rtnTotal = 0; for (var i = 0; i <$scope.expenses.length; i++) { rtnTotal += $scope.expenses[i].cost; } return rtnTotal; }; })
次のような方法:
expenses
addExpense()
配列は、経費リストのアイテムを格納するものですexpenses
メソッドはgetTotal()
に新しい値を追加します配列、およびtab-friends.html
メソッドは、配列内のすべてのアイテムの合計を提供します。
同様の一連の変更をhttps://.firebaseio.com
に加える必要があります。自分でこれを試してみてください。ただし、問題が発生した場合、またはこれが適切に行われたことを確認したい場合は、を参照してください。 私の実装 GitHubで。
Firebaseアカウントが必要になります。サインアップできます ここに 無料のFirebase「ハッカープラン」をご利用いただけます。
サインアップすると、 ルートURL 、www/index.html
のようになります。
アプリでFirebaseを有効にするには、アプリに2つの小さなmodが必要です。
まず、Firebaseスクリプトをアプリに含める必要があります'firebase'
次のようにファイルします。
'starter'
次に、angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'firebase'])
を追加して、Firebaseモジュールをアプリケーションに追加する必要があります。 AngularJSのリストへwww/js/services.js
モジュール:
.factory('fireBaseData', function($firebase) { var ref = new Firebase('https://luminous-fire-3429.firebaseio.com/'), refExpenses = new Firebase('https://luminous-fire-3429.firebaseio.com/expenses'), refRoomMates = new Firebase('https://luminous-fire-3429.firebaseio.com/room-mates'); return { ref: function() { return ref; }, refExpenses: function() { return refExpenses; }, refRoomMates: function() { return refRoomMates; } } });
他のAngularJSモジュールと同様に、Firebaseが有効になりました。
ザ・ AngularFire5分のチュートリアル コントローラでデータ参照を作成する方法を説明します。ただし、デモアプリでは、これらの参照を別のサービスに保持することにしました(これにより、ルートURLが変更された場合の保守と更新がはるかに簡単になるため)。このサービスを作成するには、expenses
に以下を追加します。
room-mates
上記のコードは、3つの参照URLを追加します。 1つはルート用で、2つは名前を付けたコレクション用ですexpenses
および https://.firebaseio.com/expenses
。
Firebaseに新しいコレクションを追加するには、その名前を最後に追加するだけです。 ルートURL 。したがって、expenses
を作成するには必要なコレクションです。必要なのは次のとおりです。
DashCtrl
これにより、www/js/controllers.js
が作成されますコレクションを作成すると、オブジェクトの追加を開始できます。
これで、Firebaseからの経費回収をフックして、以前に作成した「ダミー」の経費配列を置き換えることができます。これは、.controller('DashCtrl', function($scope, fireBaseData, $firebase) { $scope.expenses = $firebase(fireBaseData.refExpenses()).$asArray(); $scope.addExpense = function(e) { $scope.expenses.$add({ by: , label: $scope.label, cost: $scope.cost }); $scope.label = ''; $scope.cost = 0; }; $scope.getTotal = function() { var rtnTotal = 0; for (var i = 0; i <$scope.expenses.length; i++) { rtnTotal += $scope.expenses[i].cost; } return rtnTotal; }; })
を変更することによって行われます。 FriendsCtrl
で次のように:
API「undefined」が存在しないか、アクセスする権限がありません
ionic run android
ionic emulate ios
にも同様の変更を加える必要があります。自分でこれを試すことをもう一度お勧めしますが、問題が発生した場合、またはこれが適切に行われたことを確認したい場合は、を参照してください。 私の実装 GitHubで。
2つの異なるクライアントでアプリを実行しているときに、アプリが機能していることを確認するには、新しい経費を追加して、両方のクライアントのリストに表示されることを確認します。それがうまくいけば…ウーフー!これで、IonicアプリをFirebaseに正常に接続できました。
デバイスをシステムに接続して{ 'rules': { '.read': 'auth != null', '.write': 'auth != null' } }
を実行することにより、さまざまなデバイスでマルチプラットフォームアプリをテストできます。またはwww/templates/tab-account.html
。詳細については、Ionicのドキュメントを参照してください。 アプリのテスト 。
基本的な機能は現在機能していますが、深刻な問題の1つは、アプリが現在完全に安全でないことです。許可やログインを必要とせずに、世界中があなたの経費を見ることができます。これは明らかに対処する必要があります。
Firebaseは、「ルール」を使用した強力でありながらシンプルな認証フレームワークを提供します。 Firebaseのルール言語を使用して実行できることはたくさんあります。 (を参照してください Firebaseのセキュリティドキュメント 詳細については。)
この例では、許可されていないユーザーがデータにアクセスするのをブロックする非常に簡単なルールを作成します。これを行うには、ルートURLを開き、左側のアクションバーの[セキュリティとルール]をクリックして、以下のコードをルールに貼り付け、[保存]をクリックします。
Email Password Login You are logged in as {{user.password.email}} Logout
ここでアプリケーションを実行すると、データがないことに気付くでしょう。ブラウザツールを使用してリクエストを検査することもできます。コンソールに、データの表示が許可されていないことを示すメッセージが表示されます。
ユーザーに独自のメールとパスワードの組み合わせを作成させるか、既存のGoogle、Facebook、Twitter、またはGithubのログイン認証情報を使用してユーザーを認証できます。メール/パスワード認証の場合、Firebaseはパスワードの変更やリセットなどのAPIメソッドのフルセットを提供します。 Firebaseを使用した認証 Firebaseガイドに記載されています。
デモアプリでは、Firebaseインターフェースを介して2つのユーザーアカウントを作成します。これは、FirebaseのルートURLに移動し、次の手順を実行することで実行できます。
ユーザーのログインインターフェースを有効にするには、最初に次のコードをAccountCtrl
に追加します。
www/controller.js
次に、以下を.controller('AccountCtrl', function($scope, fireBaseData) { $scope.showLoginForm = false; //Checking if user is logged in $scope.user = fireBaseData.ref().getAuth(); if (!$scope.user) { $scope.showLoginForm = true; } //Login method $scope.login = function (em, pwd) { fireBaseData.ref().authWithPassword({ email : em, password : pwd },function(error, authData) { if (error === null) { console.log('User ID: ' + authData.uid + ', Provider: ' + authData.provider); $scope.user = fireBaseData.ref().getAuth(); $scope.showLoginForm = false; $scope.$apply(); } else { console.log('Error authenticating user:', error); } }); }; // Logout method $scope.logout = function () { fireBaseData.ref().unauth(); $scope.showLoginForm = true; }; });
に追加しますvar r = $firebase(fireBaseData.refRoomMates()).$asArray(); // NOTE: Substitute the email addresses of your two user accounts in the line below r.$add([' [email protected] ',' [email protected] ']);
で:
dashCtrl
セキュリティの観点から注意すべき重要なことの1つは、 Firebaseログインはデフォルトで永続的です 。したがって、アプリケーションを起動するたびにユーザーがログインする必要がある場合は、それに応じてFirebase構成を変更する必要があります。これを行うには、 一度 ログインに成功したら、次のコードを実行します。
www/js/controllers.js
ログインに成功した後にアカウントコントローラーにこれを追加するか、ログインに成功した後にブレークポイントを設定してコンソールインスペクターで実行できます。
ただし、マルチプラットフォームモバイルアプリには、まだ1つの重要な機能がありません。私たちはあなたの費用をあなたのルームメイトの費用と区別したいと思います。 2つのアカウントを作成したので、ビューのデータをフィルタリングする必要があります。
最初に.controller('DashCtrl', function($scope, fireBaseData, $firebase) { $scope.expenses = $firebase(fireBaseData.refExpenses()).$asArray(); $scope.user = fireBaseData.ref().getAuth(); // ADD MESSAGE METHOD $scope.addExpense = function(e) { $scope.expenses.$add({ by: $scope.user.password.email, label: $scope.label, cost: $scope.cost }); $scope.label = ''; $scope.cost = 0; }; $scope.getTotal = function () { var rtnTotal = 0; for (var i = 0; i <$scope.expenses.length; i++) { rtnTotal += $scope.expenses[i].cost; } return rtnTotal; }; })
を変更する必要がありますwww/templates/tab-dash.html
で(a)現在のユーザーのデータを$ scopeに取得し、(b)現在のユーザーの追加費用を節約するために:
www/templates/tab-friends.html
次に、FriendsCtrl
にフィルターを追加する必要があります現在のユーザーの費用のみを表示するには:
www/controllers.js
OK、ホーム画面は完璧になりました。ユーザーは自分の経費のみを表示して追加できます。
最後の最後のステップは、ルームメイト間で完全な経費リストを共有できるようにすることです。これを行うには、.controller('FriendsCtrl', function($scope, fireBaseData, $firebase) { $scope.user = fireBaseData.ref().getAuth(); $scope.expenses = $firebase(fireBaseData.refExpenses()).$asArray(); $scope.roomies = $firebase(fireBaseData.refRoomMates()).$asArray(); $scope.roomies.$loaded().then(function(array) { //array = [[set1_rm1_email, set1_rm2_email], [set2_rm1_email, set2_rm2_email] ...] for (var i = 0; i
次に、
|_+_|を変更します
|_+_|で次のように:
それでおしまい!デバイスとルームメイトのデバイスの両方にアプリをインストール/更新すると、準備が整います。
私たちの簡単な例は、IonicとFirebaseを使用して、達成できること、そしてそれがどれほど簡単に達成できるかという表面をかじり始めただけです。これらは、JavaScriptとHTML5を使用してリアルタイムのマルチプラットフォームスマートフォンアプリケーションを構築するための強力なデュオです。
関連: Angular 6チュートリアル:新しいパワーを備えた新機能 (Firebaseバックエンドを含むフルスタックの例)