tek13 - creating mobile apps with php and symfony
DESCRIPTION
In this talk we will look at some of the reasons on why mobile applications are important, including some history on the mobile market. Then we will look at some frameworks that help develop high-quality mobile apps and we will showcase a mobile app developed with PHP and Symfony2, including the source code which will be available on Github.TRANSCRIPT
Creating Mobile Apps with PHP & Symfony
Pablo Godel @pgodel
http://joind.in/8159Tek13, Chicago, May 15 2013
Wednesday, May 15, 13
⁃ Born in Argentina, living in the US since 1999⁃ PHP & Symfony developer⁃ Founder of the original PHP mailing list in spanish ⁃ Master of the parrilla⁃ Co-founder of ServerGrove
Who am I?!
Wednesday, May 15, 13
Wednesday, May 15, 13
Wednesday, May 15, 13
⁃ Founded ServerGrove Networks in 2005
⁃ Provider of web hosting specialized in PHP, Symfony, ZendFramework, MongoDB and others
⁃ Servers in USA and Europe!
Who am I?!
Wednesday, May 15, 13
⁃ Very active open source supporter through codecontributions and usergroups/conference sponsoring
Community is our Teacher
Wednesday, May 15, 13
Why?
Mobile Apps - Why
Wednesday, May 15, 13
•More & more people have access to Internet through mobile devices•Devices are more powerful & versatile• Internet access is faster and more reliable•Users demand services and applications at all times & and the go•Don’t give advantages in an ultra-competitive market•Your competition is already using it or implementing it
Mobile Apps - Why
Wednesday, May 15, 13
Some numbers...
Mobile Apps - Why
Wednesday, May 15, 13
•Estimated 6.5 billion mobile subscriptions globally (over 90%)•1.7 billion mobile phones sold in 2012•1 billion users in China alone•321M subscriptions in the US (over 100%)•Devices range from phone and tablets to door locks, thermostats, etc.
Mobile Apps - Why
Wednesday, May 15, 13
How did we get here?
Mobile Apps - Why
Wednesday, May 15, 13
Let’s see some history...
Mobile Apps - History
Wednesday, May 15, 13
First commercial cellular network launched in
Japan )1G - first generation(
1979
Mobile Apps - History
Wednesday, May 15, 13
The “mobile” telephone
Motorola DynaTAC -
aka “The Boot”cost: US$ 3995weight:793g / 28 ounces
1983 Motorola DynaTAC
Mobile Apps - History
Wednesday, May 15, 13
Common Standard to connect networks and apps•WAP client•Server sends WML (XML)
WAP - Wireless Application Protocol
<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml" ><wml> <card id="main" title="First Card"> <p mode="wrap">This is a sample WML page.</p> </card></wml>
1997
Mobile Apps - History
Wednesday, May 15, 13
WAP/WML
Mobile Apps - History
Wednesday, May 15, 13
WAP/WML
Mobile Apps - History
Wednesday, May 15, 13
WAP/WML
Mobile Apps - History
Wednesday, May 15, 13
Developer:
WAP/WML
Mobile Apps - History
Wednesday, May 15, 13
User:
WAP/WML
Mobile Apps - History
Wednesday, May 15, 13
2007...
Mobile Apps - History
Wednesday, May 15, 13
•Revolutionized the market of mobile telephony
•Safari Web Client
iPhone2007
Mobile Apps - History
Wednesday, May 15, 13
iPhone App Store2007
Mobile Apps - History
Wednesday, May 15, 13
First Android Device2008
Mobile Apps - History
Wednesday, May 15, 13
iPad2010
Mobile Apps - History
Wednesday, May 15, 13
So what does all this mean?
Mobile Apps - History
Wednesday, May 15, 13
The PC is not dead
Mobile Apps - History
The Mobile Generation
Wednesday, May 15, 13
The PC is not dead, yet?
The Mobile Generation
Mobile Apps - History
Wednesday, May 15, 13
Information is now consumed on phones and tablets
The Mobile Generation
Mobile Apps - History
Wednesday, May 15, 13
And this is just the beginning...
The Mobile Generation
Mobile Apps - History
Wednesday, May 15, 13
Symfony?
Mobile Apps - Symfony
Wednesday, May 15, 13
What is Symfony?
Mobile Apps - Symfony
Wednesday, May 15, 13
Definition by Fabien Potencier:
⁃ Symfony2 is a reusable set of standalone, decoupled, and cohesive PHP components
that solve common web development problems.
⁃ Based on these components, Symfony2 is
also a full-stack web framework.
http://fabien.potencier.org/article/49/what-is-symfony2
Mobile Apps - Symfony
Wednesday, May 15, 13
Silex
The PHP/‘Symfony’ micro-framework
http://silex.sensiolabs.org/
Mobile Apps - Symfony
Wednesday, May 15, 13
25 high quality components
http://symfony.com/doc/current/components/index.html
Mobile Apps - Symfony
Wednesday, May 15, 13
• DependencyInjection• EventDispatcher• HttpFoundation• DomCrawler• ClassLoader• CssSelector• HttpKernel• BrowserKit• Templating• Translation• Serializer• Validator • Security • Routing • Console • Process • Config • Finder • Locale • Yaml• Form
Components:
GitHub: http://github.com/symfony
Mobile Apps - Symfony
Wednesday, May 15, 13
Proyects using Symfony2 components:
• Silex: BrowerKit, CssSelector, DomCrawler, EventDispatcher, HttpFoundation, HttpKernel, Routing, Form, Translation, Validator
• Goutte: BrowserKit, DomCrawler, CssSelector, Process, ClassLoader, Finder • Behat: Console, DependencyInjection, EventDispatcher, Finder, Yaml, Config,
Translation • Doctrine2: Console, Yaml Propel2: Console, ClassLoader, Yaml• PHPUnit: Yaml • FLOW3: Yaml • Midguard CMS: most of them in their next version? • phpBB 4: most of them• Drupal 8: ClassLoader, HttpFoundation, HttpKernel, and more• EZ Publish• Laravel• Composer• ...
Mobile Apps - Symfony
Wednesday, May 15, 13
Do you know or usedsymfony 1.x?
Mobile Apps - Symfony
Wednesday, May 15, 13
Forget it...
Mobile Apps - Symfony
Wednesday, May 15, 13
The only thing in common between
symfony 1.x & Symfony2 is the name...
Mobile Apps - Symfony
Wednesday, May 15, 13
OK... the web folder too...
Mobile Apps - Symfony
Wednesday, May 15, 13
Why Symfony?
Mobile Apps - Symfony
Wednesday, May 15, 13
•Provides solid base to build good HTTP & RESTful APIs•Twig makes it easy to build templates for mobile devices•Re-use code for different devices thanks to templates, controllers and routing
Mobile Apps - Symfony
Wednesday, May 15, 13
1.Native applications2.SMS applications & Voice applications3.Web aplicaciones4.Hybrid applications (mix native, web, others)
Mobile Apps - Types
Wednesday, May 15, 13
Native Applications
Mobile Apps - Types
Wednesday, May 15, 13
• iPhone - Objective-C•Android - Java•Windows Mobile - .NET•Frameworks multi-platform⁃ PhoneGap http://phonegap.com
⁃ rhomobile http://rhomobile.com
⁃ Appceledator http://appcelerator.com
⁃ Corona http://anscamobile.com/corona/
Mobile Apps - Native Apps
Wednesday, May 15, 13
Common uses:•send emails & messages in general• loading of profile data•authentication & authorization•chats
Mobile Apps - Native Apps
PHP does not run in these devices but native apps need to retrieve and store data from servers.
Wednesday, May 15, 13
Some considerations:•Design API (RESTful, HTTP, XML-RPC) early on at the development cycle
•An API can be used for other types of clients (ej. Desktop como Adobe AIR)•Re-use controllers and use _format to generate different content types (XML, JSON, etc)
Mobile Apps - Native Apps
Wednesday, May 15, 13
Build APIs with Symfony2
- FOSRestBundlehttps://packagist.org/packages/friendsofsymfony/rest-bundle
- ApiDocBundlehttps://packagist.org/packages/nelmio/api-doc-bundle
Mobile Apps - Native Apps
Build APIs with Silex
- responsible-service-provider
- silex-skeleton-rest
Wednesday, May 15, 13
Push Notifications
Server sends messages to mobile devices- AppleApnPushBundle- RMSPushNotificationsBundle- DABSquaredPushNotificationsBundle- ZendService\Google\Gcm- ZendService\Apple\Apns
Mobile Apps - Native Apps
Wednesday, May 15, 13
SMS (and voice) Applications
Mobile Apps - SMS Apps
Wednesday, May 15, 13
Symfony can send/receive text messages
Common uses:- Alerts- Chats- Electronic payments- Ads- Two-factor authentication
Mobile Apps - SMS Apps
Wednesday, May 15, 13
Mobile Apps - SMS Apps
Wednesday, May 15, 13
SMS Gateway providers:•Twilio•Nexmo•Clickatell•BulkSMS
Mobile Apps - SMS Apps
Wednesday, May 15, 13
MMS are multimedia messages with text, images, video, audio.Common uses:- Photo processing- Sending/scanning 2D barcodes
Mobile Apps - SMS/MMS Apps
https://github.com/endroid/QrCodehttps://github.com/endroid/EndroidQrCodeBundlehttps://github.com/mkoppanen/php-zbarcode
Wednesday, May 15, 13
Web Applications
Mobile Apps - Web Apps
Wednesday, May 15, 13
Mobile Apps - Web Apps
http://forecast.io
Wednesday, May 15, 13
Frameworks HTML / Javascript • iui
http://code.google.com/p/iui/ (one of the first ones)
• JQuery Mobile http://jquerymobile.com/ (Open source)
• JQTouch http://jqtouch.com/ (Open source)
• DHTMLX Touch http://dhtmlx.com/touch/ (Open source)
• The M Project http://www.the-m-project.org/ (Open source)
• Sensa Touch http://www.sencha.com/products/touch/
Mobile Apps - Web Apps
Wednesday, May 15, 13
Mobile Apps - Web Apps
jQuery Mobile
Wednesday, May 15, 13
Supports:- IOS (iPhone/iPad)- Android- Blackberry- Windows Phone- palm webOS- symbian
jQuery Mobile
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile
Mobile Apps - Web Apps
Wednesday, May 15, 13
•Based on jQuery•Light (40KB)•HTML5 •Accesible (works on screen readers)•Events, plugins, themes•Lots of documentation
jQuery Mobile - Features
Mobile Apps - Web Apps
Wednesday, May 15, 13
•Page management•Transitions•Dialog windows•Links and buttons•Navigation bars•Header / Footer•Forms•Lists
Mobile Apps - Web Apps
jQuery Mobile - Features
Wednesday, May 15, 13
jQuery Mobile - Page management
<body>
<!-- Start of first page --><div data-role="page" id="foo">
! <div data-role="content">!! ! <p>I'm first in the source order so I'm shown as the page. </p>!!! ! <p>View internal page called <a href="#bar">bar</a></p>!! </div><!-- /content -->
</div><!-- /page -->
</body>
Mobile Apps - Web Apps
Wednesday, May 15, 13
<body>
<!-- Start of first page --><div data-role="page" id="foo">
! <div data-role="content">!! ! <p>View internal page called <a href="#bar">bar</a></p>!! </div><!-- /content -->
</div><!-- /page -->
<!-- Start of second page --><div data-role="page" id="bar">
! <div data-role="content">!! ! <p><a href="#foo">Back to foo</a></p>!! </div><!-- /content -->
</div><!-- /page --></body>
Mobile Apps - Web AppsjQuery Mobile - Page management
Wednesday, May 15, 13
jQuery Mobile - Transitions
<a href="foo.html" data-rel="dialog" data-transition="pop">Open dialog</a>
<a href="foo.html" data-rel="dialog" data-transition="slidedown">Open dialog</a>
<a href="foo.html" data-rel="dialog" data-transition="flip">Open dialog</a>
<a href="foo.html" data-rel="dialog" data-transition="fade">Open dialog</a>
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile - Dialogs
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile - Navigation bars
<div data-role="header" data-position="inline">! <a href="index.html" data-icon="delete">Cancel</a>! <h1>Edit Contact</h1>! <a href="index.html" data-icon="check">Save</a></div>
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile - Forms
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile - Forms
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile - Lists
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile & Symfony
Mobile Apps - Web Apps
Wednesday, May 15, 13
Templates
Mobile Apps - Web Apps
Wednesday, May 15, 13
<!DOCTYPE html><html><head> <title>Podisum by ServerGrove</title> <meta name="viewport" content="width=device-width, initial-scale=1"></head>
<body>
{% block content %}{% endblock %}
</body></html>
layout.html.twig
Mobile Apps - Web Apps
Wednesday, May 15, 13
{% extends "layout.html.twig" %}
{% block content %} <div data-role="page" id="home"> <div data-role="header"> <h1>Podisum</h1> </div> <div data-role="content">
<1-- ... --> </div> </div>
index.html.twig
Mobile Apps - Web Apps
Wednesday, May 15, 13
<div data-role="header" data-theme="b"> <h1>{{title}}</h1> <a href="#home" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home" data-ajax="false">Home</a></div>
header.mhtml.twig
Mobile Apps - Web Apps
Wednesday, May 15, 13
{% extends "layout.html.twig" %}
{% block content %}{% include “header.html.twig’ %}
<div data-role="content"><1-- ... -->
</div> </div>
index.html.twig
Mobile Apps - Web Apps
Wednesday, May 15, 13
Routing
Mobile Apps - Web Apps
Wednesday, May 15, 13
home: pattern: / defaults: { _controller: DemoBundle:Default:index }talks: pattern: /talks.{_format} defaults: { _controller: DemoBundle:Talk:index, _format: html } requirements: _format: html|xml|icstalk: pattern: /talk/{slug} defaults: { _controller: DemoBundle:Talk:talk }
jQuery Mobile & Symfony / Routing
Mobile Apps - Web Apps
Wednesday, May 15, 13
Mobile Apps - Web Apps
jQuery Mobile & Symfony / Routing
home: pattern: /m defaults: { _controller: DemoBundle:Default:index,_format:mhtml }talks: pattern: /m/talks defaults: { _controller: DemoBundle:Talk:index, _format:mhtml }talk: pattern: /m/talk/{slug} defaults: { _controller: DemoBundle:Talk:talk, _format:mhtml }
Wednesday, May 15, 13
Mobile Apps - Web Apps
jQuery Mobile & Symfony / Routing (option 2)
home: pattern: /m defaults: { _controller: DemoBundle:Default:index, mobile:true }talks: pattern: /m/talks defaults: { _controller: DemoBundle:Talk:index, mobile:true }talk: pattern: /m/talk/{slug} defaults: { _controller: DemoBundle:Talk:talk, mobile:true }
Wednesday, May 15, 13
m_home: pattern: /m defaults: { _controller: DemoBundle:Mobile:index }
Mobile Apps - Web Apps
jQuery Mobile & Symfony / Routing (option 3)
Wednesday, May 15, 13
Controllers & Actions
Mobile Apps - Web Apps
Wednesday, May 15, 13
jQuery Mobile & Symfony / Controller & Action
public function indexAction() { $em = $this->get('doctrine')->getEntityManager(); // ...
$format = $this->get('request')->getRequestFormat();
return $this->render('DemoBundle:Default:index.'.$format.'.twig', array( // ... )); }
Mobile Apps - Web Apps
Wednesday, May 15, 13
Extras
Mobile Apps - Web Apps
•Detect Mobile devices http://mobiledetect.net/
•Symfony2 + MobileDetectBundle•Silex + MobileDetectServiceProvider
Wednesday, May 15, 13
Testing
Mobile Apps - Web Apps
Wednesday, May 15, 13
•Symfony2 functional tests for HTML pages•For AJAX other testing methods may be used:•Selenium RC•Behat
Mobile Apps - Web Apps
Wednesday, May 15, 13
DEMOS !
Podisum: http://github.com/pgodel/podisum
sunshinephphttp://m.sunshinephp.com/
Control Panel:•https://control.servergrove.com/•https://control.servergrove.com/m
login: [email protected]: demo
Mobile Apps - Web Apps
Wednesday, May 15, 13
Podisum http://github.com/pgodel/podisum
Generates summaries of Logstash events Silex appTwig templatesMobile version
Mobile Apps - Web Apps
Wednesday, May 15, 13
Podisum
Apache access_log Logstash
Redis
Podisum redis-client
MongoDB
Podisum Silex App
Web Client
Mobile Apps - Web Apps
Wednesday, May 15, 13
Hybrid Applications
Mobile Apps - Hybrid Apps
Wednesday, May 15, 13
Applications that combine web, sms, voice and native aspects
Framework PhoneGap
- Build apps with HTML & JavaScript- Integrates with XCode- Compiles app into native code- Access to accelerometer, camera, geolocation, notifications and more
Mobile Apps - Hybrid Apps
Wednesday, May 15, 13
Questions?
Mobile Apps
Wednesday, May 15, 13
Feedback Please:http://joind.in/8159
Thank you!
Twitter: @pgodel IRC Freenode: pgodel
Source: https://github.com/pgodel/podisumSlides: http://slideshare.net/pgodel
Mobile Apps - Thanks!
Wednesday, May 15, 13