24
© All rights reserved. Zend Technologies, Inc. Sviluppo di applicazioni web mobile con Zend Framework Enrico Zimuel Senior PHP Engineer, Zend Technologies Zend Framework Core Team PHP goes mobile, 13 Aprile 2012 http://mobilephp.grusp.org/

PHP goes mobile

Embed Size (px)

DESCRIPTION

Sviluppo di applicazioni web mobile con Zend Framework

Citation preview

Page 1: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Sviluppo di applicazioni webmobile con Zend Framework

Enrico Zimuel Senior PHP Engineer, Zend TechnologiesZend Framework Core Team

PHP goes mobile, 13 Aprile 2012http://mobilephp.grusp.org/

Page 2: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Chi sono

● Software Engineer dal 1996 (1984?)

▶ Assembly, Basic, C/C++, Java, Perl, PHP

● PHP Engineer e Software Architect presso Zend Technologies dal 2008

● Zend Framework Core Team dal 2011

● Research Programmer presso l'Informatics Institute dell'Università di Amsterdam

● Co-autore del libro “PHP best practices” FAG edizioni (in corso di pubblicazione)

Page 3: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Web mobile vs. Native App

Page 4: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Web mobile vs. Native App

Web mobile Native App

Accesso al dispositivo

limitato totale

Velocità buona ottima

Costi sviluppo bassi medio/alti

Tecnologia open si a volte

Ricavi 100% dipende

Approvazione nessuna dipende

Tempi di rilascio immediati 1-2 settimane

Linguaggio di programmazione

HTML e qualsiasi altro (esempio PHP)

dipende

Page 5: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

“People never cared about the Web vs. apps and devices . . . They want free stuff, entertainment, and services when they want them, and on the device they have in front of them”

Web mobile vs. Native App (2)

Fonte: Pew Internet Project (Marzo, 2012)

Page 6: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Web mobile con ZF

Page 7: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Zend Framework

● Framework PHP per lo sviluppo di applicazioni web

▶ > 10 milioni di download▶ > 500 sviluppatori▶ > 10 milioni hits su Google

● Open source, licenza basata su new BSD

● Versioni: 1.11.11 (PHP 5.2) e 2.0.0.beta3 (PHP 5.3+)

● Sito del progetto: http://framework.zend.com

● © Zend Technologies Ltd.

Page 8: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Zend Technologies

● Zend Technologies Ltd, the PHP Company

● Fondata nel 1999 da Andi Gutmans e Zeev Suraski, gli sviluppatori del PHP 3.0

● Quartier generale nella Silicon Valley a Cupertino (USA)

● Uffici in: Francia, Germania, India, Irlanda, Israele, Italia

● © PHP Engine 2 (l'interprete del PHP)

● Sito: http://www.zend.com

Page 9: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Componenti ZF per il web mobile

● Zend_Http_UserAgent▶ BrowsCap▶ Tera-WURFL▶ DeviceAtlas

● Context Switching● Zend_Mobile

▶ Disponibile dalla versione 1.12 di ZF

Page 10: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

BrowsCap

● Funzione get_browser() del PHP

● Configurazione:

▶ Download del file browscap.ini dal sito del progetto Browser Capabilities: http://browsers.garykeith.com/downloads

▶ Configurare php.ini con la direttiva: browscap=/path/to/browscap.ini

Page 11: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Tera-WURFL

● Tera-WURFL è una libreria in PHP e un database in MySQL/MSSQL/MongoDB di informazioni su device

● Download: http://dbapi.scientiamobile.com

Page 12: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

DeviceAtlas

● Libreria disponibile per diversi linguaggi (PHP, Java, .NET, Python, Ruby) per il riconoscimento di mobile device

● Download: http://deviceatlas.com/resourcecentre/get+started/enterprise+api

Page 13: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Zend_Http_UserAgent

● Utilizzato per identificare il device dell'utente● Utilizzabile in diversi punti di un'applicazione ZF

▶ Plugin (bootstrap)▶ Controller▶ View

Page 14: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Zend_Http_UserAgent (2)

● Plugin (bootstrap)

● Controller

● View

$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');$userAgent = $bootstrap->getResource('useragent');

$bootstrap = $this->getInvokeArg('bootstrap');$userAgent = $bootstrap->getResource('useragent');

$userAgent = $this->userAgent();

Page 15: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Alcuni metodi dell'UserAgent

● getDevice()

● getBrowserType()

● getAllFeatures()

● hasFlashSupport()

● hasPdfSupport()

● hasPhoneNumber()

● httpsSupport()

● getMaxImageHeight()

● getMaxImageWidth()

● ...

Page 16: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Context switching

● ContextSwitching è un action helper che consente di definire risposte differenti a seconda del contesto (della richiesta)

● E' di solito utilizzato nei web services per differenziare la risposta (ad esempio Json o XML)

● Permette di definire contesti custom

▶ Aggiungere dei suffissi alle viste▶ Modificare l'header HTTP▶ Definire delle callback

Page 17: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Esempio

class Application_Plugin_Mobile extends Zend_Controller_Plugin_Abstract{

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)

{$contextSwitch =

Zend_Controller_Action_HelperBroker::getStaticHelper('ContextSwitch'); $contextSwitch->clearContexts()

->setContext('iphone', array( 'suffix' => 'iphone', 'headers' => array(

'Content-Type' => 'text/html;Charset=UTF-8'), )) ->setContext('html', array( 'suffix' => 'html', 'headers' => array(

'Content-Type' => 'text/html;Charset=UTF-8'), )) ->setAutoDisableLayout(false) ->setDefaultcontext('html') ->initContext();

Page 18: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Esempio (2)

$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');$userAgent = $bootstrap->getResource('useragent');switch($userAgent->getDevice()->getFeature('device')){

case 'iphone':$request->setParam('format','iphone');break;

default:$request->setParam('format','html');

}}

}

Page 19: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Esempio (3)

class IndexController extends Zend_Controller_Action{

public function init(){

$this->_helper->contextSwitch() ->addActionContext('index', 'iphone') ->initContext();

}

…}

View

index.phtmlindex.iphone.phtml

Page 20: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Zend_Mobile

● Zend_Mobile_Push▶ Invio di notifiche push verso specifici vendor

● APNS (iTouch/iPad/iPhone)● C2DM (Google Android)● MPNS (Windows Phone)

Page 21: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Esempio

$message = new Zend_Mobile_Push_Message_Apns();$message->setAlert('Zend Mobile Push Example');$message->setBadge(1);$message->setSound('default');$message->setId(time());$message->setToken('ABCDEF0123456789');

$apns = new Zend_Mobile_Push_Apns();$apns->setCertificate('/path/to/provisioning-certificate.pem');// if you have a passphrase on your certificate:// $apns->setCertificatePassphrase('foobar');...

Page 22: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Esempio (2)

try {$apns->connect(Zend_Mobile_Push_Apns::SERVER_SANDBOX_URI);

} catch (Zend_Mobile_Push_Exception_ServerUnavailable $e) {// you can either attempt to reconnect here or try again later

exit(1);} catch (Zend_Mobile_Push_Exception $e) {

echo 'APNS Connection Error:' . $e->getMessage();exit(1);

}

try {$apns->send($message);

} catch (Zend_Mobile_Push_Exception_InvalidToken $e) {echo $e->getMessage();

} catch (Zend_Mobile_Push_Exception $e) {echo $e->getMessage();

}

$apns->close();

Page 23: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Domande?

Page 24: PHP goes mobile

© All rights reserved. Zend Technologies, Inc.

Grazie!

Per maggiori informazioni:http://framework.zend.com/