Big Mouth Survey application was written for Android using Xamarin and a 100% native API. We have used MvvmCross to speed-up development and maintain high quality code-base.
As Big Mouth Survey application use internet connection to retrieve all of the survey data – we have used Refit library to implement HTTP API integration with ease. To handle connectivity issues we used Polly library – to retry failed requests with grace.
Thanks to this – our customers could use Big Mouth Survey even though they might lose their internet connection for a while.
We had to use native Android features to develop kiosk based application. The strict requirement was that user should not be allowed to exit application and that application should run after device boots or restart after it gets updated.
Therefore, we had to block activities like: expanding status bar, hide or disable hardware buttons – home and back button.
We were able to achieve all of the requirements by writing Android BroadcastReceivers and automated entering Android “screen pin” mode by leveraging device owner privileges.
This was possible due to the fact that we were responsible for preparing devices for target kiosk’s destinations. We had crafted custom bash scripts that allowed us to automate device setup process – which included:
- automated installation of APK into the device,
- setting device settings like brightness,
- automation of granting required application permissions,
- granting application device owner privileges
It was all possible thanks to unlimited possibilities of Xamarin Android – which maps whole “Android Java” into the .NET world.
- Vue as a component progressive framework for API in main components and views via vue-router
- Simple boxes with a lot of data (ex. Dashboard with all overview data)
- Fast and reliable components to show data from API
- Editing on one screen whole profile settings, business settings and location settings
- Setting filters to show data from last X days in one place and populating them into VUE components to reload needed data (sync between components)
- Managing users, devices, BMS questions, delete responses and possibility to login to each business for Super Administrators to provide best experience for businesses and it locations
- Managing surveys and attaching to device
- Location TV dashboard with overall information about specific location from today with option to compare live with previous 30 days by simple showing arrows up/down and percent change value.
- Vue-auth with connection to laravel api authorization
- API calls via AJAX with Laravel cache interface to load data faster than generating everything in every request
- Providing all data needed by every piece of view (results, BMS score etc.)
- Integrated vue-router for fast and live reloading views without refreshing application
- Queues for grouping daily BMS data to serve them much faster than when taking all data from time frame and generating for all of them
- Versioning by vue-version package for having always updated view
- Location TV has ability to reload it CSS/JS if version of app will change automatically by requesting version number in requests.
- Laravel Notifications to provide email / SMS notifications for customer or business owners to have all reports, informations about bad submits etc.
- JWT tokens for keeping API authorization (Bearer)
- Integrations with Sendgrid, Twilio, Sentry (error reporting platform)
- Providing endpoints to get all Survey settings from one endpoint and also sending submits are also built for one-endpoint exchange that location TV or Survey Device is using only two endpoints and Laravel is making whole rest job to provide all necessary actions.
- Every API call is sent through multiple API middlewares to protect as much data as needed to have in controller ability to use data instead of checking them.
- Repositories and Services patterns to have option to cache them and also use many external services