Realtime journey planning
Transporter is a realtime journey planner and timetable pocket guide for iOS.
It’s based on the new Digitransit.fi platform, the same one that the new Helsinki region journey planner Reittiopas.fi uses as backend API.
A true realtime journey planner cannot rely on just static timetable information. Instead, Transporter keeps the displayed routes and timetables up to date with realtime data from the Digitransit API. For example, departure times reflect recent traffic changes in a matter of seconds.
Route results adjust their departure and final arrival time as needed, and a notification alerts the user of not making it in time to catch the next line.
Most transit apps trigger stop reminders either using the GPS position of the iOS device or the scheduled arrival time. In Transporter, reminders get triggered when the vehicle actually nears its target, so at the correct time even for delayed lines. As the server is doing all the work instead of the mobile app, these reminders can be set for arbitrary transit lines.
Intelligent reminders can be set to automatically repeat on chosen weekdays, e.g. only between Monday and Friday. The server continues monitoring traffic for the selected line, and sends push notifications for abnormal delays, disruptions and stop arrivals, depending on reminder settings.
Live Map
Powering most of the map views in Transporter, the Live Map subscribes to a realtime transit data feed using the MQTT messaging protocol.
The map visualizes vehicle movements and traffic conditions using subtle animations. On recent hardware, the map can handle hundreds of location updates per second.
LightMQTT, the custom MQTT client built for Live Map, is available as an open source library. To keep things running smooth all message reading is dispatched to a background queue. This library is very compact and easy to tune to your specific purpose, so take a look!
The LightMQTT library, as well as the rest of Transporter client, are written entirely in Swift 3.
Transporter Server
Transporter Server allows the mobile app to suspend while in background and still stay up to date with realtime transit data. Once awake, the client syncs all reminder and alert settings with the server.
The server keeps a persistent connection to the MQTT realtime feed and can periodically query the Digitransit API for information about line arrivals, delays and disruptions. Stop reminders and other alerts get sent to the mobile clients over APNS as push notifications.
Transporter Server is implemented in Go language and is currently deployed in Heroku in the EU region.
User privacy
User privacy is essential, so Transporter only measures basic app usage with App Analytics which is built into the iOS platform.
No closed source third party libraries (e.g. crash or usage analytics) have been bundled in, to make sure the app only does what it is supposed to do, and nothing else.