在Swift iOS或macOS中获取公网IP地址是一个常见的需求。然而,由于iOS和macOS的安全限制,直接获取设备的公网IP地址是不可行的。这是因为公网IP地址是由网络服务提供商分配的,并且设备通常位于一个局域网中,通过路由器与互联网连接。
尽管无法直接获取公网IP地址,但可以通过其他方式来获取设备的公网IP地址。以下是一种常见的方法:
import Foundation
func getPublicIPAddress(completion: @escaping (String?) -> Void) {
let url = URL(string: "https://api.ipify.org?format=json")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let data = data {
if let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
if let ipAddress = json["ip"] as? String {
completion(ipAddress)
return
}
}
}
completion(nil)
}
task.resume()
}
// 调用方法
getPublicIPAddress { (ipAddress) in
if let ipAddress = ipAddress {
print("Public IP Address: \(ipAddress)")
} else {
print("Failed to get public IP address")
}
}
import Foundation
func getPublicIPAddress(completion: @escaping (String?) -> Void) {
let host = Host.current()
host.startMonitoring { (host) in
if let ipAddress = host.address {
completion(ipAddress)
} else {
completion(nil)
}
}
}
// 调用方法
getPublicIPAddress { (ipAddress) in
if let ipAddress = ipAddress {
print("Public IP Address: \(ipAddress)")
} else {
print("Failed to get public IP address")
}
}
需要注意的是,以上方法仅适用于获取设备所在网络的公网IP地址,而不是设备本身的公网IP地址。如果设备位于一个局域网中,那么获取到的IP地址将是局域网的公网IP地址。
希望这些方法能够帮助你在Swift iOS或macOS中获取设备的公网IP地址。如果你需要更多关于云计算、IT互联网领域的知识或腾讯云相关产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/
领取专属 10元无门槛券
手把手带您无忧上云