cross platform development with azure mobile services

Post on 10-May-2015

2.644 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Cross platform development with azure mobile services

TRANSCRIPT

Cross platform development with Azure Mobile ServicesIbon Landa

Plain Concepts

Mobile Platforms

iOS

Objective C

Xcode

Windows Phone

C#/Visual Basic/F#

Visual Studio

Android

Java

Eclipse

IntelliJ

What is Mobile Services?

The REST API

Action HTTP Verb URL Suffix

Create POST /TodoItem

Read GET /TodoItem?$filter=id%3D42

Update PATCH /TodoItem/id

Delete DELETE /TodoItem/id

https://Mobileservice.azure-mobile.net/tables/*

Mobile Services Tiers

General Availability99.9%

Free Standard Premium

Usage Restrictions

Up to 10 services,Up to 500 Active Devices*

N/A N/A

API Calls 500K(per subscription)

1.5M(per unit)

15M(per unit)

Scale N/A Up to 6 Standard units

Up to 10 Enterprise units

Scheduled Jobs Limited Included Included

SQL Database(required)

20MB Included, Standard rates apply

for more capacity

20MB Included, Standard rates apply

for more capacity

20MB Included, Standard rates apply

for more capacity

Mobile push is everywhere

Reservation changes, Deals, Back-officeTravel/Hospitality/Airlines

SMS replacement, Deals, Back-officeBanking/Insurance

Orders, Product UX,

Back-officeDiscrete manufacturing/Auto

Prescriptions, Appointments,

LOB (maintenance)Healthcare

Breaking newsNews/Media

Offers, Orders, Back-officeRetail

Registration at app launch1. Client app contacts Platform Notification Service, to retrieve

current channel (e.g. ChannelURIs, device tokens, registrationIds)

2. App updates handle in back-end

Sending Notification1. App back-end send notification to PNS

2. PNS pushes the notification to the app on the device

Maintenance1. Delete expired handles when PNS rejects them

Push notification lifecycle

Platform

Notification

Service

App back-end

Platform dependencyDifferent communication protocols to PNS’ (e.g. HTTP vs TCP, xml payload vs json payload)

Different presentation formats and capabilities (tiles vs toasts vs badges)

RoutingPNS’ provide a way to send a message to a device/channel

Usually notifications are targeted at users or interest groups (e.g. employees assigned to a customer account)

App back-end has to maintain a registry associating device handles to interest groups/users

ScaleApp back-end has to store current handles for each device high storage and VM costs

Broadcast to millions of devices with low latency requires parallelization (DB ad VM)

Challenges of push notifications

One-time set up1. Create a Notification Hub

Register1. The client app retrieves its current handle from the PNS

2. Client app creates (or updates) a registration on the Notification Hub with the current handle

Send Notification1. The app back-end sends a message to the Notification Hub

2. Notification Hub pushes it to the PNS’

Using Notification Hubs

APNs WNS

Notification Hub

App back-end

iOS app Windows app

MPNS

GCM

ADM

X-plat: from any back-end to any mobile platformBackend can be on-prem or in the cloud, .NET/Node/Java/PHP/Node/anything.

Support Windows Phone/Windows/iOS/Android and (as of today) Kindle Fire.

No need to store device information in the app back-endNotification Hub maintains the registry of devices and the associations to users/interest groups

Routing and interest groupsTarget individual users and large interest groups using tags

Personalization and localizationKeep your back-end free of presentation concerns like localization and user preferences using templates

Broadcast at scale, multicast, unicastPush notifications to millions of devices (across platforms) with a single call

TelemetryRich telemetry available through portal or APIs

Advantages of using Notification Hubs

Bing (news, finance, sports, …) Sochi 2014

Case studies

10s

3+ <2

100s

3+ 150+

Register Send

Some snippets

await

[hub registerNativeWithDeviceToken:deviceTokentags:nilcompletion:^(NSError* error) { … }];

hub.register(regid);

var toast = @“<notification payload>";hub.SendWindowsNativeNotificationAsync(toast);

hubService.wns.sendToastText01(null, {

text1: 'Hello from Node!'},function (error)

{…

});

Tags as interest groups1. Client app can register with a set of tags

2. Tags are simple strings (no pre-provisioning is required)

3. App back-end can target all clients with the same tag

You can use tags also forMultiple type of interest groups, e.g.

Follow bands: tag “followband:Beatles”

Follow users: tag “followuser:Alice”

Tag devices with a user id

Tags

Notification Hub

App back-end

Tag:”Beatles”Tag:”Wailers”

Tag:”Beatles”

Register

Some snippets

await new string[] {"myTag", "myOtherTag"}

[hub registerNativeWithDeviceToken:deviceToken tags:@[@"myTag", @"myOtherTag"] completion:^(NSError* error) {…

}];

hub.register(regid, "myTag“, "myOtherTag");

Notification Hubs is not a storage systemMaintain an authoritative store for your tags

In the deviceEvery platform provides apps a way to store user information locally or in the cloudE.g. Roaming settings, iCloud

In your app back-endUsually stored by userTry not to replicate device information

Register methods always overwrite tagsEach time you update the channel, overwrite all the tags

“How do I read tags from my hub?”

RegistrationClient apps can register with a platform specific template, e.g.

Windows tablet registers with Windows Store ToastText01 template

iPhone with the Apple JSON template:{ aps: {alert: “$(message)”}}

Send notificationApp back-end sends a platform independent message: {message: “Hello!”}

NotesMultiple templates can be specified for each device

Each template can have a different set of tags

Using templates for multi-platform push

Notification Hub

App back-end

<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(message)</text>

</binding></visual>

</toast>

{aps: {

alert: “$(message)”}

}

{message: “Hello!”

}

Hello!

Hello!

RegistrationClient apps can register with personalized templates, e.g.

Windows tablet wants to receive news in English

iPhone wants Italian

Send notificationApp back-end sends a message including both languages: {news_en: “Hello!”, news_it: “Ciao!”}

Template ExpressionsTemplates support a simple expression language:

E.g. {‘Elio, ’+$(friend)+’ added you to ’+$(groupName)}

Using templates for localization

Notification Hub

App back-end

<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(news_en)</text>

</binding></visual>

</toast>

{aps: {

alert: “$(news_it)”}

}

{news_en: “Hello!”,news_it: “Ciao!”

}

Hello!

Ciao!

Thanks!

top related