uniapp获取设备的IP地址(已踩坑,开箱即用)
业务背景:我司出现了一个同一个APP安装包需要在不同的设备跳转到不同的首页,我也是头一次遇到,于是只能通过设备的IP地址去判断了 ,当我踩坑完毕后发现挺简单的。
下面三个方法可以获取到无线网、以太网、以及国内公网的IP地址,任君选择亲测有效
限制:只限于APP环境包括平板并且设备是安卓,IOS就要另行想办法了(Objective-C代码)
步骤一:首先去项目的源码配置里面添加如下代码(在manifest.json
的app-plus
下配置网络权限)
"permissions": {
"network": {
"description": "用于获取网络状态和IP地址"
}
},
我仍了两个地方,一个是在快应用上面和app里面我都写了,目前测试多写一个并不影响,如果你们测试了可以保留一个欢迎在评论区留言
步骤二:复制下面对应的函数就可以调用了(这个是无线网也就是WIFI模式的)
function getWifiIp() {const MainActivity = plus.android.runtimeMainActivity();const Context = plus.android.importClass('android.content.Context');plus.android.importClass('android.net.wifi.WifiManager');plus.android.importClass('android.net.wifi.WifiInfo');const wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE);const wifiInfo = wifiManager.getConnectionInfo();const ipAddress = wifiInfo.getIpAddress();// 将Android的int型IP转换为点分十进制格式const wifiIp = ((ipAddress & 0xff) + '.' + ((ipAddress >> 8) & 0xff) + '.' + ((ipAddress >> 16) & 0xff) + '.' + ((ipAddress >> 24) & 0xff));return wifiIp;
}
// 调用示例
const wifiIp = getWifiIp();
console.log('Wi-Fi IP:', wifiIp);
以上就可以获取到 下面的IP地址了
方法二:这个是拿公网IP地址的还会返回你的地区位置
uni.request({url: 'http://myip.ipip.net', // 国内可访问的IP查询服务success: (res) => {const publicIp = res.data.trim(); // 返回的IP可能是纯文本,需trim()处理console.log('公网IP:', publicIp);},fail: (err) => {console.error('获取公网IP失败:', err);}
});
方法三:这个是拿以太网的也就是网线
function getLanIp() {const MainActivity = plus.android.runtimeMainActivity();const Context = plus.android.importClass('android.content.Context');plus.android.importClass('android.net.ConnectivityManager');const lanManager = MainActivity.getSystemService(Context.CONNECTIVITY_SERVICE);const lanInfo = lanManager.getLinkProperties(lanManager.getActiveNetwork());const lanIpAddresses = plus.android.invoke(lanInfo, 'getLinkAddresses');// 解析LinkAddresses对象(可能包含多个IP,需根据需求筛选)const lanIpStr = lanIpAddresses.toString();const lanIpArray = lanIpStr.split(',');const lanIp = lanIpArray[0].split('/')[0]; // 取第一个IP的地址部分return lanIp;
}// 调用示例
const lanIp = getLanIp();
console.log('有线网络IP:', lanIp);
网络有很多坑
1.网络上说有用https://api.ipify.org?format=json这个地址、http://pv.sohu.com/cityjson?ie=utf-8 还有搜狐这个我都没返回成功,还有就是一直返回128.0.0的
2.https://api.ipify.org?format=json这个地址可能是要翻墙才能