The document discusses developing offline-capable mobile apps using the Salesforce Mobile SDK and SmartStore. It provides an overview of the Salesforce Mobile SDK and SmartStore, including key terminology like soups and stores. It also demonstrates building a sample app with SmartStore that allows querying, inserting, updating and deleting encrypted offline data to sync later.
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
1. Developing Offline-Capable Apps
with the Salesforce Mobile SDK and
SmartStore
Developer Track
Tom Gersic, Model Metrics / salesforce.com
Director, Technical Solutions
@tomgersic
2. Safe Harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
materialize or if any of the assumptions proves incorrect, the results of salesforce.com, Inc. could differ materially from the results
expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of
intellectual property and other litigation, risks associated with possible mergers and acquisitions, the immature market in which we
operate, our relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new
releases of our service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization
and selling to larger enterprise customers. Further information on potential factors that could affect the financial results of
salesforce.com, inc. is included in our annual report on Form 10-Q for the most recent fiscal quarter ended July 31, 2012. This
documents and others containing important disclosures are available on the SEC Filings section of the Investor Information section of
our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions based
upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these forward-
looking statements.
3. All About Model Metrics
Now a salesforce.com Company
10 year track record - 2,000+ cloud engagements
Passionate & innovative World-class skills -
CRM, Force.com, Heroku, Radian6, Rypple, iOS
and Android
In-house design studio – ModelFX
Mobile experts - iPhone, iPad and Android
4. Agenda
• What we are going to build today
• Salesforce Mobile SDK Overview
• SmartStore Terminology and Demo
• SmartStore Behind the Scenes
• Building the app
5. What We’re Building Today, and Why
http://www.github.com/tomgersic/HazyPassword
11. Three Options: Which One Is Right For You?
Advanced UI interactions Web developer skills
Fastest performance Access to native platform
App store distribution App store distribution
Web developer skills
Instant updates
Unrestricted distribution
24. Representational State Transfer (REST)
A stateless data transport based on standard HTTP
methods for delivering data as JSON or XML
25. REST API
HEAD is used to retrieve resource metadata.
GET is used to retrieve information, such as SOQL Queries
using SELECT.
POST is used to create a new record.
PATCH is used to update or upsert a record.
DELETE is used to delete a record.
26. REST API Returns a JSON Response
/services/data/v24.0/query/?q=SELECT Id, Name, Username__c, Password__c,
URL__c FROM Password__c
http://bit.ly/sfworkbench
27. Salesforce.com Mobile SDK SmartStore
SQLite ORM wrapper for Native and Hybrid apps built on the
salesforce.com Mobile SDK
NoSQL style JSON-based document store
29. Smartstore Security
Only cross-platform NoSQL mobile database technology on the
market that comes with encryption built right in.
And if you’re doing a hybrid (Phonegap) app…
33. Native Database Technology Encryption
• Encrypt your data yourself using PIN / Passcode
• CoreData/SQLCipher
NSIncrementalStore
Good Dynamics
• FMDB/SQLCipher
Salesforce Smartstore
34. Terminology
Soup – is a database table used to store JSON documents with
index columns.
Soups are held in Stores, which are SQLite database files.
This is all Apple Newton terminology
It had no real filesystem, so data was stored in database entries called
“soups”
For the interested:
• http://en.wikipedia.org/wiki/Soup_(Apple)
• http://www.canicula.com/newton/prog/soups.htm
35. Some things you can do with your soup…
• Register a Soup with an IndexSpec
• Query a Soup using a QuerySpec
• Upsert Data to a Soup
• Delete Data from a Soup
• Remove a Soup
36. IndexSpec
• JSON Object
• Fields to index
• “string” or “integer”
[
{"path":"Id","type":"string"},
{"path":"Name","type":"string"}
]
37. QuerySpec
buildAllQuerySpec(path,order,pageSize)
Query all records from the object in the given sort order (or null order)
buildExactQuerySpec(path,matchKey,pageSize)
Search for records with index path values matching the key.
buildRangeQuerySpec(path,beginKey,endKey,pageSize)
Return all records with an index path value between the two range values
buildLikeQuerySpec(path,likeKey,order,pageSize)
Basically “select * from [table] LIKE ‘%[likeKey]%’”