将android应用程序限制到特定区域

时间:2014-02-13 10:10:54

标签: android region restriction

我希望我的申请能够在特定地区工作,例如美国。

我们可以限制应用程序从游戏市场的分发,但我发现有一些黑客可以安装这些应用程序。

我必须以某种方式限制在应用程序中的使用。

为此我可以检索用户的GPS位置并使用Google的Geocode API进行首次运行。但是,如果用户前往其他地区呢?

我将不得不使用位置更改侦听器来满足这种情况,但这会耗尽电池。

如果我选择设备的时区,用户可以更改它。

我是否可以做任何其他事情来限制特定地区的申请?

2 个答案:

答案 0 :(得分:2)

您还可以使用TelephonyManager

检查用户注册的网络

您有两种方法可以提供帮助。

  

GetNetworkCountryIso

     

http://developer.android.com/reference/android/telephony/TelephonyManager.html#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。

  

How to get IP address of the device from code?

结合所有这些功能(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中。然后,您将知道是否运行该应用程序。

祝你好运,希望这有所帮助!