integrating clouds & humans with wearable apps
DESCRIPTION
As smart watches and other human-integrated devices make their way into the mainstream, developers will need to quickly ramp up to these new paradigms and interaction models. This session will dive into the world of developing cloud-driven applications for wearables. Through copious code and examples you will learn the architecture and patterns for building cloud-based, wearable apps.TRANSCRIPT
![Page 1: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/1.jpg)
Integrating Clouds & Humans with Wearable Apps
@_JamesWard Salesforce.com
![Page 2: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/2.jpg)
![Page 3: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/3.jpg)
Salesforce Wear Developer Packs
• Six Open Source Developer Packs developer.salesforce.com/wear
• Android Wear, Google Glass, Pebble, Samsung Gear, Myo, Nymi
• Getting Started Guides, Sample Apps, and architecture overviews
![Page 4: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/4.jpg)
Android Wear• Android-based Wearable SDK
developer.android.com/wear
• Wearables as companions to Android Phones
• Glanceable notifications & interactions
• Phones push to wearables
• Moto360 & LG G
![Page 5: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/5.jpg)
Salesforce Wear Developer Pack for Android Wear
• Quote Discount Approval Sample
• Native Android Phone App
• Salesforce Mobile Push
• Gradle Build
![Page 6: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/6.jpg)
Sample: Quote Discount ApprovalSales Rep
Discount >= 20%
trigger QuoteApproval on Quote (before insert, before update) {
![Page 7: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/7.jpg)
One beautiful Gradle build does everything (almost)
• Salesforce Metadata Deploy
$ ./gradlew forceMetadataDeploy
• Dependency Management
dependencies { compile "com.force:SalesforceSDK:2.1.1-3" compile "com.android.support:support-v4:19.+" compile files("libs/wearable-preview-support.jar") }
• Builds & runs the app
$ ./gradlew installDebug
![Page 8: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/8.jpg)
Architecture• Salesforce
• Quotes on Opportunities
• Approval Workflow: Quote with Discount >= 20% requires approval from manager
• Trigger on Quote update/insert: creates approval process & sends mobile push message
• Android Phone App
• Receives push message
• Creates notification on watch
• Handles watch actions (Approve, Reject, Open)
![Page 9: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/9.jpg)
Code Highlights - TriggerMessaging.PushNotification msg = new Messaging.PushNotification();
!Map<String, Object> payload = new Map<String, Object>();
payload.put('ownerName', owner.Name);
...
msg.setPayload(payload);
!String userId = result.actorIds[0];
Set<String> users = new Set<String>();
users.add(userId);
!msg.send('QuoteDiscountApproval', users);
![Page 10: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/10.jpg)
Code Highlights - Push Receiver
public class QPN implements PushNotificationInterface { ! @Override public void onPushMessageReceived(final Bundle bundle) { ! final QM quoteMessage = new QM(bundle); ! ... } !} !!SalesforceSDKManager.getInstance() .setPushNotificationReceiver(new QPM(this));
![Page 11: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/11.jpg)
Code Highlights - Wear Notification
WearableNotifications.Builder wearableBuilder = new WearableNotifications.Builder(mainNotification); !wearableBuilder .addPage(detailNotification) .addAction(rejectAction); !mainNotification .setContentIntent(openPendingIntent); !NotificationManagerCompat.from(context) .notify(1, wearableBuilder.build());
![Page 12: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/12.jpg)
Code Highlights - Approve or Reject
JSONObject approvalRequest = new JSONObject(); approvalRequest.put("actionType", action); approvalRequest.put("contextId", workItemId); approvalRequest.put("comments", comments); !JSONArray requests = new JSONArray(); requests.put(approvalRequest); !JSONObject json = new JSONObject(); json.put("requests", requests); !StringEntity entity = new StringEntity(json.toString(), HTTP.UTF_8); entity.setContentType("application/json"); !String url = "/services/data/" + c.getString(R.string.api_version) + "/process/approvals/"; !final RestRequest restRequest = new RestRequest(RestRequest.RestMethod.POST, url, entity); !QuoteDiscountApprovalSetup.client.sendAsync(restRequest, new RestClient.AsyncRequestCallback() { @Override public void onSuccess(RestRequest request, RestResponse result) { } ! @Override public void onError(Exception exception) { } } );
![Page 13: Integrating Clouds & Humans with Wearable Apps](https://reader033.vdocuments.site/reader033/viewer/2022060108/554f6c91b4c9058a148b4fe2/html5/thumbnails/13.jpg)
https://github.com/developerforce/
WearablePack-AndroidWear