真机测试,调用不了后端接口?HarmonyOS 鸿蒙Next
真机测试,调用不了后端接口?HarmonyOS 鸿蒙Next 在应用中使用接口就报错,错误码为230007,说是连不上,我看后端日志也没有出现被使用的记录。我敢确定的是我的api是正确了,电脑和手机也是同一个网络环境,因为在手机浏览器使用发送的api就可以访问到。配置文件也配置了网络请求,后端也配置了跨域访问。为什么在app内就是发送不出去呢?
真机可以测试后端服务!
- 手机和电脑要使用同一个网络(如wifi);
- 服务器允许跨域
- url使用IP地址或者用nginx配置一个域名
下面是我的登录示例(后端go):
(1)跨域:
// 添加 CORS 中间件
r.Use(func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(204)
return
}
c.Next()
})
(2)// API 路由组
api := r.Group("/api")
{
// 登录接口
api.POST("/login", controllers.Login)
// ...
}
(3)LoginRequest 登录请求
type LoginRequest struct {
Username string `json:"username" binding:"required"`
Password string `json:"password" binding:"required"`
}
// Login 登录处理函数
func Login(c *gin.Context) {
var loginReq LoginRequest
if err := c.ShouldBindJSON(&loginReq); err != nil {
utils.Fail(c, 400, "请求参数错误")
return
}
// ...
}
(4)手机端请求
async login(username: string, password: string): Promise<LoginResponse> {
try {
const response: AxiosResponse =
await axios.post<string, AxiosResponse<string>, User>(
'http://192.168.3.219:8080/api/login',
{
username: username,
password: password
}
);
return response.data as LoginResponse;
} catch (error) {
return {
code: -1,
message: `登录失败: ${error.message}`
};
}
}
更多关于真机测试,调用不了后端接口?HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
用实际的IP试试,不要用127.0.0.1
我已经用了实际IP,我怀疑是华为鸿蒙拦截的问题,我的IP和网络绝对没问题,也监听了防火墙端口。
鸿蒙Next真机调试调用后端接口失败可能原因及解决方法:
-
网络权限检查:确认config.json中已添加
<reqPermissions>:[{name: "ohos.permission.INTERNET"}]
-
网络安全配置:若为HTTPS接口,需在config.json配置networkSecurityConfig字段,添加受信证书或配置跳过验证(仅开发环境)
-
接口地址协议:鸿蒙Next要求明确使用
http://
或https://
,不能省略协议头 -
真机网络环境:确保手机与后端服务在同一网络或可互通,测试前先用ping/telnet验证基础连通性
-
跨域问题:若为Web服务,后端需配置CORS头部
Access-Control-Allow-Origin
,
根据错误码230007和您描述的情况,这很可能是HarmonyOS Next的网络权限配置问题。以下是排查建议:
- 检查config.json中的网络权限配置是否完整:
"abilities": [
{
"name": "MainAbility",
"configChanges": ["..."],
"permissions": ["..."],
"metaData": {
"customizeData": [
{
"name": "ohos.permission.INTERNET",
"value": "true"
}
]
}
}
]
-
确认应用签名证书已正确配置,未签名的应用可能无法访问网络
-
检查是否使用了HTTPS但未配置网络安全策略:
"deviceConfig": {
"default": {
"network": {
"cleartextTraffic": true
}
}
}
- 尝试在代码中显式声明网络权限:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(['ohos.permission.INTERNET'])
- 使用官方提供的网络调试工具检查实际请求:
import http from '@ohos.net.http';
let httpRequest = http.createHttp();
httpRequest.on('error', (err) => {
console.error(`Request error: ${JSON.stringify(err)}`);
});
如果仍无法解决,建议检查设备系统日志获取更详细的错误信息。