Статьи

Перенос приложения Cordova дальше с пользовательским интерфейсом Onsen

В первой части этого руководства мы рассмотрели, как приступить к разработке мобильных приложений с использованием пользовательского интерфейса Onsen , проектирования страниц входа и регистрации пользователя. В этом уроке мы сделаем эти страницы функциональными. Мы будем использовать Firebase в качестве бэкэнда для приложения. В пользовательском интерфейсе Onsen мы можем использовать как jQuery, так и AngularJS для разработки. В этом уроке мы будем использовать AngularJS.

Исходный код из этого урока доступен на GitHub .

Начиная

Загрузите или клонируйте исходный код первого учебника. Установите все необходимые зависимости, как показано:

git clone https://github.com/sitepoint-examples/OnsenUI--Part1 cd OnsenUI--Part1 npm install npm install -g gulp gulp serve 

Укажите в браузере http://localhost:8901/index.html и вы увидите приложение, которое мы разработали в первом уроке. Вы также можете использовать эмулятор Android для запуска приложения, как мы делали в первом уроке.

Реализация входа

Давайте начнем с определения контроллера для нашего приложения. Если вы откроете /OnsenUI--Part1/www/js/app.js вы должны увидеть уже определенный контроллер.

 (function() { 'use strict'; var module = angular.module('app', ['onsen']); module.controller('AppController', function($scope) { // more to come here }); })(); 

Сначала мы проверим имя пользователя и пароль для пустых значений. Если есть какие-либо проблемы с проверкой, мы покажем модальное окно с сообщением проверки. В противном случае мы будем аутентифицироваться на базе данных Firebase.

Давайте определим метод с именем SignIn внутри контроллера AppController как показано ниже:

 $scope.data = []; $scope.SignIn = function() { var user = $scope.data.username; var pass = $scope.data.password; if (user && pass) { // success logic } else { // failure logic } }; 

Добавьте директиву ngModel в поля ввода имени пользователя и пароля в index.html как показано ниже:

 <input ng-model="data.username" type="text" placeholder="Username" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;" /> <input ng-model="data.password" type="password" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;" /> 

Далее мы будем использовать ons-modal компонент Onsen UI, чтобы показать всплывающее окно проверки. Добавьте следующий HTML-код на ons-page входа (должно быть около строки 92).

 <ons-modal var="modal"> <br> <br>Invalid Username or Password. <br> </ons-modal> 

Теперь добавьте модальный код показа в логику сбоя SignIn , заменив комментарий // failure logic :

 modal.show(); 

Добавьте модальный код скрытия к событию ng-click HTML, который мы только что добавили, как показано ниже:

 <ons-modal var="modal" ng-click="modal.hide()"> <br> <br>Invalid Username or Password. <br> </ons-modal> 

Добавьте директиву ngClick к кнопке входа, как показано ниже:

 <ons-button id="btnSignIn" modifier="large" ng-click="SignIn()"> SignIn </ons-button> 

Запустите сервер и нажмите кнопку входа с пустым именем пользователя или паролем. Появится модальное сообщение проверки. Нажмите в любом месте всплывающего окна, и оно исчезнет.

Вот демонстрация приведенного выше кода в действии.

Теперь давайте проверим имя пользователя и пароль по Firebase . Чтобы начать работу с Firebase, вам необходимо зарегистрироваться для бесплатной учетной записи. После регистрации и входа в систему вы получите URL-адрес Firebase, который в моем случае:

 https://burning-fire-1723.firebaseio.com/ 

Включите следующие скрипты в index.html :

 <script type='text/javascript' src='https://cdn.firebase.com/js/client/1.0.17/firebase.js'></script> <script type='text/javascript' src='https://cdn.firebase.com/js/simple-login/1.6.1/firebase-simple-login.js'></script> 

Во-первых, нам нужно создать экземпляр firebase, используя наш URL-адрес. Затем, используя этот экземпляр firebase, создайте экземпляр FirebaseSimpleLogin . Поместите этот код после определения app.js в app.js :

 var firebaseRef = new Firebase('https://burning-fire-1723.firebaseio.com'); var auth = new FirebaseSimpleLogin(firebaseRef, function(error, user) { if (!error) { if (user) { // On success authentication console.log(user); } } }); 

Внутри функции SignIn мы аутентифицируем имя пользователя и пароль, как показано, заменим текущую функцию на код ниже:

 $scope.SignIn = function() { var user = $scope.data.username; var pass = $scope.data.password; if (user && pass) { // success logic auth.login('password', { email: user, password: pass }); } else { // failure logic modal.show(); } }; 

Мы использовали auth.login для аутентификации имени пользователя и пароля в базе данных firebase. При успешной аутентификации пользователь будет авторизован.

Чтобы включить процесс аутентификации, сначала войдите в firebase и откройте приложение, над которым вы сейчас работаете. В левом меню нажмите « Login & Auth . На вкладке « Email & Password » установите Enable Email & Password Authentication « Enable Email & Password Authentication .

Добавьте нового пользователя в базу данных Firebase с именем пользователя и паролем. Теперь запустите приложение и попробуйте войти, используя новое имя пользователя и пароль. Проверьте консоль браузера, в которой пользователь вошел в систему при успешной аутентификации пользователя.

Вот демонстрация приведенного выше кода в действии. Попробуйте войти, используя имя пользователя [email protected] и пароль sam .

Далее при успешном входе в систему мы перенаправим пользователя на home.html . Создайте новый файл с именем home.html со следующим кодом.

 <ons-template id="home.html"> <ons-page> <ons-toolbar> <div class="center">Welcome</div> <div class="right"> <ons-icon icon="ion-log-out" size="40px" title="Logout" style="cursor:pointer;" ng-click="logout()"></ons-icon> </div> </ons-toolbar> <div style="text-align: center"> <br /> <ons-page> <p style="padding-top: 100px; color: #999; text-align: center">Welcome Home {{username}}!!</p> </ons-page> </div> </ons-page> </ons-template> из <ons-template id="home.html"> <ons-page> <ons-toolbar> <div class="center">Welcome</div> <div class="right"> <ons-icon icon="ion-log-out" size="40px" title="Logout" style="cursor:pointer;" ng-click="logout()"></ons-icon> </div> </ons-toolbar> <div style="text-align: center"> <br /> <ons-page> <p style="padding-top: 100px; color: #999; text-align: center">Welcome Home {{username}}!!</p> </ons-page> </div> </ons-page> </ons-template> или <ons-template id="home.html"> <ons-page> <ons-toolbar> <div class="center">Welcome</div> <div class="right"> <ons-icon icon="ion-log-out" size="40px" title="Logout" style="cursor:pointer;" ng-click="logout()"></ons-icon> </div> </ons-toolbar> <div style="text-align: center"> <br /> <ons-page> <p style="padding-top: 100px; color: #999; text-align: center">Welcome Home {{username}}!!</p> </ons-page> </div> </ons-page> </ons-template> 

Добавьте новый метод с именем logout как показано ниже:

 $scope.logout = function() { auth.logout(); // logging out the firebase $scope.data = []; // clearing user data myNavigator.popPage(); // redirecting to sign in page }; 

Теперь измените обратный вызов FirebaseSimpleLogin как показано:

 var auth = new FirebaseSimpleLogin(firebaseRef, function(error, user) { if (!error) { if (user) { $scope.username = user.email; myNavigator.pushPage('home.html', { animation: 'slide' }); } } }); 

Мы использовали ons-navigator для навигации по страницам. myNavigator.pushPage используется для перехода на страницу home.html .

Вот демонстрация приведенного выше кода в действии.

Реализация регистрации

Мы будем реализовывать функциональность регистрации также с использованием Firebase. На странице регистрации у нас есть три поля ввода для регистрации. Мы будем использовать только электронную почту и пароль, так как это все, что требуется для регистрации пользователя Firebase.

Сначала добавьте директиву ngModel в оба поля, как показано:

 <ons-list-item> <input type="text" placeholder="Email Address" ng-model="reg.email" class="text-input text-input--transparent" style="margin-top:58px; width: 100%;"> </ons-list-item> <ons-list-item> <input type="text" ng-model="reg.pass" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;"> </ons-list-item> или <ons-list-item> <input type="text" placeholder="Email Address" ng-model="reg.email" class="text-input text-input--transparent" style="margin-top:58px; width: 100%;"> </ons-list-item> <ons-list-item> <input type="text" ng-model="reg.pass" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;"> </ons-list-item> или <ons-list-item> <input type="text" placeholder="Email Address" ng-model="reg.email" class="text-input text-input--transparent" style="margin-top:58px; width: 100%;"> </ons-list-item> <ons-list-item> <input type="text" ng-model="reg.pass" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;"> </ons-list-item> или <ons-list-item> <input type="text" placeholder="Email Address" ng-model="reg.email" class="text-input text-input--transparent" style="margin-top:58px; width: 100%;"> </ons-list-item> <ons-list-item> <input type="text" ng-model="reg.pass" placeholder="Password" class="text-input text-input--transparent" style="margin-top:8px; width: 100%;"> </ons-list-item> 

Создайте метод SignUp в AppController который проверит адрес электронной почты и пароль для пустых значений. Используйте метод auth.create чтобы зарегистрировать нового пользователя, как auth.create ниже:

 $scope.reg = []; $scope.SignUp = function() { var email = $scope.reg.email; var password = $scope.reg.pass; auth.createUser(email, password, function(error, user) { if (!error) { myNavigator.popPage(); } else { alert('error'); } }); }; 

Добавьте директиву ngClick к кнопке регистрации, как показано ниже:

 <ons-button modifier="large" ng-click="SignUp()"> Sign Up </ons-button> 

Добавьте новый модал на страницу регистрации, который мы покажем, если пользователь не введет адрес электронной почты или пароль. Вот как это выглядит:

 <ons-modal ng-click="modal.hide()" var="modal"> <br> <br>Enter Email Address and Password. <br> </ons-modal> 

Измените функцию SignUp, как показано ниже:

 $scope.SignUp = function() { var email = $scope.reg.email; var password = $scope.reg.pass; if (email && password) { auth.createUser(email, password, function(error, user) { if (!error) { myNavigator.popPage(); } else { alert('error'); } }); } else { modal.show(); // to show validation pop up message } }; 

Теперь перезапустите приложение и попробуйте зарегистрироваться. При успешной регистрации он перейдет на страницу входа. Попробуйте войти, используя новые учетные данные, и вы должны войти в систему.

Вот демонстрация вышеупомянутых функций входа и регистрации в действии.

Вывод

В этом руководстве мы реализовали функции входа и регистрации, используя инфраструктуру пользовательского интерфейса Onsen и Firebase в качестве серверной части.

Посмотрите на ряд других компонентов, предлагаемых пользовательским интерфейсом Onsen. Для более глубокого изучения структуры пользовательского интерфейса Onsen обратитесь к официальным документам .

Дайте нам знать ваши мысли в комментариях ниже!