gpsfriends is the ability to allow your friends to see where you are.
It can be implemented this way:
- Every user has a private and public key pair
- Get the public key of your friend
- Sign your location using your private key
- Encrypt your location with a AES using a random key
- Encrypt the random key using the friend's public key
- Upload the encrypted location + encrypted random key to a webserver
- Do the last 4 steps at a time interval (e.g. every hour)
To see your friends:
- Every hour download the encrypted locations and random keys from a webserver
- Decrypt the locations using your private key
- Display them on a map
- You decide who get to know where you are
- No other (not even the administrator of the webserver) will be able to tell
The update algorithm can be made smarter: Do not update the location if it is unchanged. Update faster if the position ac-/decelerates fast (e.g. you go into a car).
The upload can be done using SMS messages. If the SMS service is cheap (e.g. flat rate) it may better just to send the SMS directly to your friends.
Both XMPP and IMPS chat services have a gps-location-extension that could possibly be used. It is not clear if it will give the privacy (ie. can non-friends see where you are if they use a network sniffer or has root access to the third party?).
Check out [http://imity.com Imity], which uses Bluetooth profiles to determine and track people in your proximity.
Also see [http://plazes.com Plazes] for social, location tracking.
[http://www.ietf.org/html.charters/geopriv-charter.html GeoPriv] is a W3C charter for specifying a standard of sharing and protecting location information between people.
The biggest point is, don't invent a brand-new system that requires users to join yet another service. This will result in an "empty nest" - instead, tie into an existing service/standard.