如何检索CountryCode / ISO?

时间:2018-06-14 07:59:40

标签: android kotlin location in-app-purchase in-app-billing

我们的目的是根据位置过滤内容,而无需从Android设备请求位置权限,

为了满足这一要求,我们尝试了以下选项,但仍然不可靠

  1. 电话管理员
  2. 如果没有Sim卡,它就无法工作,再说如果来自美国的用户现在在印度旅行,下面的片段将返回美国而不是印度

    var telephonyManager = context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
    val countryCodeValue = telephonyManager.networkCountryIso
    
    1. 区域设置
    2. Locale默认返回美国或英国,即使他们在印度,通常用户的语言环境默认为英语

       Locale.getDefault().getCountry()
      
      1. GPS
      2. 我们不希望请求位置权限

        1. 从登录的Google帐户中检索国家/地区详细信息
        2. Google的回复 - 他们没有任何专用API来检索用户的countryCode 注意: iOS有一个专用的API告诉用户的CountryCode,但Android没有

          1. IP地址
          2. 我们试图获取Android设备的IP(来自几个IP融合网站),有以下两种情况

            • 用户连接到WiFi - 我们可以获得countryCode(WIFI IP :64.134.234.17)
            • 用户连接到移动数据 - 我们得到了错误的countryCode 即使我们在美国,也说IP来自日本(MOBILE NETWORK) IP:210.253.218.106)

            注意: 甚至Netflix也会在启动期间确定国家/地区,而无需请求“位置”权限

4 个答案:

答案 0 :(得分:3)

我认为您只有两种可能性......或者请求许可......或者在未经许可的情况下,您必须要求用户插入地址(也只是城市)并通过{{3}来检索国家/地区代码}}

答案 1 :(得分:3)

我同意以上评论。除了GPS位置之外,您无法获得确切的国家/地区。 您可以阅读这篇文章,希望对

有一些了解。

关于您的查询,netflix的使用方式

https://help.netflix.com/en/node/26100

简介

1。禁用任何代理(即他们正在使用ip检查的代理)

2。通过访问whatismyip.com(相同)来检查您当前的IP地址

致谢

答案 2 :(得分:3)

您是否尝试过使用API 例如: http://ip-api.com/json

将通过分析请求IP“(不需要从设备获取IP)”来返回国家代码和许多其他信息。

但是很明显,我们需要假设用户不使用任何代理或vpn

(还有很多其他api,或者您可以自己实现和托管一个api)

答案 3 :(得分:0)

如果没有位置许可,无法获得它,你更好的近似是ip的本地化,但正如你所看到的,无法保证精确定位