As students, we know how challenging it is to navigate to places without GPS routing. Many people don't have access to data due to circumstances, such as finance. When lost, people need a convenient and reliable way to get directions to their destination.
As an international team, we feel it is important to explore the world and connect to the places around us. When in a new region, it is inconvenient to navigate to your destination, especially when lacking resources, such as an internet connection, without incurring heavy expenses. With SMapS, we can connect people to places without the internet.
What It Does
SMapS gets Google Maps directions without an internet connection via internal SMS requests.
How We Built It
The project has two main components: the Google Cloud/Twilio backend written in Node.js and the Android client in Android Studio.
To create the backend, we used a combination of Google Cloud Functions and Twilio Cloud Communications. In Twilio, we set up a phone number to route SMS inputs to our Google Cloud Function via a Webhook. The Function, written in Node.js, then parses the input and passes it into Google Maps Places and Directions APIs. After the web requests are resolved, we encode the directions text and use Twilio again to send the SMS response messages back to the request sender.
To facilitate SMS communication, we used the SMSManager module to send and receive text messages. The client sends an encoded text with GPS information and search queries to the backend, and is eventually passed back the encoded directions. The client then parses the directions and displays them in an easy-to-use UI.
Challenges We Ran Into
We were most challenged by the limitations of SMS messages themselves. At our work station, where reception is poor, sent SMS messages can take up to a minute before being received by the client. This is especially true with messages that are longer than 160 characters since these are broken into multiple messages and sent consecutively. From Twilio, a combination of limited credits, limitations from international texting, and required verification of phone numbers also presented us challenges. Finally, we encountered and solved regex problems in both encoding and parsing messages in order to compress and optimize communications.
Accomplishments That We're Proud Of
Even though we were faced with many challenges, we successfully implemented a functional client-server communication model via SMS. Via efficient Google Cloud API calls in Node.js and successful interception of an Android phone's SMS client, we built a communications network that functions without internet. Although our application is limited to GPS routing, this communications model can be applied ubiquitously where internet is inaccessible. This is especially impactful for people in regions with difficult economic circumstances.
What We Learned
Through this project, we learned how different components of software systems are integrated. From the backend to the client, we overcame difficult challenges to design and implement a functional system. Various technical skills we learned include SMS interception in Android, the Google Cloud SDK and its components such as Google Cloud Functions and Google Maps API, Node.js, and UI/UX elements in Android. We also learned other skills such as agile development, feature delegation, and quick prototyping.
What's Next for SMapS
In the future, we hope to offer a choice of destination from a selection when conducting a general search. Currently, we are only active on Android, but we hope to port to iOS and other platforms. As discussed in the challenges we ran into, sending and receiving SMS messages consumed a lot of time, so we plan to compress the SMS messages to improve runtime. In addition, we need to upgrade our Twilio account so that anyone can text the Twilio number. Finally, we would like to implement even better UX/UI like a loading indicator for better communication and access.