This is a three (3) part project, please do not bid if you are not capable of eventually completing the entire three parts.
The first part is the most relevant and is to be accomplished ASAP. If successful, the following parts will follow.
The code can be written using Titanium appcelerator or native code, whichever is easier, faster, and cheaper :)
Please place a price bid on each part separately.
Create a client app for Android, iPhone, and Java which normally runs in the background.
The app’s UI consists of:
- Company Logo, always displayed
- Disable (which means it cannot be ‘pinged’ and therefor it cannot be located)
- Hide and run in background
- Short ‘About us’ + version number + Company URL + Company eMail
- Enable/disable autostart
Default settings are: Enabled = True, autostart = ‘On’. Hidden and running in the background.
After first time installation, there will be a one-time message displayed to the user that it was installed and all is fine, plus a set short text message.
Assuming the app is installed on many client phones, the app will run in the background and would allow me to accomplish the following:
For lack of a better word, I will be able to ‘ping’ the phone (I assume using ‘Push notification’) and in response, the app (in the background) will contact me back using GPRS/http and a web-service which I shall provide, and will send me it’s location based on Google’s GeoLocation API using only the “My Location” feature, and NOT necessarily based on pure GPS.
A. Always assume that the phone will either not have a valid GPS signal or not have a GPS at all, but will still return its location since positioning is based on the API’s “My Location” feature. Location is returned using Longitude and Latitude.
B. The general idea is to be able to know the phone’s location at any given moment. Since ‘pinging’ the app too often, every minute or two is not practical, therefore the app will be ‘pinged’ to find out its location approximately every 15 or 20 minutes.
This means that the most important issue is efficient battery use! – Please take that into serious consideration.
If you have a better solution, I am open to suggestions and ideas :)
C. In-order to be able to identify each and every unique phone, the phone will send its own phone number + IMEI as part of the data sent to the web-service.
All data sent should be encrypted. It will be decrypted on the receiving end, on the server running the web-service and the business logic.
If that is not possible or if you have a better solution, I am open to suggestions and ideas :) as long as the user is required for zero to very simple and minimal interaction, beyond app installation.
Improving the identification process of each and every unique phone
This means that once the app is installed, it will request the user for approval and will notify him a few moments later if all was successful, or not.
Here is what will happen in the background: Once the user approves, using GPRS/http the app will call a web-service which I will provide, which will return a unique code. This unique code will be kept on the phone for as long as the app is installed. Every time the phone sends its location, this unique code will also be sent, as an additional param to the web-service.
Adding rich push messages
I will have the option to send messages to the app that’s on the phone using ‘Push notification’. Messages will be sent to selective installed apps and not to all apps, depending on my own criteria and business logic needs.
Messages will not be simple text alone. They must be at a minimum, some sort of rich text, including possible links, and images. Once the message arrives it will behave like an SMS, meaning it will create an audio sound + wait for the user’s interaction.
As far as I’m concerned, sending video, flash, HTML-5 or other interactive media is a possible option, depending on the cost. It is not a must at this point.