SlideShare a Scribd company logo
See Androids Fighting
​ Dr. Holger Kremmin
​ Program Architect
​ hkremmin@salesforce.com
​ @kremminh
​ 
Integrating your Android Wear Watch with Salesforce
​ 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 any
litigation, risks associated with completed and any 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-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter.
These 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.
Safe Harbor
Objectives
In this session you will learn about:
§ Anatomy of an Android Wear Application
§ Integration Options
§ Leveraging Salesforce Mobile SDK for Android
§ How to setup your Android Studio Project
§ Leverage Example Code
After this session you should have a good understanding to
quickly create a stunning Salesforce Android Wear application
Not covered
In this session you will not learn :
§ Oauth
§ Android application architecture
§ The Salesforce Rest API
§ Devolping for an Apple Watch …
Change pic
Agenda
§  Architectural Overview
§  Prerequisites
§  Bridged Notifications
§  Data API
§  Q & A
The Architecture of Android Wear
Architectural Overview – Android Wear
Message API
Data API
Node API
Wearable App
Companion App
Awesome
Companion App
Play Services
Wearable App
intents
Awesome App
Android OS
Android W
OS
Wearable
App
UI Building Blocks - Android Wear is different!
Users are used to tapping icons to launch apps. A typical Wear app adds a card to the stream at a contextually
relevant moment. It might have a button that opens a full screen view, but it just as well might not.
Contextual card Full Screen UI Watch Face
§  Bridged Notifications (no
development on Wear
Device!)
§  Contextual Notifications
§  2D Picker
§  Custom Layouts
§  Custom Watch Face
designs
Salesforce Mobile SDK
Push Notifications Container Wrappers Files MDM Policies
Enterprise Identity & Security
SmartStore Encrypted Database
SmartSync Data Management
OS UI Frameworks Any Web Framework
SalesforceSDKManager.initNative(getApplicationContext(), new KeyImpl(), DreamActivity.class);
SalesforceSDKManager.getInstance().setPushNotificationReceiver(new TravelPushNotification(this));
public class DreamActivity extends SalesforceActivity {
Architectural Overview – Salesforce Integration using GCM
Connected App Companion App
Notifications
Internet Internet
Architectural Overview – Direct Integration using REST-API
Internet
Message API
Data API
Node API
Prerequisites
What you need to do upfront
Setting Up Google Cloud Messaging (GCM)
​ Get a new configuration at developer.google.com (Developer account required)
123456789012
ABC123JKL4567fyzu89012hjr
What you get:
•  Package Name
•  Server API Key
•  Sender ID
Com.dreamforce
Configure the Connected App in Salesforce
​ At least a Developer Org & Admin rights required
from Google
A lot of keys...What goes Where?
Key Source Destination
Server API Key Google Developer Salesforce Connected App
-> Mobile App Settings
-> Key for Server Applications
(API Key)
Sender ID Google Developer Resource File:
<string
name="androidPushNotificationClientId">
123456789012
</string>
Android Package Name Google Developer Resource File:
<string name="app_package">com.example.app
</string>
Consumer Key Salesforce Resource File:
<string name="remoteAccessConsumerKey">
3MVG9xOCXq...
</string>
Setting Up Android Studio
§  Usage of Android Studio is
highly recommended
§  Create a Library project for
the Mobile SDK so you can
reference it easily from your
projects
§  Good Practice: Shared
project for constants,
resources etc.
§  Gradle as Build System
§  Use real devices for
debugging instead of using
Emulators
The Notification API
Bring your approval process to your Smart Watch
Demo
Sample Workflow
Create
Travel Request
Salesforce
Appex Trigger:
Approval Process
Appex Trigger:
Push Notification
GCM:
Push Notification
Mobile Phone:
Push Notification
Wear:
Notification Cards
GCM
Mobile
Phone
Wear
Device
Wear:
Approve / Reject
Mobile Phone:
Send Notification
GCM:
Send Notification
Approve/
Reject
Apex Code Snippet – Create & Send Notification/ Message
// send the notification
Messaging.PushNotification msg = new Messaging.PushNotification();
Map<String, Object> payload = new Map<String, Object>();
payload.put('ownerName', owner.Name);
payload.put('ownerFullPhotoUrl', owner.FullPhotoUrl);
...
msg.setPayload(payload);
// The approver's Id
String userId = result.actorIds[0];
Set<String> users = new Set<String>();
users.add(userId);
msg.send('Android_Wear', users);
Create Message Object
Create Payload
Add Payload to Message
Add target Users
Send Message to target
Users
Implement PushNotificationInterface
​ PushNotificationInterface is a Mobile SDK Android interface for
handling push notifications. PushNotificationInterface has a
single method, onPushMessageReceived(Bundle message).
public class TravelPushNotification implements PushNotificationInterface {
...
@Override
public void onPushMessageReceived(final Bundle bundle) {
... //create an async task if you perform network tasks etc!
Eg. Build your notification HERE
Create Notifications with the Notification Builder
​ The v4 support library allows you to create notifications using the latest
notification features such as action buttons and large icons.
​ To create a notification with the support library, you create an instance of
NotificationCompat.Builder and issue the notification by passing it to notify()
// Main notification
NotificationCompat.Builder mainNotification = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.s1_icon)
.setContentTitle(travelMessage.ownerName)
.setContentText(“Travel approval required: " + travelMessage.travelName);
...
// Open Card
mainNotification.setContentIntent(openPendingIntent);
NotificationManagerCompat.from(context).notify(1, mainNotification.build());
Add Wearable Features For a Notification
​ If you ever need to add wearable-specific options to a notification, such
as specifying additional pages of content or letting users dictate a text
response with voice input, you can use the
NotificationCompat.WearableExtender class to specify the options.
WearableExtender wearableExtender = new WearableExtender()
.addAction(approveAction)
.addAction(rejectAction)
.addPage(detailNotification);
mainNotification.extend(wearableExtender);
Demo
23
The Data API
Sync your data between the Smart Watch and the Companion App
Sample Workflow
Record
Speech
Salesforce
Create
DataItem
Sync with Mobile
Sync with Wear Send Rest Object
Show
Chatter Post
GCM
Mobile
Phone
Wear
Device
The Wearable Data Layer API is part of Google Play services and provides a
communication channel for your companion and wearable apps. The API
supports the synchronization of data objects over the wire and eventing.
The Data API
A DataItem provides data storage with
automatic syncing between the
handheld and wearable.
Asset objects are for sending binary
blobs of data, such as images. You
attach assets to data items and the
system automatically takes care of the
transfer for you, conserving Bluetooth
bandwidth by caching large assets to
avoid re-transmission.
​ WearableListenerService lets you
listen for important data layer events in a
service. The system manages the lifecycle
of the WearableListenerService
​ DataListener lets you listen for
important data layer events when an
activity is in the foreground. Lets you listen
for changes only when the user is actively
using your app.
​ You can use the ChannelApi class to
transfer large data items, such as music
and movie files, from a handheld to a
wearable device.
​ The MessageApi class can send
messages and is good for remote
procedure calls (RPC), such as controlling
a handheld's media player from the
wearable or starting an intent on the
wearable from the handheld. Messages
are also great for one-way requests or for a
request/response communication model.
Data Events Channel / Message
For Demonstration of the Data Sync we create a full screen
UI wearable app
​ An Android wear application is nearly identical to a normal smartphone app. In our example we
will use the Data API to exchange Data between the Wear device and the companion app running
on the smart phone. For our example we could also use the Message API.
​ Extend the MainActivity if you want to listen to data events on the UI Thread.
// Main Activity
public class MainActivity extends Activity
implements ConnectionCallbacks, OnConnectionFailedListener,
DataApi.DataListener, MessageApi.MessageListener, NodeApi.NodeListener {
... Your App Code goes here
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
....
If you want to listen to Data change Events
Speech Recognition
​ Voice actions (System- or App provided “OK Google, …) and the system's built-in Speech
Recognizer activity can be used to obtain speech input from users.
// Create an intent that can start the Speech Recognizer activity
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
// invoked when the Speech Recognizer returns, extract the speech text from the intent.
@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
if (resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
chatterText = results.get(0);
<create & send the data event>
}
Sending Data
​ A DataItem defines the data interface that the system uses to synchronize data between handhelds and
wearables. A DataItem generally consists of the following items:
§  Payload - A byte array, which you can set with whatever data you wish, allowing you to do your own object
serialization and deserialization. The size of the payload is limited to 100KB.
§  Path - A unique string that must start with a forward slash (for instance, "/salesforce/wearable/chatter")
// Create a data map and put data in it
private void createChatterData(String post) {
//Create the data request object
PutDataMapRequest putDataMapReq = PutDataMapRequest.create (“/chatter ");
putDataMapReq.getDataMap().putString(CHATTER_KEY, post);
PutDataRequest putDataReq = putDataMapReq.asPutDataRequest();
// Adds a DataItem to the Android Wear network. à synchronized across all devices
PendingResult<DataApi.DataItemResult> pendingResult =
Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq);
}
...
A DataLayerService will listen on all data events
​ The data layer synchronizes and sends data across the handheld and wearable, you normally want to listen
for important events, such as when data items are created, are received, etc. Options:
§  Create a service that extends WearableListenerService.
§  Create an activity that implements DataApi.DataListener.
public class DataLayerListenerService extends WearableListenerService {
/.../
@Override
public void onDataChanged(DataEventBuffer dataEvents) {
if (!mGoogleApiClient.isConnected()... //check for connectivity!!!
// Loop through the events for (DataEvent event : dataEvents) {
Uri uri = event.getDataItem().getUri();
String path = uri.getPath();
if (COUNT_PATH.equals(path)) {
// get the payload
byte[] payload = uri.toString().getBytes();
// *Chatter something J
postChatterMessage(payload);
...
Leveraging the
MobileSDK
(Authentication, Rest
Calls etc…)
* See https://github.com/forcedotcom/JavaChatterRESTApi by Jasper Roel
Speech Recognition is a great feature, but...
Hello Chatter
Dreamforce is
Awesome
Willkommen auf
der Dreamforce
Who needs the
Apple Watch?
Who will win
the Super
Bowl?
Key Takeaways
§  Keep your Wear UI as simple as possible!!!
§  Always test on real devices
§  The Salesforce Mobile SDK and Connected Apps handle most of the
connection complexity for your application
§  Wear Devices are mainly informative devices or to automatically
collect data
§  The Notification is a great and simple way to expand your existing
Android app to Wear Watches without the need to code a custom
Wear app
Share Your Feedback, and Win a GoPro!
3
Earn a GoPro prize entry for each completed
surveyTap the bell to take a survey2Enroll in a session1
Thank you
Thank you
Backup Slides
UI Building Blocks - Android Wear is different!
Users are used to tapping icons to launch apps. A typical Wear app adds a card to the stream at a contextually
relevant moment. It might have a button that opens a full screen view, but it just as well might not.
Application Type Device
Devlopment
Contextual card in the
stream
Bridged notifications, such as new message notifications, are pushed to the
wearable from the connected handheld using standard Android notifications.
They require very little or no Wear-specific code.
✗
Contextual notifications, such as an exercise card that appears when you
begin running, are generated locally on the wearable and appear at
contextually relevant moments. You can do more with this kind of card than
with a notification bridged from the handheld.
✔
Full screen UI app: 2D Picker is a design pattern that allows the user to select from a set of items,
such as to select an artist then an album. We recommend using this pre-built
component from the SDK whenever relevant.
✔
Custom layouts are also possible where apps need to extend beyond the
basic card/stream metaphor, such as to present a graph or map. ✔
Keep your app always-on if you have information that refreshes or stays
relevant, without draining the battery. ✔
Watch Face Android Wear supports custom watch faces with designs that can show
contextually relevant information to users. ✔

More Related Content

What's hot

Your First Adobe Flash Application for Android
Your First Adobe Flash Application for AndroidYour First Adobe Flash Application for Android
Your First Adobe Flash Application for Android
Motorola Mobility - MOTODEV
 
Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5
Chris Griffith
 
Android workshop - 02. Glass development 101
Android workshop - 02. Glass development 101Android workshop - 02. Glass development 101
Android workshop - 02. Glass development 101
Johnny Sung
 
The unconventional devices for the Android video streaming
The unconventional devices for the Android video streamingThe unconventional devices for the Android video streaming
The unconventional devices for the Android video streaming
Matteo Bonifazi
 
Google Glass, the GDK, and HTML5
Google Glass, the GDK, and HTML5Google Glass, the GDK, and HTML5
Google Glass, the GDK, and HTML5
Oswald Campesato
 
Google Glasses Integration with SAP
Google Glasses Integration with SAPGoogle Glasses Integration with SAP
Google Glasses Integration with SAP
Gh14Cc10
 
How to create android push notifications with custom view
How to create android push notifications with custom viewHow to create android push notifications with custom view
How to create android push notifications with custom view
PushApps - Content Recommendation in Push Notifications
 
Demystifying progressive web apps
Demystifying progressive web appsDemystifying progressive web apps
Demystifying progressive web apps
Marcus Hellberg
 
Going web native
Going web nativeGoing web native
Going web native
Marcus Hellberg
 
Building web apps with vaadin 8
Building web apps with vaadin 8Building web apps with vaadin 8
Building web apps with vaadin 8
Marcus Hellberg
 
Android TV: Building apps with Google’s Leanback Library
Android TV: Building apps with  Google’s Leanback LibraryAndroid TV: Building apps with  Google’s Leanback Library
Android TV: Building apps with Google’s Leanback Library
Joe Birch
 
Android wear SDK introduction
Android wear SDK introductionAndroid wear SDK introduction
Android wear SDK introduction
Tiziano Basile
 
Droidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introductionDroidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introduction
Michelantonio Trizio
 
Android tv get started
Android tv get startedAndroid tv get started
Android tv get started
Ascii Huang
 
Android N multi window
Android N multi windowAndroid N multi window
Android N multi window
Yu-Wei Chuang
 
Beginning Android Flash Development - GTUG Edition
Beginning Android Flash Development - GTUG EditionBeginning Android Flash Development - GTUG Edition
Beginning Android Flash Development - GTUG Edition
Stephen Chin
 
Google Wear OS watch faces and applications development
Google Wear OS watch faces and applications developmentGoogle Wear OS watch faces and applications development
Google Wear OS watch faces and applications development
Oleksandr Stepanov
 
UaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIUaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing API
Matteo Bonifazi
 
Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android Development
Reto Meier
 

What's hot (19)

Your First Adobe Flash Application for Android
Your First Adobe Flash Application for AndroidYour First Adobe Flash Application for Android
Your First Adobe Flash Application for Android
 
Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5Developing AIR for Android with Flash Professional CS5
Developing AIR for Android with Flash Professional CS5
 
Android workshop - 02. Glass development 101
Android workshop - 02. Glass development 101Android workshop - 02. Glass development 101
Android workshop - 02. Glass development 101
 
The unconventional devices for the Android video streaming
The unconventional devices for the Android video streamingThe unconventional devices for the Android video streaming
The unconventional devices for the Android video streaming
 
Google Glass, the GDK, and HTML5
Google Glass, the GDK, and HTML5Google Glass, the GDK, and HTML5
Google Glass, the GDK, and HTML5
 
Google Glasses Integration with SAP
Google Glasses Integration with SAPGoogle Glasses Integration with SAP
Google Glasses Integration with SAP
 
How to create android push notifications with custom view
How to create android push notifications with custom viewHow to create android push notifications with custom view
How to create android push notifications with custom view
 
Demystifying progressive web apps
Demystifying progressive web appsDemystifying progressive web apps
Demystifying progressive web apps
 
Going web native
Going web nativeGoing web native
Going web native
 
Building web apps with vaadin 8
Building web apps with vaadin 8Building web apps with vaadin 8
Building web apps with vaadin 8
 
Android TV: Building apps with Google’s Leanback Library
Android TV: Building apps with  Google’s Leanback LibraryAndroid TV: Building apps with  Google’s Leanback Library
Android TV: Building apps with Google’s Leanback Library
 
Android wear SDK introduction
Android wear SDK introductionAndroid wear SDK introduction
Android wear SDK introduction
 
Droidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introductionDroidcon Turin 2015 - Android wear sdk introduction
Droidcon Turin 2015 - Android wear sdk introduction
 
Android tv get started
Android tv get startedAndroid tv get started
Android tv get started
 
Android N multi window
Android N multi windowAndroid N multi window
Android N multi window
 
Beginning Android Flash Development - GTUG Edition
Beginning Android Flash Development - GTUG EditionBeginning Android Flash Development - GTUG Edition
Beginning Android Flash Development - GTUG Edition
 
Google Wear OS watch faces and applications development
Google Wear OS watch faces and applications developmentGoogle Wear OS watch faces and applications development
Google Wear OS watch faces and applications development
 
UaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing APIUaMobitech - App Links and App Indexing API
UaMobitech - App Links and App Indexing API
 
Being Epic: Best Practices for Android Development
Being Epic: Best Practices for Android DevelopmentBeing Epic: Best Practices for Android Development
Being Epic: Best Practices for Android Development
 

Similar to See Androids Fighting: Connect Salesforce with Your Android Wear Watch

Introduction to the Salesforce Mobile SDK for Android
Introduction to the Salesforce Mobile SDK for AndroidIntroduction to the Salesforce Mobile SDK for Android
Introduction to the Salesforce Mobile SDK for Android
Salesforce Developers
 
Salesforce Mobile architecture introduction
Salesforce Mobile architecture introductionSalesforce Mobile architecture introduction
Salesforce Mobile architecture introduction
David Scruggs
 
Modev presentation
Modev presentationModev presentation
Modev presentation
Ryan Upton
 
CloudOps evening presentation from Salesforce.com
CloudOps evening presentation from Salesforce.comCloudOps evening presentation from Salesforce.com
CloudOps evening presentation from Salesforce.com
Alistair Croll
 
Salesforce.com API Series: Service Cloud Console Deep Dive
Salesforce.com API Series: Service Cloud Console Deep DiveSalesforce.com API Series: Service Cloud Console Deep Dive
Salesforce.com API Series: Service Cloud Console Deep Dive
Salesforce Developers
 
Salesforce.com Mobile Dev Week Chicago DUG
Salesforce.com Mobile Dev Week Chicago DUGSalesforce.com Mobile Dev Week Chicago DUG
Salesforce.com Mobile Dev Week Chicago DUG
Tom Gersic
 
Introduction to Visualforce for Mobile Devices
Introduction to Visualforce for Mobile DevicesIntroduction to Visualforce for Mobile Devices
Introduction to Visualforce for Mobile Devices
Salesforce Developers
 
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.comCreating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Salesforce Developers
 
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.comCreating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Salesforce Developers
 
Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview Webinar
Salesforce Developers
 
[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum
BeMyApp
 
Mobile architecture overview
Mobile architecture overviewMobile architecture overview
Mobile architecture overview
David Scruggs
 
Force.com Canvas: 2 Case Studies and a Roadmap
Force.com Canvas: 2 Case Studies and a RoadmapForce.com Canvas: 2 Case Studies and a Roadmap
Force.com Canvas: 2 Case Studies and a Roadmap
Salesforce Developers
 
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStoreDeveloping Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
Salesforce Developers
 
Building Mobile Apps on Salesforce Platform with Mobile SDK
Building Mobile Apps on Salesforce Platform with Mobile SDKBuilding Mobile Apps on Salesforce Platform with Mobile SDK
Building Mobile Apps on Salesforce Platform with Mobile SDK
Salesforce Developers
 
AppExchange for Components First Call Deck
AppExchange for Components First Call DeckAppExchange for Components First Call Deck
AppExchange for Components First Call Deck
Salesforce Partners
 
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on HerokuIgor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov
 
Introduction to the Salesforce.com Mobile SDK for iOS
Introduction to the Salesforce.com Mobile SDK for iOSIntroduction to the Salesforce.com Mobile SDK for iOS
Introduction to the Salesforce.com Mobile SDK for iOS
Salesforce Developers
 
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps WebinarIntro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Salesforce Developers
 
Build, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
Build, Manage, and Deploy Mobile Apps Faster with App Cloud MobileBuild, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
Build, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
Salesforce Developers
 

Similar to See Androids Fighting: Connect Salesforce with Your Android Wear Watch (20)

Introduction to the Salesforce Mobile SDK for Android
Introduction to the Salesforce Mobile SDK for AndroidIntroduction to the Salesforce Mobile SDK for Android
Introduction to the Salesforce Mobile SDK for Android
 
Salesforce Mobile architecture introduction
Salesforce Mobile architecture introductionSalesforce Mobile architecture introduction
Salesforce Mobile architecture introduction
 
Modev presentation
Modev presentationModev presentation
Modev presentation
 
CloudOps evening presentation from Salesforce.com
CloudOps evening presentation from Salesforce.comCloudOps evening presentation from Salesforce.com
CloudOps evening presentation from Salesforce.com
 
Salesforce.com API Series: Service Cloud Console Deep Dive
Salesforce.com API Series: Service Cloud Console Deep DiveSalesforce.com API Series: Service Cloud Console Deep Dive
Salesforce.com API Series: Service Cloud Console Deep Dive
 
Salesforce.com Mobile Dev Week Chicago DUG
Salesforce.com Mobile Dev Week Chicago DUGSalesforce.com Mobile Dev Week Chicago DUG
Salesforce.com Mobile Dev Week Chicago DUG
 
Introduction to Visualforce for Mobile Devices
Introduction to Visualforce for Mobile DevicesIntroduction to Visualforce for Mobile Devices
Introduction to Visualforce for Mobile Devices
 
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.comCreating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
 
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.comCreating HTML5 Applications with jQuery Mobile, Ruby and Database.com
Creating HTML5 Applications with jQuery Mobile, Ruby and Database.com
 
Spring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview WebinarSpring '14 Release Developer Preview Webinar
Spring '14 Release Developer Preview Webinar
 
[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum[MBF2] Plate-forme Salesforce par Peter Chittum
[MBF2] Plate-forme Salesforce par Peter Chittum
 
Mobile architecture overview
Mobile architecture overviewMobile architecture overview
Mobile architecture overview
 
Force.com Canvas: 2 Case Studies and a Roadmap
Force.com Canvas: 2 Case Studies and a RoadmapForce.com Canvas: 2 Case Studies and a Roadmap
Force.com Canvas: 2 Case Studies and a Roadmap
 
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStoreDeveloping Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
Developing Offline-Capable Apps with the Salesforce Mobile SDK and SmartStore
 
Building Mobile Apps on Salesforce Platform with Mobile SDK
Building Mobile Apps on Salesforce Platform with Mobile SDKBuilding Mobile Apps on Salesforce Platform with Mobile SDK
Building Mobile Apps on Salesforce Platform with Mobile SDK
 
AppExchange for Components First Call Deck
AppExchange for Components First Call DeckAppExchange for Components First Call Deck
AppExchange for Components First Call Deck
 
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on HerokuIgor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
Igor Androsov on Mobilizing Salesforce Data with 12 Factor App on Heroku
 
Introduction to the Salesforce.com Mobile SDK for iOS
Introduction to the Salesforce.com Mobile SDK for iOSIntroduction to the Salesforce.com Mobile SDK for iOS
Introduction to the Salesforce.com Mobile SDK for iOS
 
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps WebinarIntro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
Intro to Salesforce Mobile SDK: Building Hybrid Apps Webinar
 
Build, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
Build, Manage, and Deploy Mobile Apps Faster with App Cloud MobileBuild, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
Build, Manage, and Deploy Mobile Apps Faster with App Cloud Mobile
 

More from Salesforce Developers

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Salesforce Developers
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
Salesforce Developers
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
Salesforce Developers
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
Salesforce Developers
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
Salesforce Developers
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
Salesforce Developers
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
Salesforce Developers
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
Salesforce Developers
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
Salesforce Developers
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
Salesforce Developers
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
Salesforce Developers
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
Salesforce Developers
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
Salesforce Developers
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
Salesforce Developers
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
Salesforce Developers
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
Salesforce Developers
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
Salesforce Developers
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
Salesforce Developers
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
Salesforce Developers
 

More from Salesforce Developers (20)

Sample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce DevelopersSample Gallery: Reference Code and Best Practices for Salesforce Developers
Sample Gallery: Reference Code and Best Practices for Salesforce Developers
 
Maximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component PerformanceMaximizing Salesforce Lightning Experience and Lightning Component Performance
Maximizing Salesforce Lightning Experience and Lightning Component Performance
 
Local development with Open Source Base Components
Local development with Open Source Base ComponentsLocal development with Open Source Base Components
Local development with Open Source Base Components
 
TrailheaDX India : Developer Highlights
TrailheaDX India : Developer HighlightsTrailheaDX India : Developer Highlights
TrailheaDX India : Developer Highlights
 
Why developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX IndiaWhy developers shouldn’t miss TrailheaDX India
Why developers shouldn’t miss TrailheaDX India
 
CodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local DevelopmentCodeLive: Build Lightning Web Components faster with Local Development
CodeLive: Build Lightning Web Components faster with Local Development
 
CodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web ComponentsCodeLive: Converting Aura Components to Lightning Web Components
CodeLive: Converting Aura Components to Lightning Web Components
 
Enterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web ComponentsEnterprise-grade UI with open source Lightning Web Components
Enterprise-grade UI with open source Lightning Web Components
 
TrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer HighlightsTrailheaDX and Summer '19: Developer Highlights
TrailheaDX and Summer '19: Developer Highlights
 
Live coding with LWC
Live coding with LWCLive coding with LWC
Live coding with LWC
 
Lightning web components - Episode 4 : Security and Testing
Lightning web components  - Episode 4 : Security and TestingLightning web components  - Episode 4 : Security and Testing
Lightning web components - Episode 4 : Security and Testing
 
LWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura InteroperabilityLWC Episode 3- Component Communication and Aura Interoperability
LWC Episode 3- Component Communication and Aura Interoperability
 
Lightning web components episode 2- work with salesforce data
Lightning web components   episode 2- work with salesforce dataLightning web components   episode 2- work with salesforce data
Lightning web components episode 2- work with salesforce data
 
Lightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An IntroductionLightning web components - Episode 1 - An Introduction
Lightning web components - Episode 1 - An Introduction
 
Migrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCPMigrating CPQ to Advanced Calculator and JSQCP
Migrating CPQ to Advanced Calculator and JSQCP
 
Scale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in SalesforceScale with Large Data Volumes and Big Objects in Salesforce
Scale with Large Data Volumes and Big Objects in Salesforce
 
Replicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data CaptureReplicate Salesforce Data in Real Time with Change Data Capture
Replicate Salesforce Data in Real Time with Change Data Capture
 
Modern Development with Salesforce DX
Modern Development with Salesforce DXModern Development with Salesforce DX
Modern Development with Salesforce DX
 
Get Into Lightning Flow Development
Get Into Lightning Flow DevelopmentGet Into Lightning Flow Development
Get Into Lightning Flow Development
 
Integrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS ConnectIntegrate CMS Content Into Lightning Communities with CMS Connect
Integrate CMS Content Into Lightning Communities with CMS Connect
 

Recently uploaded

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 

Recently uploaded (20)

Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 

See Androids Fighting: Connect Salesforce with Your Android Wear Watch

  • 1. See Androids Fighting ​ Dr. Holger Kremmin ​ Program Architect ​ hkremmin@salesforce.com ​ @kremminh ​  Integrating your Android Wear Watch with Salesforce
  • 2. ​ 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 any litigation, risks associated with completed and any 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-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent fiscal quarter. These 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. Safe Harbor
  • 3. Objectives In this session you will learn about: § Anatomy of an Android Wear Application § Integration Options § Leveraging Salesforce Mobile SDK for Android § How to setup your Android Studio Project § Leverage Example Code After this session you should have a good understanding to quickly create a stunning Salesforce Android Wear application
  • 4. Not covered In this session you will not learn : § Oauth § Android application architecture § The Salesforce Rest API § Devolping for an Apple Watch … Change pic
  • 5. Agenda §  Architectural Overview §  Prerequisites §  Bridged Notifications §  Data API §  Q & A
  • 6. The Architecture of Android Wear
  • 7. Architectural Overview – Android Wear Message API Data API Node API Wearable App Companion App Awesome Companion App Play Services Wearable App intents Awesome App Android OS Android W OS Wearable App
  • 8. UI Building Blocks - Android Wear is different! Users are used to tapping icons to launch apps. A typical Wear app adds a card to the stream at a contextually relevant moment. It might have a button that opens a full screen view, but it just as well might not. Contextual card Full Screen UI Watch Face §  Bridged Notifications (no development on Wear Device!) §  Contextual Notifications §  2D Picker §  Custom Layouts §  Custom Watch Face designs
  • 9. Salesforce Mobile SDK Push Notifications Container Wrappers Files MDM Policies Enterprise Identity & Security SmartStore Encrypted Database SmartSync Data Management OS UI Frameworks Any Web Framework SalesforceSDKManager.initNative(getApplicationContext(), new KeyImpl(), DreamActivity.class); SalesforceSDKManager.getInstance().setPushNotificationReceiver(new TravelPushNotification(this)); public class DreamActivity extends SalesforceActivity {
  • 10. Architectural Overview – Salesforce Integration using GCM Connected App Companion App Notifications Internet Internet
  • 11. Architectural Overview – Direct Integration using REST-API Internet Message API Data API Node API
  • 13. Setting Up Google Cloud Messaging (GCM) ​ Get a new configuration at developer.google.com (Developer account required) 123456789012 ABC123JKL4567fyzu89012hjr What you get: •  Package Name •  Server API Key •  Sender ID Com.dreamforce
  • 14. Configure the Connected App in Salesforce ​ At least a Developer Org & Admin rights required from Google
  • 15. A lot of keys...What goes Where? Key Source Destination Server API Key Google Developer Salesforce Connected App -> Mobile App Settings -> Key for Server Applications (API Key) Sender ID Google Developer Resource File: <string name="androidPushNotificationClientId"> 123456789012 </string> Android Package Name Google Developer Resource File: <string name="app_package">com.example.app </string> Consumer Key Salesforce Resource File: <string name="remoteAccessConsumerKey"> 3MVG9xOCXq... </string>
  • 16. Setting Up Android Studio §  Usage of Android Studio is highly recommended §  Create a Library project for the Mobile SDK so you can reference it easily from your projects §  Good Practice: Shared project for constants, resources etc. §  Gradle as Build System §  Use real devices for debugging instead of using Emulators
  • 17. The Notification API Bring your approval process to your Smart Watch Demo
  • 18. Sample Workflow Create Travel Request Salesforce Appex Trigger: Approval Process Appex Trigger: Push Notification GCM: Push Notification Mobile Phone: Push Notification Wear: Notification Cards GCM Mobile Phone Wear Device Wear: Approve / Reject Mobile Phone: Send Notification GCM: Send Notification Approve/ Reject
  • 19. Apex Code Snippet – Create & Send Notification/ Message // send the notification Messaging.PushNotification msg = new Messaging.PushNotification(); Map<String, Object> payload = new Map<String, Object>(); payload.put('ownerName', owner.Name); payload.put('ownerFullPhotoUrl', owner.FullPhotoUrl); ... msg.setPayload(payload); // The approver's Id String userId = result.actorIds[0]; Set<String> users = new Set<String>(); users.add(userId); msg.send('Android_Wear', users); Create Message Object Create Payload Add Payload to Message Add target Users Send Message to target Users
  • 20. Implement PushNotificationInterface ​ PushNotificationInterface is a Mobile SDK Android interface for handling push notifications. PushNotificationInterface has a single method, onPushMessageReceived(Bundle message). public class TravelPushNotification implements PushNotificationInterface { ... @Override public void onPushMessageReceived(final Bundle bundle) { ... //create an async task if you perform network tasks etc! Eg. Build your notification HERE
  • 21. Create Notifications with the Notification Builder ​ The v4 support library allows you to create notifications using the latest notification features such as action buttons and large icons. ​ To create a notification with the support library, you create an instance of NotificationCompat.Builder and issue the notification by passing it to notify() // Main notification NotificationCompat.Builder mainNotification = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.s1_icon) .setContentTitle(travelMessage.ownerName) .setContentText(“Travel approval required: " + travelMessage.travelName); ... // Open Card mainNotification.setContentIntent(openPendingIntent); NotificationManagerCompat.from(context).notify(1, mainNotification.build());
  • 22. Add Wearable Features For a Notification ​ If you ever need to add wearable-specific options to a notification, such as specifying additional pages of content or letting users dictate a text response with voice input, you can use the NotificationCompat.WearableExtender class to specify the options. WearableExtender wearableExtender = new WearableExtender() .addAction(approveAction) .addAction(rejectAction) .addPage(detailNotification); mainNotification.extend(wearableExtender);
  • 24. The Data API Sync your data between the Smart Watch and the Companion App
  • 25. Sample Workflow Record Speech Salesforce Create DataItem Sync with Mobile Sync with Wear Send Rest Object Show Chatter Post GCM Mobile Phone Wear Device
  • 26. The Wearable Data Layer API is part of Google Play services and provides a communication channel for your companion and wearable apps. The API supports the synchronization of data objects over the wire and eventing. The Data API A DataItem provides data storage with automatic syncing between the handheld and wearable. Asset objects are for sending binary blobs of data, such as images. You attach assets to data items and the system automatically takes care of the transfer for you, conserving Bluetooth bandwidth by caching large assets to avoid re-transmission. ​ WearableListenerService lets you listen for important data layer events in a service. The system manages the lifecycle of the WearableListenerService ​ DataListener lets you listen for important data layer events when an activity is in the foreground. Lets you listen for changes only when the user is actively using your app. ​ You can use the ChannelApi class to transfer large data items, such as music and movie files, from a handheld to a wearable device. ​ The MessageApi class can send messages and is good for remote procedure calls (RPC), such as controlling a handheld's media player from the wearable or starting an intent on the wearable from the handheld. Messages are also great for one-way requests or for a request/response communication model. Data Events Channel / Message
  • 27. For Demonstration of the Data Sync we create a full screen UI wearable app ​ An Android wear application is nearly identical to a normal smartphone app. In our example we will use the Data API to exchange Data between the Wear device and the companion app running on the smart phone. For our example we could also use the Message API. ​ Extend the MainActivity if you want to listen to data events on the UI Thread. // Main Activity public class MainActivity extends Activity implements ConnectionCallbacks, OnConnectionFailedListener, DataApi.DataListener, MessageApi.MessageListener, NodeApi.NodeListener { ... Your App Code goes here @Override public void onDataChanged(DataEventBuffer dataEvents) { .... If you want to listen to Data change Events
  • 28. Speech Recognition ​ Voice actions (System- or App provided “OK Google, …) and the system's built-in Speech Recognizer activity can be used to obtain speech input from users. // Create an intent that can start the Speech Recognizer activity private void displaySpeechRecognizer() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // Start the activity, the intent will be populated with the speech text startActivityForResult(intent, SPEECH_REQUEST_CODE); } // invoked when the Speech Recognizer returns, extract the speech text from the intent. @Override protected void onActivityResult(int requestCode, int resultCode,Intent data) { if (resultCode == RESULT_OK) { List<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); chatterText = results.get(0); <create & send the data event> }
  • 29. Sending Data ​ A DataItem defines the data interface that the system uses to synchronize data between handhelds and wearables. A DataItem generally consists of the following items: §  Payload - A byte array, which you can set with whatever data you wish, allowing you to do your own object serialization and deserialization. The size of the payload is limited to 100KB. §  Path - A unique string that must start with a forward slash (for instance, "/salesforce/wearable/chatter") // Create a data map and put data in it private void createChatterData(String post) { //Create the data request object PutDataMapRequest putDataMapReq = PutDataMapRequest.create (“/chatter "); putDataMapReq.getDataMap().putString(CHATTER_KEY, post); PutDataRequest putDataReq = putDataMapReq.asPutDataRequest(); // Adds a DataItem to the Android Wear network. à synchronized across all devices PendingResult<DataApi.DataItemResult> pendingResult = Wearable.DataApi.putDataItem(mGoogleApiClient, putDataReq); } ...
  • 30. A DataLayerService will listen on all data events ​ The data layer synchronizes and sends data across the handheld and wearable, you normally want to listen for important events, such as when data items are created, are received, etc. Options: §  Create a service that extends WearableListenerService. §  Create an activity that implements DataApi.DataListener. public class DataLayerListenerService extends WearableListenerService { /.../ @Override public void onDataChanged(DataEventBuffer dataEvents) { if (!mGoogleApiClient.isConnected()... //check for connectivity!!! // Loop through the events for (DataEvent event : dataEvents) { Uri uri = event.getDataItem().getUri(); String path = uri.getPath(); if (COUNT_PATH.equals(path)) { // get the payload byte[] payload = uri.toString().getBytes(); // *Chatter something J postChatterMessage(payload); ... Leveraging the MobileSDK (Authentication, Rest Calls etc…) * See https://github.com/forcedotcom/JavaChatterRESTApi by Jasper Roel
  • 31. Speech Recognition is a great feature, but... Hello Chatter Dreamforce is Awesome Willkommen auf der Dreamforce Who needs the Apple Watch? Who will win the Super Bowl?
  • 32. Key Takeaways §  Keep your Wear UI as simple as possible!!! §  Always test on real devices §  The Salesforce Mobile SDK and Connected Apps handle most of the connection complexity for your application §  Wear Devices are mainly informative devices or to automatically collect data §  The Notification is a great and simple way to expand your existing Android app to Wear Watches without the need to code a custom Wear app
  • 33. Share Your Feedback, and Win a GoPro! 3 Earn a GoPro prize entry for each completed surveyTap the bell to take a survey2Enroll in a session1
  • 36. UI Building Blocks - Android Wear is different! Users are used to tapping icons to launch apps. A typical Wear app adds a card to the stream at a contextually relevant moment. It might have a button that opens a full screen view, but it just as well might not. Application Type Device Devlopment Contextual card in the stream Bridged notifications, such as new message notifications, are pushed to the wearable from the connected handheld using standard Android notifications. They require very little or no Wear-specific code. ✗ Contextual notifications, such as an exercise card that appears when you begin running, are generated locally on the wearable and appear at contextually relevant moments. You can do more with this kind of card than with a notification bridged from the handheld. ✔ Full screen UI app: 2D Picker is a design pattern that allows the user to select from a set of items, such as to select an artist then an album. We recommend using this pre-built component from the SDK whenever relevant. ✔ Custom layouts are also possible where apps need to extend beyond the basic card/stream metaphor, such as to present a graph or map. ✔ Keep your app always-on if you have information that refreshes or stays relevant, without draining the battery. ✔ Watch Face Android Wear supports custom watch faces with designs that can show contextually relevant information to users. ✔