Encrypting your website's traffic is very important to protect your customer info and also get higher ranking in Google search (according to Google announcement on HTTPS). Google's search results will favor encrypted sites over those that are insecure, and the weighting that secure sites are given will only increase over time. Day by day, the websites use HTTPS are getting higher ranking than others not using HTTPS which will be alerted by famous browsers (Chrome, Firefox) as insecure website. Then you can image how it affect to your customers.
To make your website fully encrypted and authorized, normally you have to buy a "secure certificate" (SSL Certificate). This certificate, issued by a trusted third party, would then be installed on your site to confirm to your visitors that your website is encrypted (secured) and who you are.
Nothing is matter if you have $$$. But in this article, I want introduce a free solution with Let's Encrypt. To know how it works, please read this document. Basically, Let's Encrypt provides a mechanism working on top a protocol called ACME (Automated Certificate Management Environment) which allows to create your secure certificates manually then validate, sign, install and even renew them automatically.
If you're using Debian-based OS, you can read the official document for quick start. I hope in future, Let's Encrypt will have an official tool to support Windows IIS. But to live before that time, we also have some clients (provided by third parties) to get and manage the secure certificate from Let's Encrypt if you own a Windows IIS server.
1. ACMESharp
It is an ACME library and client for the .NET platform. It uses PowerShell to configure. Read here for quick start.
2. letsencrypt-win-simple
It is built on top of ACMESharp for supporting Windows CLI instead of PowerShell. You can read its Command Line Arguments here.
3. Certify for Windows
It is an application with GUI for Windows (also based on ACMESharp) which uses the Let's Encrypt service to provide free trusted SSL certificates for websites you control.
Certify will automatically configure your website on IIS with Let's Encrypt. After creating New Certificate for your domain, let check http://{your site}/.well-known/acme-challenge/configcheck to see if you can access this file. Let's Encrypt service requires to access this file to issue a certificate for you. If you cannot access this file, you must edit web.config file in same folder or follow here to configure Extension Static Files on IIS.
Remember that the certificate only valid in 90 days. So you should renew it on time. Just open it in Certify then click Renew button.
Currently Let's Encrypt just supports single domain certificate, hope in future it can support multi-domains certificate. Let wait.
Thanks for your reading.
Friday, March 18, 2016
Tuesday, March 1, 2016
Visual Studio Code: how to work with GitHub
Visual Studio Code (VSC) is powerful editor for developer in web app project. I like to use it in my project relating to Angular. GitHub provides public git repositories for community.
Below are steps to help you work with your GitHub from your project on VSC:
1. Install git
+Download and install GIT from: http://git-scm.com/downloads
+If you use Windows, let set PATH environment includes the folder which GIT is installed
+Check if GIT works by the command: # git --version
2. Create an empty repository on your GitHub and get its URL. To avoid errors, do not initialize the new repository with README, license, or gitignore files. You can add these files after your project has been pushed to GitHub. For example my repository is: https://github.com/vnheros/ionic-test-FB-login
3. Use command line, go to your project folder. Configure your GIT global user & email (this step just is needed to do one time, you don't need to redo for later projects):
# git config --global user.email "your email"
# git config --global user.name "your name"
4. Open your project on VSC and initialize git repository for your project:
Or you can run the command:
# git init
5. Create a README.md and commit all files in the folder to your repository on GitHub, below is command lines for example:
# echo "blah blah about the project" >> README.md
# git add README.md
# git commit -m "first commit"
# git remote add origin https://github.com/vnheros/ionic-test-FB-login.git
# git push -u origin master
Note:
+You must replace my https://github.com/vnheros/ionic-test-FB-login.git by the URL of your repository. Don't forget suffix .git in the end of the URL.
+Last command will require you input username & password of your account on GitHub
+Use .gitignore file to skip folders which you don't want to submit to GitHub
+Use http://dillinger.io/ to edit & check your README.md, then copy & paste it to VSC
Now your project is binding with the repository on GitHub, you can use GIT function on VSC to add and commit any files when changing.
Happy codding! Welcome any comments!
Below are steps to help you work with your GitHub from your project on VSC:
1. Install git
+Download and install GIT from: http://git-scm.com/downloads
+If you use Windows, let set PATH environment includes the folder which GIT is installed
+Check if GIT works by the command: # git --version
2. Create an empty repository on your GitHub and get its URL. To avoid errors, do not initialize the new repository with README, license, or gitignore files. You can add these files after your project has been pushed to GitHub. For example my repository is: https://github.com/vnheros/ionic-test-FB-login
3. Use command line, go to your project folder. Configure your GIT global user & email (this step just is needed to do one time, you don't need to redo for later projects):
# git config --global user.email "your email"
# git config --global user.name "your name"
4. Open your project on VSC and initialize git repository for your project:
Or you can run the command:
# git init
5. Create a README.md and commit all files in the folder to your repository on GitHub, below is command lines for example:
# echo "blah blah about the project" >> README.md
# git add README.md
# git commit -m "first commit"
# git remote add origin https://github.com/vnheros/ionic-test-FB-login.git
# git push -u origin master
Note:
+You must replace my https://github.com/vnheros/ionic-test-FB-login.git by the URL of your repository. Don't forget suffix .git in the end of the URL.
+Last command will require you input username & password of your account on GitHub
+Use .gitignore file to skip folders which you don't want to submit to GitHub
+Use http://dillinger.io/ to edit & check your README.md, then copy & paste it to VSC
Now your project is binding with the repository on GitHub, you can use GIT function on VSC to add and commit any files when changing.
Happy codding! Welcome any comments!
Thursday, February 18, 2016
Emotion and special characters for Facebook post
Do you like to see a post on Facebook with emotion or special characters? They will make your post more attractive. Especially if you want to promote your post in a marketing campaign.
Below is list of fantastic characters that you can use:
1. Miscellaneous
☻ ♦ ♣ ♠ ♥ ♂ ♀ ♪ ♫ ☼ ✿ ⊰ ⊱ ✪ ✣ ✤ ✥ ✦ ✧ ✩ ✫ ✬ ✭ ✯ ✰ ✱ ✲ ❃ ❂ ❁ ❀ ✿ ✶ ❉ ❋ ❖ ⊹⊱✿ ✿ ⊰ ⊹ ☆ 🐵 🏪 🍉 👵 👒 🎢 🎈 🐘 💠 😢 🎅 👏 ☝ 💣 🍴 🆒 😌 👲 📡 ☚ 웃 유 ☠ ☯ ☢ ☣ Σ π Ω ♤ ♧ ♡ ♢ ☦ ✞ ⌘ ✡ ✄ ✐ ∞ ▲ ▼ ◎ ☭ 卐 ☪ ™ ¿ ¡ ½ ⅓ ⅔ ¼ № ❝ ❞ ❖ ⚔ ⚖ ⚛ ♲ ⚤ ¶ § ✱ ✲ ❊ ❋ ✻ ✼ ✽ ✵ ✺ ❃ ❅ ❆ ᔓ ᔗ҉ ✾ ❀ ❁ ✿ ⢏ ★ ☆ ✡ ✩ ❂ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✶ ✷ ✸ ✹ ☏ ☠ ☢ ☤ ☪ ✎ ✐ ✑ ✆ ☃ ☄ ☂ ⍭ ☣ ☫ ☬ ☭ ☮ ✇ ☯ ☸
2. Love
❥ ❣ ♡ ღ ❦ ♂ ♀ 웃 유
3. Stars & Flowers
✪ ✩ ✰ ✫ ✬ ✭ ★ ⋆ ✢ ✣ ✤ ✥ ❋ ✦ ✧ ✱ ✶ ✷ ✸ ✺ ✻ ❈ ❉ ❊ ✽ ✾ ✿ ❁ ❃ ❋ ❀
4. Weather
☼ ❅ ☃ ℃ ℉ ϟ
5. Chess
♚ ♛ ♜ ♝ ♞ ♟ ♔ ♕ ♖ ♗ ♘ ♙
6. Cards
♠ ♣ ♥ ♦ ♤ ♧ ♡ ♢
7. Random
ツⓛ ⓞ ⓥ ⓔ ♡ ღ ☼★ ٿ « » ۩ ║ █ ●
8. Religion
回 ₪ ✕ 卐 ☣ ☤ ☥ ☧ ☨ ☩ ☪ ☫ ☬ ☭
9. Music
♫ ♪ ♪ ♫
10. Telephone
✆ ☏
11. Arrows
⏎ ➟ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➚ ➘ ➙ ➛ ➜ ➝ ➞ ➸ ➲ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ← ↑ → ↓ ↔ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ➫ ➬ ➩ ➪ ➭ ➮ ➯ ➱ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲
12. Hands
☜ ☞ ☟
13. Numbers
❶❷❸❹❺❻❼❽❾❿ ➀➁➂➃➄➅➆➇➈
14. Copyright
Ⓐ © ®
15. Check / tick
✘ ☒ ✓
16. Money
[̲̅$̲̅(̲̅2οο̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅5̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅1̲̅)̲̅$̲̅]
17. Facemoji
You can use facemoji (a free extension on chrome) for getting other beautiful characters / stickers.
After you installing this extension, your Facebook chat box will have new broken heart icon like below:
Click it to open a windows with many beautiful characters, click to insert into the chat book. Or you can copy and paste to other post on Facebook.
Let enjoy your post on Facebook. Welcome any comment!
Below is list of fantastic characters that you can use:
1. Miscellaneous
☻ ♦ ♣ ♠ ♥ ♂ ♀ ♪ ♫ ☼ ✿ ⊰ ⊱ ✪ ✣ ✤ ✥ ✦ ✧ ✩ ✫ ✬ ✭ ✯ ✰ ✱ ✲ ❃ ❂ ❁ ❀ ✿ ✶ ❉ ❋ ❖ ⊹⊱✿ ✿ ⊰ ⊹ ☆ 🐵 🏪 🍉 👵 👒 🎢 🎈 🐘 💠 😢 🎅 👏 ☝ 💣 🍴 🆒 😌 👲 📡 ☚ 웃 유 ☠ ☯ ☢ ☣ Σ π Ω ♤ ♧ ♡ ♢ ☦ ✞ ⌘ ✡ ✄ ✐ ∞ ▲ ▼ ◎ ☭ 卐 ☪ ™ ¿ ¡ ½ ⅓ ⅔ ¼ № ❝ ❞ ❖ ⚔ ⚖ ⚛ ♲ ⚤ ¶ § ✱ ✲ ❊ ❋ ✻ ✼ ✽ ✵ ✺ ❃ ❅ ❆ ᔓ ᔗ҉ ✾ ❀ ❁ ✿ ⢏ ★ ☆ ✡ ✩ ❂ ✪ ✫ ✬ ✭ ✮ ✯ ✰ ✶ ✷ ✸ ✹ ☏ ☠ ☢ ☤ ☪ ✎ ✐ ✑ ✆ ☃ ☄ ☂ ⍭ ☣ ☫ ☬ ☭ ☮ ✇ ☯ ☸
2. Love
❥ ❣ ♡ ღ ❦ ♂ ♀ 웃 유
3. Stars & Flowers
✪ ✩ ✰ ✫ ✬ ✭ ★ ⋆ ✢ ✣ ✤ ✥ ❋ ✦ ✧ ✱ ✶ ✷ ✸ ✺ ✻ ❈ ❉ ❊ ✽ ✾ ✿ ❁ ❃ ❋ ❀
4. Weather
☼ ❅ ☃ ℃ ℉ ϟ
5. Chess
♚ ♛ ♜ ♝ ♞ ♟ ♔ ♕ ♖ ♗ ♘ ♙
6. Cards
♠ ♣ ♥ ♦ ♤ ♧ ♡ ♢
7. Random
ツⓛ ⓞ ⓥ ⓔ ♡ ღ ☼★ ٿ « » ۩ ║ █ ●
8. Religion
回 ₪ ✕ 卐 ☣ ☤ ☥ ☧ ☨ ☩ ☪ ☫ ☬ ☭
9. Music
♫ ♪ ♪ ♫
10. Telephone
✆ ☏
11. Arrows
⏎ ➟ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➚ ➘ ➙ ➛ ➜ ➝ ➞ ➸ ➲ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ← ↑ → ↓ ↔ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ➫ ➬ ➩ ➪ ➭ ➮ ➯ ➱ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲
12. Hands
☜ ☞ ☟
13. Numbers
❶❷❸❹❺❻❼❽❾❿ ➀➁➂➃➄➅➆➇➈
14. Copyright
Ⓐ © ®
15. Check / tick
✘ ☒ ✓
16. Money
[̲̅$̲̅(̲̅2οο̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅ιοο̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅5̲̅)̲̅$̲̅] [̲̅$̲̅(̲̅1̲̅)̲̅$̲̅]
17. Facemoji
You can use facemoji (a free extension on chrome) for getting other beautiful characters / stickers.
After you installing this extension, your Facebook chat box will have new broken heart icon like below:
Click it to open a windows with many beautiful characters, click to insert into the chat book. Or you can copy and paste to other post on Facebook.
Let enjoy your post on Facebook. Welcome any comment!
Wednesday, February 17, 2016
Learn ionic and cordova via Facebook login sample
Inherit from the ionic tutorial of ccoenraets and ngOpenFB of r-wettstaedt, this article will walk you through an example on using ionic and ngOpenFB to create an application with Facebook login.
1. To prepare your ionic environment, you can read my article here or follow step 1 of the tutorial of ccoenraets.
2. Create an ionic application with sidemenu template, for example:
# ionic start TestFBLogin sidemenu
You can have a look on the application (TestFBLogin) by run the following commands:
# cd TestFBLogin
# ionic serve
3. Create Film service to query films from https://swapi.co/ (The Star Wars API):
+In the www/js directory, create a file named services.js
+In services.js, define a module named starter.services with a dependency on ngResource. In that module, define a service named Film that uses the Angular resource module to provide access to the REST services at the specified endpoint:
angular.module('starter.services', ['ngResource'])
.factory('Film', function ($resource) {
return $resource(
'http://swapi.co/api/films/:filmId', //url
{}, // query parameters
{'query': { method: 'GET', isArray: false }} //action
);
});
+Open index.html, add a script tag <script src="lib/ionic/js/angular/angular-resource.min.js"></script> to include angular-resource.min.js (right after ionic-bundle.js) and a script tag <script src="js/services.js"></script> to include the services.js file you just created (right after app.js):
4. Create FilmsCtrl controller to manage films list view and FilmCtrl to manage film detail view, open www/js/controllers.js:
+Add starter.services as a dependency to make the Film service available to the controllers:
angular.module('starter.controllers', ['starter.services'])
+Delete PlayListsCtrl (plural), replace it with a controller named FilmsCtrl that retrieves the list of films using the Film service and stores it in a scope variable named films:
.controller('FilmsCtrl', function($scope, Film) {
Film.query(function(data) {
$scope.films = data.results;
});
})
+Delete PlayListCtrl (singular), replace it with a controller named FilmCtrl that retrieves a specific film using the Film service and stores it in a scope variable named film:
.controller('FilmCtrl', function($scope, $stateParams, Film) {
$scope.film = Film.get({filmId: $stateParams.filmId});
});
5. Create 2 templates: films.html to display a list of films, and film.html to display the details of a particular film:
+In the www/templates directory, rename playlists.html (plural) to films.html, then replace by the below template:
<ion-view view-title="Films">
<ion-content>
<ion-list>
<ion-item ng-repeat="film in films | orderBy: 'release_date'"
href="#/app/films/{{$index + 1}}">{{film.title}}</ion-item>
</ion-list>
</ion-content>
</ion-view>
Note:
I use $index to work around because a film doesn't have any property for indexing, it only has url property which causes difficult to get film detail info in next steps.
+ In the www/templates directory, rename playlist.html (singular) to film.html, then replace by the below template:
<ion-view view-title="Film">
<ion-content>
<div class="list card">
<div class="item">
<h2>{{film.title}}</h2>
<p>Released: {{film.release_date}}</p>
<p>Director: {{film.director}}</p>
</div>
<div class="item item-body">
<p>{{film.opening_crawl}}</p>
</div>
<div class="item tabs tabs-secondary tabs-icon-left">
<a class="tab-item">
<i class="icon ion-thumbsup"></i>
Like
</a>
<a class="tab-item">
<i class="icon ion-chatbox"></i>
Comment
</a>
<a class="tab-item">
<i class="icon ion-share"></i>
Share
</a>
</div>
</div>
</ion-content>
</ion-view>
6. Create routes, open app.js in www/js and do as below:
+Replace the app.playlists state with an app.films state defined as the following:
.state('app.films', {
url: "/films",
views: {
'menuContent': {
templateUrl: "templates/films.html",
controller: 'FilmsCtrl'
}
}
})
+Replace the app.single state with an app.film state defined as the following:
.state('app.film', {
url: "/films/:filmId",
views: {
'menuContent': {
templateUrl: "templates/film.html",
controller: 'FilmCtrl'
}
}
});
+Modify the fallback route to default to the list of films (last line in app.js):
$urlRouterProvider.otherwise('/app/films');
+Modify the side menu, open menu.html in www/templates, change the Playlists menu item to below (modify both the item label and the href):
<ion-item menu-close href="#/app/films">
Films
</ion-item>
+You can test again this new modification to see the list of films, here is mine:
7. Now it's time to add ngOpenFB to the application:
+Follow Step 1 here to configure your Facebook App
+To install ngOpenFB to your application, run the command:
# bower install ngOpenFB
+Install the InAppBrowser plugin by cordova:
# cordova plugin add cordova-plugin-inappbrowser
+Move www/lib/ngOpenFB/oauthcallback.html to www/oauthcallback.html
+Open www/index.html, add script tags to include ngOpenFB.min.js (before app.js):
<script src="lib/ngOpenFB/ngOpenFB.min.js"></script>
+Open www/js/app.js, and add ngOpenFB as a dependency to the starter module:
angular.module('starter', ['ionic', 'starter.controllers', 'ngOpenFB'])
+In www/js/app.js, inject $openFB in the run() function declaration:
.run(function ($ionicPlatform, $openFB) {
+Call the $openFB.init() function and set your Facebook App ID in the first line of run() function:
$openFB.init( {appId: '<YOUR_APP_ID>'} );
8. Add Facebook login:
+Open www/templates/login.html, add a Login with Facebook button right after the existing Log In button:
<label class="item">
<button class="button button-block button-positive" ng-click="fbLogin()">
Login with Facebook
</button>
</label>
+Open www/js/controllers.js, and add ngOpenFB as a dependency to the starter.controllers module:
angular.module('starter.controllers', ['starter.services', 'ngOpenFB'])
+Inject $openFB in the AppCtrl controller:
.controller('AppCtrl', function ($scope, $ionicModal, $timeout, $openFB) {
+Add the fbLogin function in the AppCtrl controller (right after the doLogin function):
$scope.fbLogin = function () {
$openFB.login({scope: 'email,public_profile,user_friends'})
.then(function(token) {
// log in successful
console.log('Facebook login succeeded');
$scope.closeLogin();
// send token to your server
}, function(err) {
// error logging in
alert('Facebook login failed');
});
};
9. Display Facebook user profile:
+Create a template for the user profile view. In the www/templates directory, create a new file named profile.html and implement it as follows:
<ion-view view-title="Profile">
<ion-content class="has-header">
<div class="list card">
<div class="item">
<h2>Name: {{user.name}}</h2>
<p>Gender: {{user.gender}}</p>
</div>
<div class="item item-body">
<img src="http://graph.facebook.com/{{user.id}}/picture?width=180&height=180"/>
</div>
</div>
</ion-content>
</ion-view>
+Create a controller for the user profile view. Open www/js/controllers.js, and add the following controller:
.controller('ProfileCtrl', function ($scope, $openFB) {
$openFB.isLoggedIn()
.then(function(loginStatus) {
// if logged, let get user info
$openFB.api({path: '/me'})
.then(function(user) {
$scope.user = user;
}
, function(err) {
alert('Facebook error: ' + err);
});
} , function(err) {
// not logged in
alert('Please use Facebook login!');
});
})
+Create a route for the user profile view. Open www/js/app.js, and add the following route:
.state('app.profile', {
url: "/profile",
views: {
'menuContent': {
templateUrl: "templates/profile.html",
controller: "ProfileCtrl"
}
}
})
+Open www/templates/menu.html, and add the following menu item:
<ion-item menu-close href="#/app/profile">
Profile
</ion-item>
+Let test again your application to see if it works, here is my application in Profile page:
10. Build and test in real device or emulator
+iOS:
# ionic platform add ios
# ionic build ios
# ionic run ios
+Android:
# ionic platform add android
# ionic build android
# ionic run android
Here is my Android version:
You can download its source code from my GitHub.
That's all. Welcome any comments!
1. To prepare your ionic environment, you can read my article here or follow step 1 of the tutorial of ccoenraets.
2. Create an ionic application with sidemenu template, for example:
# ionic start TestFBLogin sidemenu
You can have a look on the application (TestFBLogin) by run the following commands:
# cd TestFBLogin
# ionic serve
3. Create Film service to query films from https://swapi.co/ (The Star Wars API):
+In the www/js directory, create a file named services.js
+In services.js, define a module named starter.services with a dependency on ngResource. In that module, define a service named Film that uses the Angular resource module to provide access to the REST services at the specified endpoint:
angular.module('starter.services', ['ngResource'])
.factory('Film', function ($resource) {
return $resource(
'http://swapi.co/api/films/:filmId', //url
{}, // query parameters
{'query': { method: 'GET', isArray: false }} //action
);
});
+Open index.html, add a script tag <script src="lib/ionic/js/angular/angular-resource.min.js"></script> to include angular-resource.min.js (right after ionic-bundle.js) and a script tag <script src="js/services.js"></script> to include the services.js file you just created (right after app.js):
4. Create FilmsCtrl controller to manage films list view and FilmCtrl to manage film detail view, open www/js/controllers.js:
+Add starter.services as a dependency to make the Film service available to the controllers:
angular.module('starter.controllers', ['starter.services'])
+Delete PlayListsCtrl (plural), replace it with a controller named FilmsCtrl that retrieves the list of films using the Film service and stores it in a scope variable named films:
.controller('FilmsCtrl', function($scope, Film) {
Film.query(function(data) {
$scope.films = data.results;
});
})
+Delete PlayListCtrl (singular), replace it with a controller named FilmCtrl that retrieves a specific film using the Film service and stores it in a scope variable named film:
.controller('FilmCtrl', function($scope, $stateParams, Film) {
$scope.film = Film.get({filmId: $stateParams.filmId});
});
5. Create 2 templates: films.html to display a list of films, and film.html to display the details of a particular film:
+In the www/templates directory, rename playlists.html (plural) to films.html, then replace by the below template:
<ion-view view-title="Films">
<ion-content>
<ion-list>
<ion-item ng-repeat="film in films | orderBy: 'release_date'"
href="#/app/films/{{$index + 1}}">{{film.title}}</ion-item>
</ion-list>
</ion-content>
</ion-view>
Note:
I use $index to work around because a film doesn't have any property for indexing, it only has url property which causes difficult to get film detail info in next steps.
+ In the www/templates directory, rename playlist.html (singular) to film.html, then replace by the below template:
<ion-view view-title="Film">
<ion-content>
<div class="list card">
<div class="item">
<h2>{{film.title}}</h2>
<p>Released: {{film.release_date}}</p>
<p>Director: {{film.director}}</p>
</div>
<div class="item item-body">
<p>{{film.opening_crawl}}</p>
</div>
<div class="item tabs tabs-secondary tabs-icon-left">
<a class="tab-item">
<i class="icon ion-thumbsup"></i>
Like
</a>
<a class="tab-item">
<i class="icon ion-chatbox"></i>
Comment
</a>
<a class="tab-item">
<i class="icon ion-share"></i>
Share
</a>
</div>
</div>
</ion-content>
</ion-view>
6. Create routes, open app.js in www/js and do as below:
+Replace the app.playlists state with an app.films state defined as the following:
.state('app.films', {
url: "/films",
views: {
'menuContent': {
templateUrl: "templates/films.html",
controller: 'FilmsCtrl'
}
}
})
+Replace the app.single state with an app.film state defined as the following:
url: "/films/:filmId",
views: {
'menuContent': {
templateUrl: "templates/film.html",
controller: 'FilmCtrl'
}
}
});
+Modify the fallback route to default to the list of films (last line in app.js):
$urlRouterProvider.otherwise('/app/films');
+Modify the side menu, open menu.html in www/templates, change the Playlists menu item to below (modify both the item label and the href):
<ion-item menu-close href="#/app/films">
Films
</ion-item>
+You can test again this new modification to see the list of films, here is mine:
7. Now it's time to add ngOpenFB to the application:
+Follow Step 1 here to configure your Facebook App
+To install ngOpenFB to your application, run the command:
# bower install ngOpenFB
+Install the InAppBrowser plugin by cordova:
# cordova plugin add cordova-plugin-inappbrowser
+Move www/lib/ngOpenFB/oauthcallback.html to www/oauthcallback.html
+Open www/index.html, add script tags to include ngOpenFB.min.js (before app.js):
<script src="lib/ngOpenFB/ngOpenFB.min.js"></script>
+Open www/js/app.js, and add ngOpenFB as a dependency to the starter module:
angular.module('starter', ['ionic', 'starter.controllers', 'ngOpenFB'])
+In www/js/app.js, inject $openFB in the run() function declaration:
.run(function ($ionicPlatform, $openFB) {
+Call the $openFB.init() function and set your Facebook App ID in the first line of run() function:
$openFB.init( {appId: '<YOUR_APP_ID>'} );
8. Add Facebook login:
+Open www/templates/login.html, add a Login with Facebook button right after the existing Log In button:
<label class="item">
<button class="button button-block button-positive" ng-click="fbLogin()">
Login with Facebook
</button>
</label>
+Open www/js/controllers.js, and add ngOpenFB as a dependency to the starter.controllers module:
angular.module('starter.controllers', ['starter.services', 'ngOpenFB'])
+Inject $openFB in the AppCtrl controller:
.controller('AppCtrl', function ($scope, $ionicModal, $timeout, $openFB) {
+Add the fbLogin function in the AppCtrl controller (right after the doLogin function):
$scope.fbLogin = function () {
$openFB.login({scope: 'email,public_profile,user_friends'})
.then(function(token) {
// log in successful
console.log('Facebook login succeeded');
$scope.closeLogin();
// send token to your server
}, function(err) {
// error logging in
alert('Facebook login failed');
});
};
9. Display Facebook user profile:
+Create a template for the user profile view. In the www/templates directory, create a new file named profile.html and implement it as follows:
<ion-view view-title="Profile">
<ion-content class="has-header">
<div class="list card">
<div class="item">
<h2>Name: {{user.name}}</h2>
<p>Gender: {{user.gender}}</p>
</div>
<div class="item item-body">
<img src="http://graph.facebook.com/{{user.id}}/picture?width=180&height=180"/>
</div>
</div>
</ion-content>
</ion-view>
+Create a controller for the user profile view. Open www/js/controllers.js, and add the following controller:
.controller('ProfileCtrl', function ($scope, $openFB) {
$openFB.isLoggedIn()
.then(function(loginStatus) {
// if logged, let get user info
$openFB.api({path: '/me'})
.then(function(user) {
$scope.user = user;
}
, function(err) {
alert('Facebook error: ' + err);
});
} , function(err) {
// not logged in
alert('Please use Facebook login!');
});
})
+Create a route for the user profile view. Open www/js/app.js, and add the following route:
.state('app.profile', {
url: "/profile",
views: {
'menuContent': {
templateUrl: "templates/profile.html",
controller: "ProfileCtrl"
}
}
})
+Open www/templates/menu.html, and add the following menu item:
<ion-item menu-close href="#/app/profile">
Profile
</ion-item>
+Let test again your application to see if it works, here is my application in Profile page:
10. Build and test in real device or emulator
+iOS:
# ionic platform add ios
# ionic build ios
# ionic run ios
+Android:
# ionic platform add android
# ionic build android
# ionic run android
Here is my Android version:
You can download its source code from my GitHub.
That's all. Welcome any comments!
Friday, December 18, 2015
Quick start your mobile app with Ionic
1. Prepare environment
Read here to install ionic tools. Below is summary
+Install Note.js 4 (Note.js 5 doesn't work)
+Install Ionic by command: $ npm install -g cordova ionic
+Install Ionic lab
+Install bower by command: $ npm install -g bower
+Install VS Code
2. Start a project
2.1 Use command line:
You can create a project with a template as the following:
$ ionic start <<app>> <<template>>
In which:
<<app>>: your app name
<<template>>: a template of ionic, it can be:
Let signup an account on Ionic Creator, then create an app.
After designing your app, click cloud icon to export the code:
There are some ways to export the code as above screen. I prefer IONIC CLI export. When you go there, you will see a command line for you getting code from Ionic Creator to your local pc. Let copy the second command, for example:
$ ionic start [appName] creator:xxxxxxxx
Let replace [appName] by your app name wanted.You may be required to login, key:
$ ionic login
Then provide your user name and password to login Ionic Creator.
3. Edit, run and debug
To open the code in Visual Studio Code (VSC), go to the folder created by the command in step 2. (above), then right click select Open with Code (Windows PC) OR open VSC then open the created folder on Mac or Linux.
Open a html template, you can see many ion- elements, for example <ion-view>. These are custom directives that are part of the Ionic Framework and these directives allow AngularJS to attach behaviour to them. Read more about the Ionic custom directives in the API documentation.
To run your app on the browser, in the folder of your app, run the command:
$ ionic serve
To see what it looks like on iOS and Android, use command:
$ ionic serve --lab
Another way is you can use Ionic Lab application to load your app then run and see.
Read here to install ionic tools. Below is summary
+Install Note.js 4 (Note.js 5 doesn't work)
+Install Ionic by command: $ npm install -g cordova ionic
+Install Ionic lab
+Install bower by command: $ npm install -g bower
+Install VS Code
2. Start a project
2.1 Use command line:
You can create a project with a template as the following:
$ ionic start <<app>> <<template>>
In which:
<<app>>: your app name
<<template>>: a template of ionic, it can be:
- blank: blank project
- maps: project using Google Maps and a side menu
- tabs: project using a simple tabbed interface
- sidemenu: project using a side menu with navigation in the content area
- salesforce: project using for Salesforce
- tests: a test project with different kinds of page navigation
- complex-list: project using a complex list
Let signup an account on Ionic Creator, then create an app.
After designing your app, click cloud icon to export the code:
There are some ways to export the code as above screen. I prefer IONIC CLI export. When you go there, you will see a command line for you getting code from Ionic Creator to your local pc. Let copy the second command, for example:
$ ionic start [appName] creator:xxxxxxxx
Let replace [appName] by your app name wanted.You may be required to login, key:
$ ionic login
Then provide your user name and password to login Ionic Creator.
3. Edit, run and debug
To open the code in Visual Studio Code (VSC), go to the folder created by the command in step 2. (above), then right click select Open with Code (Windows PC) OR open VSC then open the created folder on Mac or Linux.
A Ionic project will have a structure like below:
+www: main folder containing source code
+www/index.html: index html file where the code start
+js: JavaScript folder
+js/app.js: Ionic Starter App (angular starter module)
+js/router.js: AngularUI Router
+templates: folder containing html templates
To run your app on the browser, in the folder of your app, run the command:
$ ionic serve
To see what it looks like on iOS and Android, use command:
$ ionic serve --lab
Another way is you can use Ionic Lab application to load your app then run and see.
Ionic Lab basically is built on top of Chrome which supports LiveReload. So it can help you run and debug your app.
Hope this article can help you start coding with ionic.
Any comment is welcome!
Any comment is welcome!
Subscribe to:
Posts (Atom)