我希望我的申请能够在特定地区工作,例如美国。
我们可以限制应用程序从游戏市场的分发,但我发现有一些黑客可以安装这些应用程序。
我必须以某种方式限制在应用程序中的使用。
为此我可以检索用户的GPS位置并使用Google的Geocode API进行首次运行。但是,如果用户前往其他地区呢?
我将不得不使用位置更改侦听器来满足这种情况,但这会耗尽电池。
如果我选择设备的时区,用户可以更改它。
我是否可以做任何其他事情来限制特定地区的申请?
答案 0 :(得分:2)
您还可以使用TelephonyManager
您有两种方法可以提供帮助。
GetNetworkCountryIso
和
GetSimCountryIso
http://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimCountryIso()
的说明强>
getNetworkCountryIso()
将为您提供当前用户注册的国家/地区的iso。
即:如果您来自阿尔巴尼亚(al)并前往美国(我们),这将返回“我们”
getSimCountryIso()
将为您提供SIM卡提供商国家/地区代码所在的国家/地区代码。
ie:如果您来自阿尔巴尼亚(al)并前往美国(我们) )这将返回“al”
<强>更新强>
您可以集成(如果服务器端可用)http://www.whois.net/ip-address-lookup/以查找设备IP地址。你可以得到这样的IP。
结合所有这些功能(Wifi,网络提供商,IP,GPS,Google Play区域),您可以减少应用的使用限制。另一方面,如果用户提前使用代理来伪造IP,不打开Wifi / GPS并且没有SIM卡,那么就没有更多的事情可做了。
希望它有所帮助:)
答案 1 :(得分:0)
作为评论的延续,您可以按国家/地区代码过滤那些过滤用户。
问题 - 只有部分运营商将电话号码存储在实际的SIM卡上。如果是这样,您将能够使用
获取它 TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
为了避免那些未在SIM卡上存储实际号码的运营商的实例 - 如果号码没有存储在手机上,则无法检索该号码。 所以,我会做的,只是在第一次运行时,请求用户输入他的完整电话号码(包括国家代码) - 并将其存储在SharedPrefs中。然后,您将知道是否运行该应用程序。
祝你好运,希望这有所帮助!