Mobile meets Enterprise

387 views
292 views

Published on

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.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
387
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Mobile meets Enterprise

  1. 1. Arne Limburg | open knowledge GmbH Mobile meets Enterprise
  2. 2. Arne Limburg Head of Architecture and Technology open knowledge GmbH @ArneLimburg @_openknowledge www.openknowledge.de Meine Person
  3. 3. „You know what? We need an App!“
  4. 4. „Why me!“
  5. 5. „iPhone, Android, Black Berry, Symbian, Windows Mobile, ...? Feature Phone, Smartphone, ...? WHAT THE HECK?“
  6. 6. „Which way to choose?“
  7. 7. „You know what? We need an App!“ „And put it in the
  8. 8. „Du sollst kein (i)OS neben mir haben!“ „Warum eigentlich nicht?“
  9. 9. 74,9 81,0 14,4 12,92,0 3,64,1 1,74,5 0,6 0 20 40 60 80 100 Q3 2012 Q3 2013 MarktanteilneuerDevices(in%) Smartphone Betriebssysteme Smartphone Shipment weltweit Android iOS Windows BlackBerry Andere (Quelle: IDC Smartphone Tracker)
  10. 10. 39,4 56,558,1 39,6 1,0 3,3 0,41,0 0,2 0 20 40 60 80 100 Q1 2012 Q1 2013 MarktanteilneuerDevices(in%) Tablet Betriebssysteme Tablet Shipment weltweit Android iOS Windows Windows RT Andere (Quelle: IDC Smartphone Tracker)
  11. 11. FACTS: Part 1 „The Native App Story“ a.k.a. „Only the Best“
  12. 12. „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
  13. 13. „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
  14. 14. 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
  15. 15. 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
  16. 16. Lohnt sich das? Alternativen?
  17. 17. FACTS: Part 2 „The Mobile Web Story“ a.k.a. „One Size fits All“
  18. 18. Canvas Element Video Element Geolocation Element Offline Web
  19. 19. „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.“
  20. 20. Mobile APP is not Mobile Web
  21. 21. PROS: • bekannte Sprache(n) & Technologien • einheitliche Code-Basis • Browser based Development • einfaches Deployment • große Reichweite • Industriestandard, kein Plattform-Lock • große Developer-CommunityCommunity Native Mobile Application
  22. 22. 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
  23. 23. Mobile Web Application 475 HTML5 Compability Test Cases
  24. 24. Mobile Web Application „Die Entwicklung der Financial Times iPad App hat 24 Monate gedauert. Die Portierung auf Android noch einmal 12 Monate.“
  25. 25. 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, …
  26. 26. http://mobilehtml5.org/
  27. 27. „WHAT THE HECK - die Zweite“ Best of …
  28. 28. FACTS: Part 3 „The Hybrid App Story“ a.k.a. „Best of both Worlds“
  29. 29. Hybrid Mobile Application
  30. 30. 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
  31. 31. Hybrid Mobile Application
  32. 32. Hybrid Mobile Application
  33. 33. „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
  34. 34. „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
  35. 35. Die Idee
  36. 36. der Mehrwert
  37. 37. Die Capabilities
  38. 38. 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
  39. 39. 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)
  40. 40. 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
  41. 41. Hybrid Mobile Application Should I stay, or should I go?
  42. 42. Hybrid Mobile Application GRÜNDE FÜR ABSPRUNG: Top 10 - No 1: „Lack of Performance“ Top 10 - No 2: „Lack of new Features“
  43. 43. „The Native App Story?“ „The Mobile Web Story?“ „The Hybrid App Story“? Best „Tool“ for the job!
  44. 44. „You know what? We need an App!“ „What do ya wanna do with it?“
  45. 45. Yahoo! Seven Mobile Modes („Seven Mobile Modes“ by Yahoo!, 2013)
  46. 46. Yahoo! Seven Mobile Modes („Seven Mobile Modes“ by Yahoo!, 2013)
  47. 47. The Mobile Day
  48. 48. Was will ich überhaupt anbieten?
  49. 49. Was ist der Mehrwert meiner App?
  50. 50. Content, offline, ...
  51. 51. Gutscheine, Location, ...
  52. 52. Kamera, Location, offline
  53. 53. „Depends ...!“ „Which way to choose?“
  54. 54. Was ist der Mehrwert meiner App?
  55. 55. > Always On > Geolocation > Offline Data > Address Book > Camera Mobile Benefits
  56. 56. > Always On > Geolocation > Offline Data > Address Book > Camera Mobile Benefitsmobile meets enterprise
  57. 57. Client-Server Communication HTTP
  58. 58. > Performance? > Bitrate? > Memory? > Battery Life? > Security?
  59. 59. Performance & Bitrate
  60. 60. mobile meets enterprise REST over HTTP
  61. 61. The Server
  62. 62. The Server: JAX-RS @Path("cart") public class ShoppingCartService { @GET @Path("items/{number}") @Produces("application/xml") public ShoppingCartItem getShoppingCartItem( @PathParam("number") Integer no) { return ... } }
  63. 63. Performance & Bitrate
  64. 64. BTW: Use JSON! @Path("cart") public class ShoppingCartService { @GET @Path("items/{number}") @Produces("application/json") public ShoppingCartItem getShoppingCartItem( @PathParam("number") Integer no) { return ... } }
  65. 65. The Client
  66. 66. 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(); ... }
  67. 67. The Client: No Network on UI Thread!
  68. 68. public interface ShoppingCartService { @GET("cart/items") public List<ShoppingCartItem> getShoppingCartItems(); @GET("cart/items/{number}") public ShoppingCartItem getShoppingCartItem( @Path("number") Integer no); } The Client: Retrofit
  69. 69. 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);
  70. 70. The Client: Retrofit async service.loadShoppingCartItem(5, new Callback<ShoppingCartItem>() { public void success(ShoppingCartItem item, Response response) { ... } public void failure(RetrofitError error) { ... } });
  71. 71. JSON-Parsing auf Client & Server: Jackson
  72. 72. Security HTTPS
  73. 73. 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);
  74. 74. 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();
  75. 75. 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
  76. 76. Private Preferences public class ShoppingCartActivity extends Activity public SharedPreferences getPrivatePreferences() { return getSharedPreferences("private.pref", MODE_PRIVATE); } ... }
  77. 77. Server to Client aka Push
  78. 78. Server to Client Long-Polling SSE WebSockets
  79. 79. The Server
  80. 80. The Server: Websockets @ServerEndpoint("cart") public class ShoppingCartEndpoint { @OnMessage public void receiveUpdate(Session session, String message) { ... session.getBasicRemote().sendText(answer); } }
  81. 81. The Client
  82. 82. 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
  83. 83. Websockets Selten benötigt Wenig Daten Serverlast
  84. 84. Server to Client PushPOST Google Cloud Services
  85. 85. Google Cloud Messaging register (receive id) send registration id POST with registration ids notify
  86. 86. Google Play Services Retry Multicast Aber: Vendor-Lock
  87. 87. App Store Alternativen
  88. 88. Mobile Strategy
  89. 89. > Native Experience ermöglichen Device Capabilities nutzen < > Nicht Web Auftritt kopieren Performance optimieren < > Weniger ist oft mehr! Tech follows Features! User Experience matters!
  90. 90. Vielen Dank für Ihre Zeit. Kontakt: open knowledge GmbH Bismarckstr. 13 26122 Oldenburg arne.limburg@openknowledge.de @ArneLimburg @_openknowledge Questions & Answers

×