APIs Nativas: Almacenamiento de
Datos
Joel Ortíz
Octubre 18 de 2013
@flashinstructor
Joel Ortíz
 BlackBerry Elite Member
& Community Manager
 Adobe Certified Instructor,
Expert & Community
Manager
 StarWa...
Archivos y Sistema de Archivos
No es tan aburrido como parece
Datos, Datos y Más Datos
 No es sorpresa:




Nuestras aplicaciones requieren datos
siempre
Es como si fuera la comida ...
Archivos vs Bases de Datos
 Las aplicaciones tiene la capacidad de:






Leer y escribir hacia y desde el sistema d...
BlackBerry Balance
 Aplicaciones de trabajo/empresariales:






Pueden acceder a datos de trabajo y
visualizar datos ...
BlackBerry Balance
Aplicaciones de
Trabajo

Aplicaciones de
Trabajo/Personales

Aplicaciones
Personales

BES email, contac...
Sistema de Archivos
 Las aplicaciones corren
sobre un “sandbox”
 El “sandbox” tiene
directorios tales como:





Dat...
Acceso a Archivos con C

FILE *fp;
fp = fopen( "report.dat", "r" );
if( fp != NULL )
{
/* rest of code goes here */
fclose...
Acceso a Archivos con Qt

QFile textfile("data/files/text/newfile.txt");
textfile.open(QIODevice::WriteOnly | QIODevice::T...
Rutas del Sistema de Archivo
 Cascades tiene una clase que nos permite el acceso al
“sandbox”:
QDir

 Además provee func...
Permisos del sistema de archivos
 No todos los directorios visibles son accesibles:


app




data




Sistema de lo...
1 Demo
5 Minutos
Cascades: Modelo y Acceso a Datos
¡MVC! si, como lo escuchas ¡MVC!
DataAccess y DataModel
 Cascades ofrece un “data model” que permite el consumo y
presentación de datos de forma fácil
 L...
DataModel
 Un “data model” provee la información para ser desplegada en
una lista
 El DataModel puede ser extendido por ...
ListView
 Un ListView determina como serán desplegados los datos en tu
aplicación
 Pueden ser asociados con un DataModel...
2 Demo
5 Minutos
Bases de Datos
¡Integremos Bases de Datos!
SQLite, QtSql, Cascades API

20
C y libsqlite
 Empaquetad con las herramientas SQLite
 Definido como libsqlite
 Esta disponible, pero se recomienda usa...
Código QtSQL... ¿fácil?
#include <QSqlDatabase>
...
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("...
3 Demo
5 Minutos
APIs Nativas: NFC
Joel Ortíz
Octubre 18 de 2013
@flashinstructor
Introducción
Near Field Communications es una tecnología mágica
Con solo chocar los dispositivos NFC puedes...
Disparar
Ac...
Oportunidad
Enriquece tus aplicaciones con NFC
Táctiles

Sin Gestos

Conveniente

Diversión

Seguro
“NFC Móvil... Espera u...
Enriqueciendo Tus Aplicaciones
Disparar
Acciones

Tags

Transferir
Estados
Transferir
Objetos

Punto a Punto

Ejecutar
Tra...
Lectura de NFC Tags
NFC Tags

Tarjetas de memoria
que almacenan datos

Aplicaciones toman
una acción en
respuesta al mensaje

Tiene una interf...
NFC Tags

4 tipos de tags
estándar NFC Forum

Varias capacidades
del tag

Tipos personalizados
son permitidos
(“external”)...
El Proceso de 3 Pasos
Registrar
Declarativo

bar-descriptor.xml

Conectar
InvokeManager

Qt signals y slots

Procesar
ndef...
Registrar
<invoke-target id="com.example.NfcRaceTime">
<require-source-permissions>invoke_across_perimeters</requiresource...
Invocation Framework

33
Conectar

bb::system::InvokeManager* _invokeManager =
new bb::system::InvokeManager();

QObject::connect(_invokeManager,
S...
Procesar

// SLOT method
void App::receivedInvokeRequest(
const bb::system::InvokeRequest& request) {
QByteArray data = re...
Procesar

// look for NDEF records of our special type
QList<QtMobilitySubset::QNdefRecord>::const_iterator ndefRecord;
fo...
NFC Modo Punto a Punto
Oportunidad
Transferir datos de un dispositivo a otro
Sin Gestos

Comparte

Interactivo

Comparte solo tocando ambos dispo...
Opciones de Protocolos
SNEP
Protocolo de
intercambio simple de
NDEF

Orientado a
mensajes

Higher level

LLCP
Protocolo de...
Opciones de la API
Invocation Framework
Menos código

Otra app proporciona
el servicio a la tuya

Puede proveer UI
para el...
Compartir con Invocation Framework
Button {
id: shareButton
text: "Share vCard - Press and Hold!"
contextActions: [
Action...
Compartir con Invocation Framework

Button {
....
contextMenuHandler: ContextMenuHandler {
onShowing: {
// make NDEF messa...
4 Demo
5 Minutos
Gracias por su atención
¿Preguntas?
@flashinstructor
http://blackberrydeveloper.mx
joelortiz@blackberrydeveloper.mx
Próxima SlideShare
Cargando en…5
×

APIs Nativas: Almacenamiento de Datos y NFC

1.009 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
1.009
En SlideShare
0
De insertados
0
Número de insertados
8
Acciones
Compartido
0
Descargas
3
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

APIs Nativas: Almacenamiento de Datos y NFC

  1. 1. APIs Nativas: Almacenamiento de Datos Joel Ortíz Octubre 18 de 2013 @flashinstructor
  2. 2. Joel Ortíz  BlackBerry Elite Member & Community Manager  Adobe Certified Instructor, Expert & Community Manager  StarWars FanBoy  BlackBerry, Activ Developing Experiences 2
  3. 3. Archivos y Sistema de Archivos No es tan aburrido como parece
  4. 4. Datos, Datos y Más Datos  No es sorpresa:   Nuestras aplicaciones requieren datos siempre Es como si fuera la comida de las aplicaciones XD  Cascades y aplicaciones nativas tienen diferentes medios para almacenar y obtener datos  Si es sorpresa:  Tendremos perímetros para el acceso a datos 4
  5. 5. Archivos vs Bases de Datos  Las aplicaciones tiene la capacidad de:      Leer y escribir hacia y desde el sistema de archivos Crear archivos y carpetas Crear bases de datos Crear consultas a bases de datos Obtener datos desde un servidor remoto o red local 5
  6. 6. BlackBerry Balance  Aplicaciones de trabajo/empresariales:    Pueden acceder a datos de trabajo y visualizar datos personales Pueden adjuntar archivos personales a emails o entradas del calendario de trabajo Pueden acceder a intranets usando BlackBerry Bridge, VPNs corporativas o WiFi  Aplicaciones personales:   No pueden acceder a datos de trabajo No pueden adjuntar archivos de trabajo a emails o entradas de calendario personales 6
  7. 7. BlackBerry Balance Aplicaciones de Trabajo Aplicaciones de Trabajo/Personales Aplicaciones Personales BES email, contactos, calendario, tareas etc. Visor de fotos Social (Facebook, Twitter, etc.) BlackBerry Bridge & Viewer Media Player App World BlackBerry Browser Visor de documentos (Acrobat, Doc To Go) Web Browser Aplicaciones de Trabajo Aplicaciones de Archvios Video Chat 7
  8. 8. Sistema de Archivos  Las aplicaciones corren sobre un “sandbox”  El “sandbox” tiene directorios tales como:     Datos Activos Tu aplicación compilada Etc.  No todos los directorios son para nuestro uso 8
  9. 9. Acceso a Archivos con C FILE *fp; fp = fopen( "report.dat", "r" ); if( fp != NULL ) { /* rest of code goes here */ fclose( fp ); } 9
  10. 10. Acceso a Archivos con Qt QFile textfile("data/files/text/newfile.txt"); textfile.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream out(&textfile); out << "This is a text filen"; textfile.close(); 10
  11. 11. Rutas del Sistema de Archivo  Cascades tiene una clase que nos permite el acceso al “sandbox”: QDir  Además provee funciones que nos permiten el acceso a diferentes rutas del sistema de archivos QDir::currentPath() QDir::homePath() QDir::tempPath() – ruta al directorio de trabajo de la app – retorna el directorio de datos de la app – accede al directorio temporal de la app 11
  12. 12. Permisos del sistema de archivos  No todos los directorios visibles son accesibles:  app   data   Sistema de logs para una aplicación shared   Archivos de bases de datos de la aplicación logs   Este es donde se almacenan tus datos. Variable $HOME db   Aplicación compilada, activos, source Subfolders que contienen datos compartidos agrupados por tipos. Todas las aplicaciones pueden leer este directorio. Una aplicación puede escribir en este directorio especificando el permiso access_shared tmp 12
  13. 13. 1 Demo 5 Minutos
  14. 14. Cascades: Modelo y Acceso a Datos ¡MVC! si, como lo escuchas ¡MVC!
  15. 15. DataAccess y DataModel  Cascades ofrece un “data model” que permite el consumo y presentación de datos de forma fácil  Los datos externos (JSON o bases de datos) son cargados por un objeto DataAccess  Los datos cargados son organizados por la clase DataModel  Cascades provee clases “ListView” para presentar los DataModel 15
  16. 16. DataModel  Un “data model” provee la información para ser desplegada en una lista  El DataModel puede ser extendido por una representación personalizada de los datos 16
  17. 17. ListView  Un ListView determina como serán desplegados los datos en tu aplicación  Pueden ser asociados con un DataModel 17
  18. 18. 2 Demo 5 Minutos
  19. 19. Bases de Datos ¡Integremos Bases de Datos!
  20. 20. SQLite, QtSql, Cascades API 20
  21. 21. C y libsqlite  Empaquetad con las herramientas SQLite  Definido como libsqlite  Esta disponible, pero se recomienda usar QtSql si se esta empleando C++  Para aplicaciones creadas en Cascades también existe una interfaz para interactuar con bases de datos 21
  22. 22. Código QtSQL... ¿fácil? #include <QSqlDatabase> ... QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("myserver"); db.setDatabaseName("mydb"); db.setUserName("myusername"); db.setPassword("mypassword"); bool ok = db.open(); if(ok) { QSqlQuery query("SELECT * FROM *"); } 22
  23. 23. 3 Demo 5 Minutos
  24. 24. APIs Nativas: NFC Joel Ortíz Octubre 18 de 2013 @flashinstructor
  25. 25. Introducción Near Field Communications es una tecnología mágica Con solo chocar los dispositivos NFC puedes... Disparar Acciones Transferir Estados Transferir Objetos Ejecutar Transacciones Buscar llegadas de Bus Juegos... ¡Tu Turno! Fotos, Contactos, etc. Pagos 25
  26. 26. Oportunidad Enriquece tus aplicaciones con NFC Táctiles Sin Gestos Conveniente Diversión Seguro “NFC Móvil... Espera un crecimiento de usuarios 16.7 M a más de 250 M en 4 años (2011 - 2015)” Forecast from Juniper Research (Abril 2011) 26
  27. 27. Enriqueciendo Tus Aplicaciones Disparar Acciones Tags Transferir Estados Transferir Objetos Punto a Punto Ejecutar Transacciones 27
  28. 28. Lectura de NFC Tags
  29. 29. NFC Tags Tarjetas de memoria que almacenan datos Aplicaciones toman una acción en respuesta al mensaje Tiene una interfaz sin contacto Leídas por un dispositivo llamado “Lector” 29
  30. 30. NFC Tags 4 tipos de tags estándar NFC Forum Varias capacidades del tag Tipos personalizados son permitidos (“external”) Formato de mensaje estándar (NDEF) Tipos de mensaje estándar incluyen Smart poster, Texto, URI 30
  31. 31. El Proceso de 3 Pasos Registrar Declarativo bar-descriptor.xml Conectar InvokeManager Qt signals y slots Procesar ndefMessage = QtMobilitySubset::QNdefMessage::fromByteArray(data) 31
  32. 32. Registrar <invoke-target id="com.example.NfcRaceTime"> <require-source-permissions>invoke_across_perimeters</requiresource-permissions> <type>APPLICATION</type> <filter> <action>bb.action.OPEN</action> <mime-type>application/vnd.rim.nfc.ndef</mime-type> <property var="uris" value="ndef://4/my.rim.com/myrecordtype"/ > </filter> </invoke-target> 32
  33. 33. Invocation Framework 33
  34. 34. Conectar bb::system::InvokeManager* _invokeManager = new bb::system::InvokeManager(); QObject::connect(_invokeManager, SIGNAL( invoked(const bb::system::InvokeRequest&)), this, SLOT( receivedInvokeRequest( const bb::system::InvokeRequest&))); 34
  35. 35. Procesar // SLOT method void App::receivedInvokeRequest( const bb::system::InvokeRequest& request) { QByteArray data = request.data(); QtMobilitySubset::QNdefMessage ndefMessage = QtMobilitySubset::QNdefMessage::fromByteArray(data); } handleNdefRequest(ndefMessage); 35
  36. 36. Procesar // look for NDEF records of our special type QList<QtMobilitySubset::QNdefRecord>::const_iterator ndefRecord; for ( ndefRecord = ndefMessage.begin(); ndefRecord != ndefMessage.end(); ndefRecord++) { if (ndefRecord->typeNameFormat() == QtMobilitySubset::QNdefRecord::ExternalRtd) { } } if (QString( ndefRecord->type()).compare("my.rim.com:myrecordtype") == 0 ){ emit raceTagDetected(QString(ndefRecord->payload())); } 36
  37. 37. NFC Modo Punto a Punto
  38. 38. Oportunidad Transferir datos de un dispositivo a otro Sin Gestos Comparte Interactivo Comparte solo tocando ambos dispositivos Crea experiencias interactivas/físicas 38
  39. 39. Opciones de Protocolos SNEP Protocolo de intercambio simple de NDEF Orientado a mensajes Higher level LLCP Protocolo de control lógico de link Orientado a conexiones Lower level 39
  40. 40. Opciones de la API Invocation Framework Menos código Otra app proporciona el servicio a la tuya Puede proveer UI para el usuario Uso directo de la API Algunas API son llamadas en iteraciones de eventos Todas las opciones disponibles para tu app Control completo encima del UI 40
  41. 41. Compartir con Invocation Framework Button { id: shareButton text: "Share vCard - Press and Hold!" contextActions: [ ActionSet { title: "Share NDEF Data" InvokeActionItem { id: sharedNdefData query { mimeType: "application/vnd.rim.nfc.ndef" invokeActionId: "bb.action.SHARE" } } } ] 41
  42. 42. Compartir con Invocation Framework Button { .... contextMenuHandler: ContextMenuHandler { onShowing: { // make NDEF message as byte array in C++ sharedNdefData.data = _ndefFactory.getNdefVcardMessage(sendVcard.ndefFirstName, sendVcard.ndefLastName, sendVcard.ndefAddress, sendVcard.ndefEmail, sendVcard.ndefMobile); } } } 42
  43. 43. 4 Demo 5 Minutos
  44. 44. Gracias por su atención ¿Preguntas? @flashinstructor http://blackberrydeveloper.mx joelortiz@blackberrydeveloper.mx

×