Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building Tillless with RubyMotion

M@
April 15, 2014

Building Tillless with RubyMotion

Tillless lets customers use their own smartphone to scan and buy goods in store. It’s Retail. Without the Till. And it's written entirely in RubyMotion. In this presentation, Matthew runs thru the rationale, architecture and practical details of using RubyMotion in a non-trivial, consumer-scale mobile app.

M@

April 15, 2014
Tweet

More Decks by M@

Other Decks in Technology

Transcript

  1. lets customers use their smartphone to scan and buy goods

    in store. ! It’s Retail. Without the Till. www.tillless.com
  2. 6 Sarah starts the Tillless Shopper App on her phone

    which automatically locates itself at Mary’s Store. Mary can directly scan items using their barcodes, or pick from the products in the store’s product catalog. Sarah is able to easily scan products via barcode or QR- code using her phone’s built-in camera. The process is quick and easy, and requires no extra hardware or software other than the Tillless Shopper app. Sarah adds the products that she wishes to purchase to her shopping bag. She can see the running total of her shopping bag as she shops. To check out, Sarah taps ‘Pay’ and enters her payment PIN. The payment PIN locks her cards to her device, and without the payment PIN and this specific device, no- one is able to use her payment details. The Tillless back-end processes the shopping bag and presents Sarah with the authorisation screen. Tapping ‘pay’ here completes the purchase, charging Sarah’s credit card. Once payment has been processed, Sarah is presented with a receipt. This receipt can be shown to an in-store representative with the Tillless Merchant app for validation. Mary sees that Sarah is ready to validate her payment. Mary can also scan Sarah’s QR-code receipt directly from the Tillless Merchant app on her smartphone to quickly jump to purchase validation. In a busy store, this process can be done by a gatekeeper who simply scans receipts and validates the shopper’s items. Once the gatekeeper reviews the items in the Shopper’s bag, tapping ‘validate’ completes the purchase process. The gatekeeper is then free to move on to help other customers. As soon as Sarah’s purchase is validated, the Tillless Shopper app lets her know with a validated stamp, and she is free to leave the store with her items. Tillless sends Sarah an email receipt with details of the purchase. Simple, Fast and Secure Shopping ! Shopping in a Tillless-enabled store is super fast and super simple. Shoppers can scan a barcode or pick items from the Store’s product catalog and pay with their credit card using their phone. ! Tillless uses bank-grade security to handle the Shopper’s payment PIN and all card details are stored securely with the payment gateway (not within the app). ! Tillless lets shoppers avoid the queues and bottlenecks at the register, speeding up and improving their experience. ! Shopping with Tillless. It’s simple, fast and secure. for Shoppers
  3. 7 Increased Sales and Satisfaction ! With Tillless running in

    an event or retail store, Merchants can reduce the likelihood that customers walk away unsatisfied and without a purchase, because of long lines and queuing. ! Customer satisfaction, particularly in high-traffic retail environments like concerts and large events, is dramatically improved when customers can purchase items directly with their own phone without having to queue to pay. ! Selling with Tillless. Satisfied customers mean increased sales. Once the gatekeeper reviews the items in the Shopper’s bag, tapping ‘validate’ completes the purchase process. The gatekeeper is then free to move on to help other customers. As soon as Sarah’s purchase is validated, the Tillless Shopper app lets her know with a validated stamp, and she is free to leave the store with her items. Mary can configure the product catalog directly from the Tillless Merchant app. The product catalog shows the list of products available for purchase in the current store. She can edit the product RRP, description and UPC, as well as set up an image for the product. Mary accesses her store configuration from the Tillless Merchant app. From here, she can edit store details such as the name of the store and its location, as well as the default currency and tax rates. Mary’s Store is one of a number of stores run by Hanno Retailers. Once payment has been processed, Sarah is presented with a receipt. This receipt can be shown to an in-store representative with the Tillless Merchant app for validation. Mary scans Sarah’s QR-code receipt directly from the Tillless Merchant app on her smartphone to quickly jump to purchase validation. In a busy store, this process can be done by a gatekeeper who simply scans receipts and validates the shopper’s items. for Merchants
  4. Tillless API Resources Shell Looks after the front-end’s view of

    the domain model and handles interactions with the back end via RESTful API Provides a unified “app shell” for each of the front-end apps Tillless Shopper Tillless Merchant Tillless Payments
  5. https://github.com/rubymotion/BubbleWrap Positives: 1. Pretty hard to do without this now

    as there are so many convenience categories that I’ve forgotten what’s in BW and what’s not Gotchas: 1. Keep clear of BubbleWrap::HTTP and stick with AFNetworking. BW::HTTP will be deprecated very soon
  6. https://github.com/clearsightstudio/ProMotion/ Positives: 1. Support from GitHub maintainers is absolutely fantastic

    2. You need much less code for boilerplate type screens Gotchas: 1. Watch out for animation completion as ProMotion currently does not allow for a completion handler following an animation 2. There’s an outstanding question in my mind as to whether:
 s/viewWillAppear/will_appear/g
 etc is really worth it
  7. https://github.com/clayallsopp/formotion Positives: 1. Really, really easy to make forms and

    table screens. I mean, really easy. 2. Can be relatively easily extended to support new row types. Gotchas: 1. Does the simple stuff really well, but can be problematic for more complex things.
  8. http://zbar.sourceforge.net/iphone/ Positives: 1.Works for most 1d and 2d barcode types

    ! Gotchas: 1.Not actively supported, at least, not to the extent that other pods are 2.Can be tricky to customise without resorting to hacking the Objective-C 3.Underlying scanning is very complicated and mostly written in C - not for the faint hearted
  9. https://github.com/card-io Positives: 1.This is about as close to magic as

    you will find. 2.Free. 3.Did I mention it’s free? ! Gotchas: 1.None
  10. https://github.com/abury/ABPadLockScreen Positives: 1.Excellent! ! Gotchas: 1.They recently changed the delegate

    protocol slightly which caused my app to crash until I worked out what had changed.
  11. There is a RubyGem or a CocoaPod for just about

    anything you will ever need to do* *And in many cases, there are multiple gems or pods for the same task. Often, the most difficult thing to worry about is which one to pick.
  12. You can’t avoid learning Objective-C and the Cocoa Frameworks* *Notwithstanding

    my antipathy to Objective-C, the Cocoa frameworks in iOS are nothing short of amazing so don’t avoid them, embrace them willingly. s/ / /g
  13. We spent a lot of time early on trying to

    get unified model code between the front- and back-ends. Ultimately, it failed because there’s just enough difference in RubyMotion- flavoured Ruby to make things tricky* *This is almost certainly a byproduct of my incompetence than anything inherent in RubyMotion, Ruby, Rails or anything else in this stack, and I’d love to explore this idea more in the future.
  14. Much To Do About Nothing* 1. Refactor model classes to

    make use of CDQ 2. Improve table paging and infinite scrolling 3. Generate purchase receipts for PassBook 4. Add support for push notifications 5. Design refresh 6. Android version of Shopper, Merchant & Payments apps 7. Add (many!) more unit and integration tests 8. Improve functional tests (Frank?, Other options?) *For very large values of nothing