如何检索CountryCode/ISO?

Use*_*902 8 android location in-app-purchase in-app-billing kotlin

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

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

  1. 电话经理

如果没有Sim卡,它就无法工作,再次说如果来自美国的用户现在去印度,下面的片段会返回美国而不是印度

var telephonyManager = context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val countryCodeValue = telephonyManager.networkCountryIso
Run Code Online (Sandbox Code Playgroud)
  1. 语言环境

默认情况下,Locale默认返回US或UK,即使它们位于印度,通常用户的Locale默认为英文

 Locale.getDefault().getCountry()
Run Code Online (Sandbox Code Playgroud)
  1. 全球定位系统

我们不希望请求位置权限

  1. 从登录的Google帐户中检索国家/地区详细信息

来自Google的回复 - 他们没有任何专用的API来检索用户的countryCode注意:iOS有一个专用的API告诉CountryCode用户,但Android没有

  1. IP地址

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

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

注意: 即使Netflix在启动期间确定国家/地区,也不会请求位置权限

The*_*Oni 0

没有位置许可就无法获取它,更好的近似是通过 ip 进行定位,但正如您所见,不能保证精确定位