限制安卓应用程序只能在特定区域使用

3

我希望我的应用程序能够在特定的地区(例如美国)运行。

我们可以限制在Play市场上分发应用程序,但我发现有一些方法可以安装这些应用程序。

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

为此,我可以获取用户的GPS位置,并在第一次运行时使用Google的Geocode API。但是,如果用户前往其他地区怎么办?

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

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

是否还有其他可能的方法来限制应用程序只在特定地区运行?


也许尝试使用移动运营商进行用户筛选?例如国家代码或类似的内容... - gilonm
2个回答

3
您也可以使用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)并前往美国(us),则此函数将返回“us”。 getSimCountryIso()将为您提供SIM卡所属国家/地区的ISO代码。例如:如果您来自阿尔巴尼亚(al)并前往美国(us),则此函数将返回“al”。 更新 如果服务器端可用,您可以集成http://www.whois.net/ip-address-lookup/以查找设备IP地址。您可以像这样获取IP。

如何通过代码获取设备的IP地址?

通过所有这些函数(Wifi、网络提供商、IP、GPS、Google Play区域)的组合,您可以大大减少应用程序使用限制。另一方面,如果用户足够高级,并使用代理伪造IP,不打开Wifi / GPS并且没有SIM卡,则没有更多要做的了。
希望对您有所帮助 :)

这确实令人鼓舞,但如果用户没有安装任何SIM卡怎么办? - Syed Muhammad Umair
@SyedMuhammadUmair 更新了我的答案,很抱歉告诉你已经没有太多事情要做了。 - reixa
这将是非常罕见的情况,但为此我们可以检查已安装的应用程序以检测是否安装了任何知名的VPN :) - Syed Muhammad Umair
祝好运 @SyedMuhammadUmair ;) - reixa

0
作为对我的评论的延续,你可以按国家代码过滤用户。
问题在于 - 只有一些运营商将电话号码存储在实际的SIM卡中。如果是这样,您就可以使用...获取它。
 TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
    String mPhoneNumber = tMgr.getLine1Number();

为了避免那些不在 SIM 卡上存储实际号码的运营商,因为它未存储在手机上,所以无法检索该号码。因此,我会在应用程序第一次运行时要求用户输入完整的电话号码(包括国家代码),并将其存储在 SharedPrefs 中。然后,您将知道是否运行该应用程序。
祝好运,希望这有所帮助!

请求用户提供他的号码将允许他伪造他的地区。 - Syed Muhammad Umair
正确,但他提供假号码的可能性不高。 - gilonm
好的,使用黑客手段安装分发限制应用程序的机会比您的机会要低得多,但我愿意尽可能地满足各种可能性。 - Syed Muhammad Umair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接