how to get user's current country and protect it from manipulation? - facebook

I'm developing Facebook app on iOS, Android and Web. I want to get user's current country and protect it from manipulation?
This function has to be practical across mobile app and web app. and can't be manipulate by the user(it has to show the real country they are currently in and they can not change it).
How can I do that?
Can I use Facebook App to get user Location? is it the real location or it is just a location the user has written on their profile?

Generally speaking, getting accurate geographic information can be done using a few techniques.
GPS positioning
This is done on the user's device, therefore it can be faked and can't be trusted. For example, the Android official emulator allows the user to input arbitrary data for testing purposes.
GeoIP
Assuming the user can connect to a server through an IP network, he will have an IP address. Then on the server-side, which you control, you can query one of the existing GeoIP databases to get an estimation of the user location from the IP address.
While you are the one looking up the country code, it can be faked for example through the use of a proxy server located in a different country.
Device language/country
It is doable for example on Android via the use of the telephony API:
TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = manager.getNetworkCountryIso();
I'm not sure it is easily modifiable, however this is by no means a portable approach, especially for web applications.
In the later case, the accept-language HTTP request header can be used, since browsers usually advertise the user's favorite language. While not accurate, it can still give an estimation of the user's country in the case the language is unique to a country.
Just as every user-supplied information, it still can't be trusted though.
Bottom line
There are very few guarantees that a user's geographic information is accurate, especially since the advent of country-protected multimedia contents represents an incentive for people to actively find solutions to circumvent such protections.

Related

Can PWA access contacts, gps or use the phone camera?

Can PWA access contacts, gps or use the phone camera?
Is this possible in any system (ios, android) ?
Is there any plan in development to implement any of these features ?
There are some restrictions that cannot be overcome with a PWA:
- you cannot access the contacts list on a phone. - On the other hand, you can take photos and use GPS location.
On whatwebcando.today web site you can have a list of APIs available via browser compared to native apps. If you click on one feature, you can see a sample snippet showing how you can implement it and also details about the browsers support.
UPDATE 30.09.2019
From Chrome v77 there is a new experimental API available: Contact Picker
The Contact Picker API is an on-demand API that allows users to select entries from their contact list and share limited details of the selected entries with a website. It allows users to share only what they want, when they want.
For example, a web-based email client could use the Contact Picker API to select the recipient(s) of an email. A voice-over-IP app could look up which phone number to call.
Hence it might be that the the remaining PWA restrictions will be solved in a near future.
It depends on the device the PWA is running on.
Camera and audio seem to be universally supported. Contacts, on the other hand, seem to be inaccessible regardless of platform.
Other features, such as GPS and geolocation may vary from device to device.
A good way to find out what your browser is capable of (and thus your PWA - it runs in a web browser) is to go to https://whatwebcando.today with the browser you want to support. Try visiting it with an iPhone, Android or other device for a list of enabled features.
This list changes as browser and OS developers increase access to native features, so there's a good change that if it isn't available now, it will be in the future. However, it's important to be aware that some features such as access to the wider file system and hardware configuration are likely to remain sandboxed for security reasons.

Find iPhone devices/device tokens in specific radius :-

I want to find iPhone devices/device tokens within a specific radius from particular location.
For example : Within a 25 K.M. of radius from Sydney,i want to get iPhone devices tokens.
I am working on ASP.NET MVC2 for this.
Let me know,if is there any API for that?
Thanks,
You are only able to get details for devices that you 'know' about. Your app will need to log unique IDs for each device, and your app will need to log known locations for devices. It's then up to you to look up, from your central database, the details of the devices within a certain distance. iPhones can update significant location changes when running in the background but it's up to you to track devices and accept the limitations that that data may not always be correct. eg. If a user falls outside connectivity then you will still have an old location logged for that user.
I'm not aware of a single API that offers this services, if you're coding it then in your app you will need to register devices identifiers and location information to a central server. You will also need to create the lookup to query your data to find devices within a location. I am guessing that you might want to send push notifications, in which case your app will also need to register for notification services too.
There is no way for you to discover devices that don't have your app running and you also do not know who the owner is.

iOS api for real time traffic data (like geoloqi and Waze)

I have been visiting some services api website but can't find what I am looking for. My question is more aimed at what resources to use rather than how exactly it should be done.
My iphone app requirement is to be able to track users that are nearby, are commuting and locate them on map. Additional requirement maybe texting them, call them, have video session with them etc. On a high level, this will convert to something like
get user details based on longitude and latitude
get to know if they are registered users of the service subscribed
Sending message to user/users
Call user using iphone phone api or dedicated app session
Video call
Waze is one of them. While it is open source, there is quite less documentation on how one can use it as backend for real time traffic data.
Then there is this Geoloqi which is paid, but has iOS SDK as well as rich api. However I cannot find sections that are useful to me when I look up to my requirements listed above. What I believe is that there must be many apps already relying on such a useful service. If any of them are open source / tutorials, it would be most useful resource for me for feasibility of geoloqi. Geoloqi also charges users for using their api, so it is also important for me to know what features come at what price .
For the level of data/information your interested in, and the functionality, you should just make your own app, I dont think you need those APIs.
You can find and send the coordinates of the people who are using your app to your server. Then you need to determine the distance between them, to see if they are in the zone of talking, or whatever other functionality you have listed above.
To determine the distance between two people, This answer should be helpful: Calculate distance between 2 GPS coordinates

App with different functionality based on the user's country

I need to develop an application that will behave differently depending on the user's country. Let's say, if the user is in France, some functionality would be available. But, if the user were from India, he would be able to acces a different set of functionality.
If it were only language based restrictions, I could switch functionality using NSLocale class methods. But my functionality is really dependent on the user's country because of licensing and legal reasons.
What are the best practices for dealing with this situation?
For each market where you have specific requirements due to market-specific licensing or legal issues, you can create a separate app in iTunes Connect and make it available for download only in the relevant market. And if you need to, this also allows you to provide a market-specific EULA. It's a big maintenance burden, but it would ensure that only users in a given market can access the app.
Note that in XCode you can fairly easily build, deploy and publish multiple versions of your project built from different configurations (XCode calls this "Targets"), so you could still achieve this in a single codebase by simply adding some preprocessor definitions in the relevant target definitions and putting #ifdef in your code where you want differentiated logic.
A 3rd party app has no access whatsoever to any information about the user of the device or access to the iTunes account. There is no way to know the user's true country. At any given time, the device may not even be associated with any one person. An iPod touch, for example, may have no user logged into any iTunes account. The same device can ultimately be logged into one of several different accounts.
All you have access to is the user's current GPS location (if the user allows your app to access that information) or their current locale.
Basically, there is no way to do what you need. Of course you could prompt the user but obviously there is no way to verify this information.

Request routing on iPhone/iPod without GPS

I want to build an iPhone App that should contact a server that is nearest to its location.
The app itself knows where the servers are located and it should find out which one to choose.
Because I expect many users with an iPod touch I can't use GPS to do this.
On StackOverflow and ServerFault I found this possible solutions:
Use Anycast technology to route users => I can't use this method because the device itself should route the requests and know where they are going.
Get country code and use the Google Directions API to determinate which server is nearest.
Get location by IP (GeoDNS etc.) and do the same (see above).
Method 2 seems good but I have three questions to that:
The API sends me the whole route from point x to point z. I just want to have distance. Is there a way to do that?
Google says they have a usage limit of 2,500 request per day. How do they control that? By IP? I ask this because they say you don't have to use an API key - how do they control then?
Is is a good idea to use Google without having any trouble later? My app itself will be free but I'll have In-App Purchases in it. Does that matter?
I hope somebody has experience in this. Thanks in advance!
Paul
In many cases, iOS will still return a location when requested on devices without GPS. Remember, the first generation iPhone didn't have GPS, but could still do location based services. iOS will use a number of techniques (IP geolocation, skyhook, etc) to find the location of a user, in addition to GPS.
Anyway, to answer some of your questions:
The 2,500 requests per day is per end user, or typically per IP address. So you shouldn't need to worry about getting capped. You should however be aware that you need to display a Google Map to use the API, so if you're using their API and not using a mapView you may have an issue.
I'm not entirely sure why you would need to use the Google directions API in the first place. If you can get lat/lon coordinates of both the user's current location and your servers you can just use iOS's built-in CoreLocation methods to get the distance between them, and decide accordingly ([CLLocation getDistanceFromLocation]).