Windows Azure Toolkit for iOS<br />Simon Guest<br />Director, Mobility Solutions<br />Neudesic, LLC<br />simon.guest@neude...
26% of the US Smartphone Market<br />95% of the WW Tablet Market<br />
Over 80% of the F500 testing and/or deploying <br />iPad applications in the Enterprise<br />
Over 350,000 iPhone Apps<br />Over 100,000 iPad Apps<br />
Apple will have sold another 54 iPhones and 11 iPads<br />
Many mobile-cloud scenarios<br />
iPhone/iPad device on the front end<br />Windows Azure on the back end<br />
Using Windows Azure services from iOS is complex<br />
Mobile Scenarios enabled by Windows Azure<br />Windows Azure Toolkit for iOS<br />Future Direction and Thoughts<br />
1. Storing and Accessing Photos, Videos, Music<br />
2. Storing and Accessing Structured Data<br />Title:  Frog on a twig<br />Author: Simon Guest<br />Date:  7/26/2011<br />T...
3.  Sharing with Others<br />Title:  Frog on a twig<br />Author: Simon Guest<br />Date:  7/26/2011<br />Time:  12.45pm<br ...
<ul><li>Most suitable for binary data (images, video, audio)
Container-based approach
Streaming and multi-part</li></ul>Blob Storage<br /><ul><li>Most suitable for structured data
Dynamic schema
Partitioning to enable scale</li></ul>Table Storage<br /><ul><li>Most suitable for short messages
First in, First out mechanism
Limited durability</li></ul>Queue Storage<br />
<ul><li>Most suitable for binary data (images, video, audio)
Container-based approach
Streaming and multi-part</li></ul>Blob Storage<br /><ul><li>Most suitable for structured data
Dynamic schema
Partitioning to enable scale</li></ul>Table Storage<br /><ul><li>Most suitable for short messages
First in, First out mechanism
Limited durability</li></ul>Queue Storage<br />
Then, why so complex?<br />
Blob Storage<br />
Blob Storage<br />
REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, D...
REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, D...
How do I get that computed hash?<br />
REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, D...
GET http://iostest.blob.core.windows.net/?comp=list&include=metadata<br />x-ms-date: Thu, 14 Apr 2011 20:30:00 GMT<br />x-...
REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, D...
Repeat process for every service call<br />
Different authentication signatures between <br />table, blob, and queue storage<br />
XML Parsing in Objective C hurts<br />
Memory allocation/disposal of objects<br />
Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
Title:  Frog on a twig<br />Author: Simon Guest<br />Date:  7/26/2011<br />Time:  12.45pm<br />Notes:  <…><br />Message:  ...
Demo<br />
Do I really have to store the <br />Azure account name and key on the device?<br />
Azure account name and key give access to everything!<br />Could store in keychain, but also open to compromise<br />Distr...
Blob Storage<br />Request signed with Account Key<br />Response<br />Table Storage<br />Account Key<br />Queue Storage<br />
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with session token<br />Table Sto...
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Sto...
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Sto...
Demo<br />
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Sto...
Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Sto...
Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Sto...
Demo<br />
Membership works, but still have to maintain usernames and passwords<br />
v1.2 (released yesterday!) supports ACS<br />
Google<br />Yahoo!<br />Windows Live<br />AppFabric<br />WS-Fed MEX<br />Authentication against AppFabric ACS<br />Session...
Google<br />Yahoo!<br />Windows Live<br />AppFabric<br />WS-Fed MEX<br />Authentication against AppFabric ACS<br />Session...
Demo<br />
One more thing…<br />
Windows Azure Queues good for pull, <br />but what about push?<br />
AppRegistration<br />Apple Push Notification Service<br />gateway.sandbox.push.apple.com<br />Native Application<br />iPad...
Token Length<br />Payload Length<br />JSON formatted<br />AppRegistration<br />Send Message Payload<br />0<br />0<br />32<...
AppRegistration<br />Send Message Payload<br />Apple Push Notification Service<br />gateway.sandbox.push.apple.com<br />Na...
Demo<br />
Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
Many other iOS libraries are available on GitHub<br />
GitHub integrated into XCode 4<br />
Strong fork/collaboration model<br />
Community Reaction<br />
#1 on TechMeme<br />8000+ views in 24 hours<br />40+ placements in online/technical publications <br />
Upcoming SlideShare
Loading in...5
×

Windows Azure Toolkit for iOS

2,480

Published on

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,480
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Segoe UI
  • Windows Azure Toolkit for iOS

    1. 1. Windows Azure Toolkit for iOS<br />Simon Guest<br />Director, Mobility Solutions<br />Neudesic, LLC<br />simon.guest@neudesic.com<br />
    2. 2.
    3. 3. 26% of the US Smartphone Market<br />95% of the WW Tablet Market<br />
    4. 4. Over 80% of the F500 testing and/or deploying <br />iPad applications in the Enterprise<br />
    5. 5. Over 350,000 iPhone Apps<br />Over 100,000 iPad Apps<br />
    6. 6. Apple will have sold another 54 iPhones and 11 iPads<br />
    7. 7.
    8. 8. Many mobile-cloud scenarios<br />
    9. 9. iPhone/iPad device on the front end<br />Windows Azure on the back end<br />
    10. 10. Using Windows Azure services from iOS is complex<br />
    11. 11.
    12. 12. Mobile Scenarios enabled by Windows Azure<br />Windows Azure Toolkit for iOS<br />Future Direction and Thoughts<br />
    13. 13.
    14. 14. 1. Storing and Accessing Photos, Videos, Music<br />
    15. 15. 2. Storing and Accessing Structured Data<br />Title: Frog on a twig<br />Author: Simon Guest<br />Date: 7/26/2011<br />Time: 12.45pm<br />Notes: <…> <br />
    16. 16. 3. Sharing with Others<br />Title: Frog on a twig<br />Author: Simon Guest<br />Date: 7/26/2011<br />Time: 12.45pm<br />Notes: <…><br />Message: “Check out my new photo!” <br />
    17. 17. <ul><li>Most suitable for binary data (images, video, audio)
    18. 18. Container-based approach
    19. 19. Streaming and multi-part</li></ul>Blob Storage<br /><ul><li>Most suitable for structured data
    20. 20. Dynamic schema
    21. 21. Partitioning to enable scale</li></ul>Table Storage<br /><ul><li>Most suitable for short messages
    22. 22. First in, First out mechanism
    23. 23. Limited durability</li></ul>Queue Storage<br />
    24. 24. <ul><li>Most suitable for binary data (images, video, audio)
    25. 25. Container-based approach
    26. 26. Streaming and multi-part</li></ul>Blob Storage<br /><ul><li>Most suitable for structured data
    27. 27. Dynamic schema
    28. 28. Partitioning to enable scale</li></ul>Table Storage<br /><ul><li>Most suitable for short messages
    29. 29. First in, First out mechanism
    30. 30. Limited durability</li></ul>Queue Storage<br />
    31. 31. Then, why so complex?<br />
    32. 32. Blob Storage<br />
    33. 33. Blob Storage<br />
    34. 34. REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, Delete Blobs<br />Blob Storage<br />
    35. 35. REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, Delete Blobs<br />GET http://iostest.blob.core.windows.net/?comp=list&include=metadata<br />x-ms-date: Thu, 14 Apr 2011 20:30:00 GMT<br />x-ms-version: 2009-09-19<br />x-ms-blob-type: BlockBlob<br />Authorization: SharedKeyiostest:[ComputedHash]<br />Blob Storage<br />
    36. 36. How do I get that computed hash?<br />
    37. 37. REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, Delete Blobs<br />AccountKey: /9seXadQ9HwOpXUO1jKxFN8q…<br />Request: GETnnnnnnnnnnnnx-ms-blob-type:BlockBlobnx-ms-date:Thu, 14 Apr 2011 20:30:00 GMTnx-ms-version:2009-09-19n/iostest/ncomp:listninclude:metadata<br />Hash = HMACSHA256(UTF8Encode(Request), Base64Decode(AccountKey))<br />Blob Storage<br />Account Key: <br />/9seXadQ9HwOpXUO1jKxFN8q…<br />
    38. 38. GET http://iostest.blob.core.windows.net/?comp=list&include=metadata<br />x-ms-date: Thu, 14 Apr 2011 20:30:00 GMT<br />x-ms-version: 2009-09-19<br />x-ms-blob-type: BlockBlob<br />Authorization: SharedKeyiostest:[ComputedHash]<br /><?xml version="1.0" encoding="utf-8"?><br /><EnumerationResultsAccountName="http://myaccount.blob.core.windows.net/"><br /> <Prefix>c</Prefix><br /> <MaxResults>3</MaxResults><br /> <Containers><br /> <Container><br /> <Name>container1</Name><br /> <Url>http://iostest.blob.core.windows.net/photos</Url><br /> <Properties><br /> <Last-Modified>Sun, 14 Apr 2011 20:09:03 GMT</Last-Modified><br /> </Properties><br /> </Container><br /> </Containers><br />REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, Delete Blobs<br />Blob Storage<br />Account Key: <br />/9seXadQ9HwOpXUO1jKxFN8q…<br />
    39. 39. REST Endpoint:<br />http://[account].blob.core.windows.net<br />List, Create, and Delete Containers<br />List, Put, Get, Delete Blobs<br />PUT http://iostest.blob.core.windows.net/photos/party.jpg <br />x-ms-date: Thu, 14 Apr 2011 20:30:00 GMT<br />x-ms-version: 2009-09-19<br />x-ms-blob-type: BlockBlob<br />Authorization: SharedKeyiostest:[ComputedHash]<br />{...binary representation of photo...}<br />Blob Storage<br />Account Key: <br />/9seXadQ9HwOpXUO1jKxFN8q…<br />
    40. 40. Repeat process for every service call<br />
    41. 41.
    42. 42. Different authentication signatures between <br />table, blob, and queue storage<br />
    43. 43. XML Parsing in Objective C hurts<br />
    44. 44. Memory allocation/disposal of objects<br />
    45. 45.
    46. 46.
    47. 47.
    48. 48. Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
    49. 49. Title: Frog on a twig<br />Author: Simon Guest<br />Date: 7/26/2011<br />Time: 12.45pm<br />Notes: <…><br />Message: “Check out my new photo!” <br />
    50. 50. Demo<br />
    51. 51. Do I really have to store the <br />Azure account name and key on the device?<br />
    52. 52.
    53. 53. Azure account name and key give access to everything!<br />Could store in keychain, but also open to compromise<br />Distributed reset mechanism would be very difficult<br />
    54. 54.
    55. 55. Blob Storage<br />Request signed with Account Key<br />Response<br />Table Storage<br />Account Key<br />Queue Storage<br />
    56. 56. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    57. 57. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    58. 58. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    59. 59. Demo<br />
    60. 60. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    61. 61. Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
    62. 62. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    63. 63. Authentication using Username/Password<br />Blob Storage<br />Session token<br />Request with Session token<br />Table Storage<br />Response<br />Web Role<br />Queue Storage<br />
    64. 64. Demo<br />
    65. 65. Membership works, but still have to maintain usernames and passwords<br />
    66. 66. v1.2 (released yesterday!) supports ACS<br />
    67. 67. Google<br />Yahoo!<br />Windows Live<br />AppFabric<br />WS-Fed MEX<br />Authentication against AppFabric ACS<br />Session token<br />Blob Storage<br />Request with OAuth<br />Response<br />Table Storage<br />Web Role<br />Queue Storage<br />
    68. 68. Google<br />Yahoo!<br />Windows Live<br />AppFabric<br />WS-Fed MEX<br />Authentication against AppFabric ACS<br />Session token<br />Blob Storage<br />Request with OAuth<br />Response<br />Table Storage<br />Web Role<br />Queue Storage<br />
    69. 69. Demo<br />
    70. 70. One more thing…<br />
    71. 71. Windows Azure Queues good for pull, <br />but what about push?<br />
    72. 72.
    73. 73. AppRegistration<br />Apple Push Notification Service<br />gateway.sandbox.push.apple.com<br />Native Application<br />iPad/iPhone OS 4.3.1<br />User Acceptance<br />
    74. 74. Token Length<br />Payload Length<br />JSON formatted<br />AppRegistration<br />Send Message Payload<br />0<br />0<br />32<br />deviceToken<br />0<br />34<br />message<br />Apple Push Notification Service<br />gateway.sandbox.push.apple.com<br />Native Application<br />Worker Role<br />iPad/iPhone OS 4.3.1<br />User Acceptance<br />
    75. 75. AppRegistration<br />Send Message Payload<br />Apple Push Notification Service<br />gateway.sandbox.push.apple.com<br />Native Application<br />Worker Role<br />Request<br />Response<br />iPad/iPhone OS 4.3.1<br />Web Role<br />User Acceptance<br />Windows Azure Queue<br />Receive Message, LaunchApp<br />
    76. 76. Demo<br />
    77. 77. Toolkit should be as simple as possible<br />Everything works on the Mac<br />Enable others to contribute<br />
    78. 78.
    79. 79.
    80. 80.
    81. 81. Many other iOS libraries are available on GitHub<br />
    82. 82. GitHub integrated into XCode 4<br />
    83. 83. Strong fork/collaboration model<br />
    84. 84. Community Reaction<br />
    85. 85. #1 on TechMeme<br />8000+ views in 24 hours<br />40+ placements in online/technical publications <br />
    86. 86. @aallan: MS has announced #Azure toolkits for iOS, Android and Windows Phone, bit.ly/jgROPK. The sky might be falling, let me look outside...<br />@kevatron: Windows azure back end. Android, iOS or Windows Phone front end. Nice work Microsoft. t.co/k0tpId5<br />@sarangbk: @WadeWegnerfinally me and my wife could work out some code together :) she is an iOS Dev. Cc: @kPrajakta #azure #awesomesauce<br />
    87. 87.
    88. 88. http://github.com/microsoft-dpe<br />
    89. 89. Version 1.0.1 (Refactor)<br />Version 1.1 (APN)<br />Version 1.2 (ACS)<br />Version 1.0<br />Jul<br />May<br />Jun<br />
    90. 90. Future Directions<br />
    91. 91. Other Windows Azure functionality<br />ServiceBus? Management API? Cache? <br />
    92. 92. Android Version<br />
    93. 93. Case studies and samples<br />
    94. 94.
    95. 95. Municipality<br />Pinpointed photo using Bing Maps<br />Situational<br />Analysis<br />http://www.j-resq.com<br />
    96. 96. Gold Certified Microsoft Partner<br />
    97. 97. Thank You!<br />Simon Guest<br />Director, Mobility Solutions<br />Neudesic, LLC<br />simon.guest@neudesic.com<br />
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×