94
Arne Limburg | open knowledge GmbH Mobile meets Enterprise

Mobile meets Enterprise

Embed Size (px)

DESCRIPTION

Mobile meets Enterprise Speaker: Arne Limburg Mobile Clients werden zunehmend für Unternehmen interessant, die sich bisher nur auf Enterprise Computing fokussiert haben. Insbesondere, wenn mobile Clients einen Mehrwert gegenüber klassischen Enterprise-Anwendungen bieten, rentiert sich eine Investition in mobile Technologien. Mehrwert kann vor allem dadurch erzeugt werden, dass Daten zwischen Client und Server ausgetauscht werden.

Citation preview

Page 1: Mobile meets Enterprise

Arne Limburg | open knowledge GmbH

Mobile meets Enterprise

Page 2: Mobile meets Enterprise

Arne Limburg

Head of Architecture and Technology

open knowledge GmbH

@ArneLimburg

@_openknowledge

www.openknowledge.de

Meine Person

Page 3: Mobile meets Enterprise

„You know what? We need an App!“

Page 4: Mobile meets Enterprise

„Why me!“

Page 5: Mobile meets Enterprise

„iPhone, Android, Black Berry,

Symbian, Windows Mobile, ...?

Feature Phone, Smartphone, ...?

WHAT THE HECK?“

Page 6: Mobile meets Enterprise

„Which way to choose?“

Page 7: Mobile meets Enterprise

„You know what? We need an App!“

„And put it in the

Page 8: Mobile meets Enterprise

„Du sollst kein (i)OS neben mir haben!“

„Warum eigentlich nicht?“

Page 9: Mobile meets Enterprise

74,9 81,0

14,4 12,9 2,0 3,6 4,1 1,7 4,5 0,6 0

20

40

60

80

100

Q3 2012 Q3 2013

Mar

ktan

teil

ne

ue

r D

evi

ces

(in

%)

Smartphone Betriebssysteme

Smartphone Shipment weltweit

Android iOS Windows BlackBerry Andere

(Quelle: IDC Smartphone Tracker)

Page 10: Mobile meets Enterprise

39,4 56,5 58,1

39,6

1,0 3,3 0,4 1,0 0,2 0

20

40

60

80

100

Q1 2012 Q1 2013

Mar

ktan

teil

ne

ue

r D

evi

ces

(in

%)

Tablet Betriebssysteme

Tablet Shipment weltweit

Android iOS Windows Windows RT Andere

(Quelle: IDC Smartphone Tracker)

Page 11: Mobile meets Enterprise

FACTS: Part 1

„The Native App Story“

a.k.a.

„Only the Best“

Page 12: Mobile meets Enterprise
Page 13: Mobile meets Enterprise

„Entwicklung auf Basis von Plattform-

spezifischen SDKs und Sprachen.“

„Nativer Zugriff auf Plattform- bzw.

Device-Features.“

„Sowohl im Online- als auch im

Offline-Modus verwendbar“

„Optimierte Performanz durch Nutzung

nativer APIs und direktem OS-Zugriff.“

Native Mobile Application

Page 14: Mobile meets Enterprise

„Optimal zugeschnittene Tools direkt von

der Quelle und 3rd Party Anbietern.“

„Best mögliche Monetarisierung dank

eigenem App-Store.“

„Coole und vor allem echte

Mobile Community“

„No Fake - just Real.“

Native Mobile Application

Page 15: Mobile meets Enterprise

Native Mobile Application

PROS:

• Native Look & Feel

• (fast) unbegrenzter Zugriff auf Plattform-Features

• best mögliche Perfomanz durch optimierte APIs

• kaum Grenzen bzgl. App-Design

Native

Page 16: Mobile meets Enterprise

Native Mobile Application

CONS:

• teuer, da jede Plattform einzeln bedient werden muss

• Kenntnisse in verschiedenen Tools/Plattformen notwendig

• kleinerer Pool an Entwicklern je Plattform

• wenig Möglichkeiten zur Wiederverwendung von Code

teuer

Page 17: Mobile meets Enterprise

Lohnt sich das? Alternativen?

Page 18: Mobile meets Enterprise

FACTS: Part 2

„The Mobile Web Story“

a.k.a.

„One Size fits All“

Page 19: Mobile meets Enterprise
Page 20: Mobile meets Enterprise

Canvas Element

Video Element

Geolocation Element

Offline Web

Page 21: Mobile meets Enterprise

„Basiert auf Web-Technologien, wie

HTML 5, CSS 3 und JavaScript.“

Mobile Web Application

„Mobile Web Browser als Ablauf- und

Web Server als Auslieferungsplattform.“

„Bedingt sowohl im Online- als auch

im Offline-Modus verwendbar“

„Optimierung durch unterschiedliche

Views für unterschiedliche Plattformen

bzw. Device-Typen.“

Page 22: Mobile meets Enterprise

Mobile APP

is not

Mobile Web

Page 23: Mobile meets Enterprise

PROS:

• bekannte Sprache(n) & Technologien

• einheitliche Code-Basis

• Browser based Development

• einfaches Deployment

• große Reichweite

• Industriestandard, kein Plattform-Lock

• große Developer-Community

Community

Native Mobile Application

Page 24: Mobile meets Enterprise

Native Mobile Application

CONS:

• Browser Fragmentation

• limitierter Zugriff auf Device-Capabilities

• keine Verteilung über App-Stores

• nicht immer als „App“ installierbar

• teilweise ungenügende Performanz

• eigenes Monetarizierungskonzept notwenig

Fragmentation

Page 25: Mobile meets Enterprise

Mobile Web Application

475 HTML5

Compability

Test Cases

Page 26: Mobile meets Enterprise

Mobile Web Application

„Die Entwicklung der Financial Times

iPad App hat 24 Monate gedauert. Die

Portierung auf Android noch einmal

12 Monate.“

Page 27: Mobile meets Enterprise

Mobile Web Application

Wer bin ich und was kann ich?:

• via Device Capabilities Database

• Zugriff online und/oder offline

• in der Regel recht aktuell

• zum Teil nicht ganz billig

• bitte nicht selber machen

• Wurfl, DotMobi, DetectRight, …

Page 28: Mobile meets Enterprise

http://mobilehtml5.org/

Page 29: Mobile meets Enterprise

„WHAT THE HECK - die Zweite“

Best of …

Page 30: Mobile meets Enterprise

FACTS: Part 3

„The Hybrid App Story“

a.k.a.

„Best of both Worlds“

Page 31: Mobile meets Enterprise

Hybrid Mobile Application

Page 32: Mobile meets Enterprise

Variante A)

Code und UI Templates werden in native Binaries übersetzt

und als App installiert.

Variante B)

Code und UI Templates werden in Binary-Shell verpackt und

zur Laufzeit durch eine Runtime - z.B. einen „nacked Browser“ -

interpretiert.

Hybrid Mobile Application

Page 33: Mobile meets Enterprise

Hybrid Mobile Application

Page 34: Mobile meets Enterprise

Hybrid Mobile Application

Page 35: Mobile meets Enterprise

„Entwicklung auf Basis von Web-Technologien,

wie HTML 5, CSS 3 und JavaScript.“

„Native App-Shell als Proxy inkl. Zugriff

auf etliche Device-Capabilities.

„Einmal schreiben, aber je

Plattform konfigurieren, bauen und

in den jeweiligen Store stellen.“

„Installation als App auf dem Device“

Hybrid Mobile Application

Page 36: Mobile meets Enterprise

„Nutzt HTML 5 & Friends deutlich über die

angedachten Browser-Features hinaus.“

„Neue Plattformen können mit kleinem

Budget angegangen werden.“

„Cross-Platform Tools bedienen

den gesamten Lifecycle.“

„Nimmt dem Entwickler das Problem der

Browser-Fragmentierung ab.“

Hybrid Mobile Application

Page 37: Mobile meets Enterprise
Page 38: Mobile meets Enterprise

Die Idee

Page 39: Mobile meets Enterprise

der Mehrwert

Page 40: Mobile meets Enterprise

Die Capabilities

Page 41: Mobile meets Enterprise

Hybrid Mobile Application

PROS:

• bekannte Sprache(n) & Technologien

• einheitliches Toolset & Know-how

• Zugriff auf etliche Plattform-Features

• Synchronisation von Release verschiedener Plattformen

• installierbare, verkaufbare App-Store App

• allgemeine Code-Basis für alle Plattformen

• geringe Kosten für weitere Plattformen

Page 42: Mobile meets Enterprise

Hybrid Mobile Application

GRÜNDE FÜR NUTZUNG:

Wichtig: „Zugriff auf weitere Plattformen“1) 2)

Unwichtig: „zusätzliche Monetarisierung“

1) Umsetzung für neue Plattformen kostet nativ oftmals 50% und mehr

2) Anzahl unterstützter Plattformen 2011 = 3.2 / 2012 = 3.8 (4.5 mit CPT)

Page 43: Mobile meets Enterprise

Hybrid Mobile Application

CONS:

• separate Konfiguration für jede Plattform

• komplizierterer Build-/Deployprozess

• gebunden an App-Store Regeln

• neue Plattform-Features werden erst spät(er) adaptiert

• verminderte Performanz gegenüber Native Apps

Page 44: Mobile meets Enterprise

Hybrid Mobile Application

Should I

stay,

or should I

go?

Page 45: Mobile meets Enterprise

Hybrid Mobile Application

GRÜNDE FÜR ABSPRUNG:

Top 10 - No 1: „Lack of Performance“

Top 10 - No 2: „Lack of new Features“

Page 46: Mobile meets Enterprise
Page 47: Mobile meets Enterprise

„The Native App Story?“

„The Mobile Web Story?“

„The Hybrid App Story“?

Best „Tool“ for the job!

Page 48: Mobile meets Enterprise

„You know what? We need an App!“

„What do ya wanna do with it?“

Page 49: Mobile meets Enterprise

Yahoo! Seven Mobile Modes

(„Seven Mobile Modes“ by Yahoo!, 2013)

Page 50: Mobile meets Enterprise

Yahoo! Seven Mobile Modes

(„Seven Mobile Modes“ by Yahoo!, 2013)

Page 51: Mobile meets Enterprise

The Mobile Day

Page 52: Mobile meets Enterprise

Was will ich überhaupt anbieten?

Page 53: Mobile meets Enterprise

Was ist der Mehrwert meiner App?

Page 54: Mobile meets Enterprise

Content, offline, ...

Page 55: Mobile meets Enterprise

Gutscheine, Location, ...

Page 56: Mobile meets Enterprise

Kamera, Location, offline

Page 57: Mobile meets Enterprise

„Depends ...!“

„Which way to choose?“

Page 58: Mobile meets Enterprise

Was ist der Mehrwert meiner App?

Page 59: Mobile meets Enterprise

> Always On

> Geolocation

> Offline Data

> Address Book

> Camera

Mobile Benefits

Page 60: Mobile meets Enterprise

> Always On

> Geolocation

> Offline Data

> Address Book

> Camera

Mobile Benefits mobile meets enterprise

Page 61: Mobile meets Enterprise

Client-Server Communication

HTTP

Page 62: Mobile meets Enterprise

> Performance?

> Bitrate?

> Memory?

> Battery Life?

> Security?

Page 63: Mobile meets Enterprise

Performance & Bitrate

Page 64: Mobile meets Enterprise

mobile meets enterprise

REST over HTTP

Page 65: Mobile meets Enterprise

The Server

Page 66: Mobile meets Enterprise

The Server: JAX-RS

@Path("cart") public class ShoppingCartService { @GET @Path("items/{number}") @Produces("application/xml") public ShoppingCartItem getShoppingCartItem( @PathParam("number") Integer no) { return ... } }

Page 67: Mobile meets Enterprise

Performance & Bitrate

Page 68: Mobile meets Enterprise

BTW: Use JSON!

@Path("cart") public class ShoppingCartService { @GET @Path("items/{number}") @Produces("application/json") public ShoppingCartItem getShoppingCartItem( @PathParam("number") Integer no) { return ... } }

Page 69: Mobile meets Enterprise

The Client

Page 70: Mobile meets Enterprise

The Client: HTTPClient

HttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); HttpResponse response = client.execute(httpGet); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream in = entity.getContent(); ... }

Page 71: Mobile meets Enterprise

The Client: No Network on UI Thread!

Page 72: Mobile meets Enterprise

public interface ShoppingCartService { @GET("cart/items") public List<ShoppingCartItem> getShoppingCartItems(); @GET("cart/items/{number}") public ShoppingCartItem getShoppingCartItem( @Path("number") Integer no); }

The Client: Retrofit

Page 73: Mobile meets Enterprise

The Client: Retrofit

RestAdapter adapter = new RestAdapter.Builder() .setServer("http://www.openknowledge.de") .build(); ShoppingCartService service = adapter.create(ShoppingCartService.class); ShoppingCartItem item = service.getShoppingCartItem(5);

Page 74: Mobile meets Enterprise

The Client: Retrofit async

service.loadShoppingCartItem(5, new Callback<ShoppingCartItem>() { public void success(ShoppingCartItem item, Response response) { ... } public void failure(RetrofitError error) { ... } });

Page 75: Mobile meets Enterprise

JSON-Parsing auf Client & Server: Jackson

Page 76: Mobile meets Enterprise

Security

HTTPS

Page 77: Mobile meets Enterprise

Self-signed Certificate

AssetManager assetManager = getAssets(); InputStream in = assetManager.open("ca.cert"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); Certificate ca = cf.generateCertificate(in); String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca);

Page 78: Mobile meets Enterprise

Self-signed Certificate

String algorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); tmf.init(keyStore); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManager(), null); HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); connection.setSSLSocketFactory( context.getSocketFactory()); return connection.getInputStream();

Page 79: Mobile meets Enterprise

Self-signed Certificate

AssetManager assetManager = getAssets(); InputStream in = assetManager.open("ca.cert"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); Certificate ca = cf.generateCertificate(in); String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); String algorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm); tmf.init(keyStore); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManager(), null); HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); connection.setSSLSocketFactory(context.getSocketFactory()); return connection.getInputStream();

http://developer.android.com/training/articles/security-ssl.html

Page 80: Mobile meets Enterprise

Private Preferences

public class ShoppingCartActivity extends Activity public SharedPreferences getPrivatePreferences() { return getSharedPreferences("private.pref", MODE_PRIVATE); } ... }

Page 81: Mobile meets Enterprise

Server to Client aka Push

Page 82: Mobile meets Enterprise

Server to Client

Long-Polling SSE

WebSockets

Page 83: Mobile meets Enterprise

The Server

Page 84: Mobile meets Enterprise

The Server: Websockets

@ServerEndpoint("cart") public class ShoppingCartEndpoint { @OnMessage public void receiveUpdate(Session session, String message) { ... session.getBasicRemote().sendText(answer); } }

Page 85: Mobile meets Enterprise

The Client

Page 86: Mobile meets Enterprise

WebSocketConnection connection = new WebSocketConnection(); connection.connect(uri, new WebSocketHandler() { public void onTextMessage(String message) { ... connection.sendTextMessage(answer); } public void onOpen() { ... } public void onClose(int code, String reason) { ... } };

The Client: Autobahn

Page 87: Mobile meets Enterprise

Websockets

Selten benötigt

Wenig Daten

Serverlast

Page 88: Mobile meets Enterprise

Server to Client

Push

POST

Google Cloud Services

Page 89: Mobile meets Enterprise

Google Cloud Messaging

register (receive id)

send registration id

POST with registration ids

notify

Page 90: Mobile meets Enterprise

Google Play Services

Retry

Multicast

Aber: Vendor-Lock

Page 91: Mobile meets Enterprise

App Store Alternativen

Page 92: Mobile meets Enterprise

Mobile Strategy

Page 93: Mobile meets Enterprise

> Native Experience ermöglichen

Device Capabilities nutzen <

> Nicht Web Auftritt kopieren

Performance optimieren <

> Weniger ist oft mehr!

Tech follows Features!

User Experience matters!

Page 94: Mobile meets Enterprise

Vielen Dank für Ihre Zeit. Kontakt: open knowledge GmbH Bismarckstr. 13 26122 Oldenburg [email protected] @ArneLimburg @_openknowledge

Questions & Answers