IOS 限制对某些国家或 WLAN 的应用程序的访问
Posted
技术标签:
【中文标题】IOS 限制对某些国家或 WLAN 的应用程序的访问【英文标题】:IOS restrict access to App for certain Country or WLAN 【发布时间】:2020-07-08 10:05:18 【问题描述】:我想开发一款仅在德国提供的应用。 如果用户下载该应用程序并离开德国,它最好不再工作。这可能吗? 由于我只想知道用户当前所在的国家/地区,因此我不想询问整个位置。
此外,我想将某些内容限制在特定的 WLAN 网络中。我该怎么做?
【问题讨论】:
将应用限制在某个国家的应用商店就够了吗? 我猜不是因为如果用户离开他下载它的国家/地区,该应用程序仍将运行。对吗? 是的,它会的。我会检查我还能找到什么 【参考方案1】:很遗憾,地标级别没有内置地理坐标。
您可以使用 region monitoring,但这需要将德国的边界重新构建为(最多 20 个)CLCircularRegion
对象。之后,您只需让核心位置框架通知您区域是否发生变化。
缺点是您只能使用 20 个圆形区域来覆盖德国区域,因此您会损失一点精度。
第二种解决方案是使用基于计时器的检查:
获取当前用户位置 使用CLGeocoder.reverseGeocodeLocation
,它将提供CLPlacemark.country
检查我们是否还在德国
【讨论】:
【参考方案2】:你可以使用:
NSString *countryCode = [[NSLocale currentLocale] objectForKey: NSLocaleCountryCode];
获取用户的国家代码。德国的国家代码是 DE。
然后您可以检查用户的国家/地区代码,如果不是 DE,则通过显示应用已锁定或类似内容的屏幕来锁定应用。
对于您问题的 WLAN 部分,您可以获得用户连接到的网络的名称:
How to get available all wifi network name Listing in ios using swift此类将仅显示您连接的 wifi 网络名称 -
import UIKit import SystemConfiguration.CaptiveNetwork class ViewController: UIViewController @IBOutlet weak var label: UILabel! override func viewDidLoad() super.viewDidLoad() let ssid = self.getAllWiFiNameList() print("SSID: \(ssid)") func getAllWiFiNameList() -> String? var ssid: String? if let interfaces = CNCopySupportedInterfaces() as NSArray? for interface in interfaces if let interfaceInfo = CNCopyCurrentNetworkInfo(interface as! CFString) as NSDictionary? ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] as? String break return ssid
您可以检查该类是否不等于预设的类以阻止某些功能。
【讨论】:
感谢解答,但是NSLocale并没有返回iphone当前所在的国家,它只返回语言设置的国家 @Neli 是的,let locale = Locale.current
怎么样?然后使用locale
?
这也只是设置语言代码,不是当前位置以上是关于IOS 限制对某些国家或 WLAN 的应用程序的访问的主要内容,如果未能解决你的问题,请参考以下文章