真机测试,调用不了后端接口?HarmonyOS 鸿蒙Next

真机测试,调用不了后端接口?HarmonyOS 鸿蒙Next 在应用中使用接口就报错,错误码为230007,说是连不上,我看后端日志也没有出现被使用的记录。我敢确定的是我的api是正确了,电脑和手机也是同一个网络环境,因为在手机浏览器使用发送的api就可以访问到。配置文件也配置了网络请求,后端也配置了跨域访问。为什么在app内就是发送不出去呢?

6 回复

真机可以测试后端服务!

  1. 手机和电脑要使用同一个网络(如wifi);
  2. 服务器允许跨域
  3. 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


是不是因为,我用了平板开的热点分享,然后手机和电脑同时连接。网络环境要用wifi啊?

用实际的IP试试,不要用127.0.0.1

我已经用了实际IP,我怀疑是华为鸿蒙拦截的问题,我的IP和网络绝对没问题,也监听了防火墙端口。

鸿蒙Next真机调试调用后端接口失败可能原因及解决方法:

  1. 网络权限检查:确认config.json中已添加<reqPermissions>:[{name: "ohos.permission.INTERNET"}]

  2. 网络安全配置:若为HTTPS接口,需在config.json配置networkSecurityConfig字段,添加受信证书或配置跳过验证(仅开发环境)

  3. 接口地址协议:鸿蒙Next要求明确使用http://https://,不能省略协议头

  4. 真机网络环境:确保手机与后端服务在同一网络或可互通,测试前先用ping/telnet验证基础连通性

  5. 跨域问题:若为Web服务,后端需配置CORS头部Access-Control-Allow-Origin

根据错误码230007和您描述的情况,这很可能是HarmonyOS Next的网络权限配置问题。以下是排查建议:

  1. 检查config.json中的网络权限配置是否完整:
"abilities": [
  {
    "name": "MainAbility",
    "configChanges": ["..."],
    "permissions": ["..."],
    "metaData": {
      "customizeData": [
        {
          "name": "ohos.permission.INTERNET",
          "value": "true"
        }
      ]
    }
  }
]
  1. 确认应用签名证书已正确配置,未签名的应用可能无法访问网络

  2. 检查是否使用了HTTPS但未配置网络安全策略:

"deviceConfig": {
  "default": {
    "network": {
      "cleartextTraffic": true
    }
  }
}
  1. 尝试在代码中显式声明网络权限:
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(['ohos.permission.INTERNET'])
  1. 使用官方提供的网络调试工具检查实际请求:
import http from '@ohos.net.http';

let httpRequest = http.createHttp();
httpRequest.on('error', (err) => {
  console.error(`Request error: ${JSON.stringify(err)}`);
});

如果仍无法解决,建议检查设备系统日志获取更详细的错误信息。

回到顶部