2014-02-13 33 views
2

我希望我的应用程序在特定区域(例如美国)工作。将Android应用程序限制在特定区域

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

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

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

我将不得不使用位置更改侦听器来迎合这种情况,但这会消耗电池电量。

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

有什么其他的事情,我可以做,限制应用程序到特定区域?

+0

也许尝试使用移动运营商过滤用户?例如国家或地区代码...... – gilonm

回答

2

您还可以检查用户注册与TelephonyManager

网络你有2种方法,可以是有益的。

GetNetworkCountryIso

http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkCountryIso()

GetSimCountryIso

http://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimCountryIso()


说明


getNetworkCountryIso()会给你一个用户被currenty注册为国家ISO。
即:如果从阿尔巴尼亚(AL)是去旅行到美国(美国),这将返回“US”

getSimCountryIso()会给你的iso为所在国的SIM卡供应商的国家代码。 。
即:如果从阿尔巴尼亚(AL)是去旅行到美国(美国),这将返回 “人”

UPDATE

您可以集成(如果服务器端可用) http://www.whois.net/ip-address-lookup/寻找设备IP地址。你可以像这样得到IP。

How to get IP address of the device from code?

随着所有这些功能(WiFi版,网络提供商,IP,GPS,谷歌播放的区域),可以减少很多您的应用程序的使用限制的组合。另一方面,如果用户使用代理伪造IP,无法开启Wifi/GPS并且没有SIM卡,那么就没有更多的事情要做。


希望它能帮助:)

+0

这真的令人鼓舞,但如果用户没有安装任何SIM卡,该怎么办? –

+0

@SyedMuhammadUmair更新了我的答案,我很抱歉地告诉你,剩下的事情不多。 – axierjhtjz

+0

这将是非常罕见的情况下,但为此,我们可以检查已安装的应用程序检测到任何着名的VPN安装:) –

0

作为延续到我的评论,你可以通过国家代码过滤用户的这些行去。

问题 - 只有一些运营商将电话号码存储在实际的SIM卡上。如果是这样,你就可以使用

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); 
    String mPhoneNumber = tMgr.getLine1Number(); 

为了避免这些谁不存储在SIM卡的实际数量的载波的情况下获得它 - 没有办法来检索数看不是保存在通电话。 所以,我会做什么,只是在第一次运行的应用程序,请求用户输入他的完整电话号码(包括国家代码) - 并将其存储在SharedPrefs中。然后,你会知道是否运行该应用程序。

祝你好运,希望这有助于!

+0

请求用户的号码将允许他假冒他的区域 –

+0

正确的,但有可能他会给出一个假数字并不高。 – gilonm

+0

好吧,使用黑客安装配置限制应用的机会远远低于你的,但我愿意迎合最大的可能性。 –

相关问题