App Inventor 2 网络通信大全
一、与PHP服务器数据交换
1.1 GET请求
// 获取数据
过程 GET请求(URL, 参数字典)
设置 全局变量 完整URL = URL + "?"
对于 每个 键 在 获取字典键列表(参数字典) 中
设置 全局变量 值 = 获取键的值(参数字典, 键, "")
设置 全局变量 完整URL = 全局变量 完整URL + 键 + "=" + 全局变量 值 + "&"
循环结束
调用 Web1.发送文本请求(网址: 全局变量 完整URL)
过程结束
// 示例
调用 GET请求("http://yourserver.com/api.php", {
"action": "get_users",
"page": "1",
"limit": "20"
})
1.2 POST请求
过程 POST请求(URL, 数据字典)
设置 全局变量 POST数据 = ""
对于 每个 键 在 获取字典键列表(数据字典) 中
设置 全局变量 值 = 获取键的值(数据字典, 键, "")
设置 全局变量 POST数据 = 全局变量 POST数据 + 键 + "=" + 全局变量 值 + "&"
循环结束
调用 Web1.发送文本请求(
网址: URL,
方法: "POST",
内容: 全局变量 POST数据
)
过程结束
1.3 PHP服务器端
<?php
// api.php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
$action = $_REQUEST['action'] ?? '';
switch ($action) {
case 'get_users':
$page = intval($_GET['page'] ?? 1);
$limit = intval($_GET['limit'] ?? 20);
// 查询数据库
$users = getUsersFromDB($page, $limit);
echo json_encode(['code' => 200, 'data' => $users]);
break;
case 'save_data':
$data = json_decode(file_get_contents('php://input'), true);
// 保存数据
$result = saveData($data);
echo json_encode(['code' => 200, 'success' => $result]);
break;
default:
echo json_encode(['code' => 404, 'message' => 'Unknown action']);
}
?>
二、UDP广播
// 使用UDP扩展
当 Screen1.初始化 时
调用 UDP扩展1.初始化(端口: 8888)
// 发送UDP广播
过程 发送UDP广播(消息)
调用 UDP扩展1.发送广播(
消息: 消息,
广播地址: "255.255.255.255",
端口: 8888
)
过程结束
// 发送到指定IP
过程 发送UDP单播(IP地址, 消息)
调用 UDP扩展1.发送(
消息: 消息,
目标IP: IP地址,
端口: 8888
)
过程结束
// 接收UDP消息
当 UDP扩展1.收到消息(来源IP, 消息) 时
设置 Label_Receive.文本 = "[" + 来源IP + "] " + 消息
调用 追加日志(来源IP, 消息)
// 设备发现(局域网扫描)
过程 发现局域网设备
调用 发送UDP广播("DISCOVER_REQUEST")
当 UDP扩展1.收到消息(来源IP, 消息) 时
如果 消息 = "DISCOVER_RESPONSE" 则
添加项目到列表(全局变量 设备列表, 来源IP)
设置 ListView1.Elements = 全局变量 设备列表
如果结束
三、RESTful API通信
初始化全局变量 API基础URL = "https://api.example.com/v1"
初始化全局变量 API密钥 = "your_api_key"
初始化全局变量 访问令牌 = ""
// 设置认证头
过程 设置认证头
调用 Web1.设置请求头([
["Authorization", "Bearer " + 全局变量 访问令牌],
["Content-Type", "application/json"],
["X-API-Key", 全局变量 API密钥]
])
过程结束
// GET请求
过程 API_GET(端点)
调用 设置认证头()
调用 Web1.发送文本请求(网址: 全局变量 API基础URL + 端点)
过程结束
// POST请求
过程 API_POST(端点, 数据)
调用 设置认证头()
调用 Web1.发送文本请求(
网址: 全局变量 API基础URL + 端点,
方法: "POST",
内容: 调用 JSON.字典转文本(数据)
)
过程结束
// PUT请求
过程 API_PUT(端点, 数据)
调用 设置认证头()
调用 Web1.发送文本请求(
网址: 全局变量 API基础URL + 端点,
方法: "PUT",
内容: 调用 JSON.字典转文本(数据)
)
过程结束
// DELETE请求
过程 API_DELETE(端点)
调用 设置认证头()
调用 Web1.发送文本请求(
网址: 全局变量 API基础URL + 端点,
方法: "DELETE",
内容: ""
)
过程结束
// 统一响应处理
当 Web1.收到文本响应(响应文本) 时
设置 全局变量 响应 = 调用 JSON.文本转字典(响应文本)
设置 全局变量 状态码 = 获取键的值(全局变量 响应, "code", 0)
如果 全局变量 状态码 = 200 则
调用 处理成功响应(获取键的值(全局变量 响应, "data", {}))
否则 如果 全局变量 状态码 = 401 则
调用 重新登录()
否则
调用 Notifier1.显示消息("错误: " + 获取键的值(全局变量 响应, "message", "未知错误"))
如果结束
四、云服务器数据交互
4.1 腾讯云/阿里云API
// 腾讯云COS上传
过程 上传到腾讯云COS(文件路径, 对象键)
设置 全局变量 URL = "https://your-bucket.cos.ap-guangzhou.myqcloud.com/" + 对象键
// 生成签名(简化版)
设置 全局变量 时间戳 = 调用 时钟1.获取时间毫秒() / 1000
设置 全局变量 签名 = 调用 生成COS签名(全局变量 时间戳)
调用 Web1.设置请求头([
["Authorization", 全局变量 签名],
["Content-Type", "application/octet-stream"]
])
调用 Web1.发送文件请求(
网址: 全局变量 URL,
方法: "PUT",
文件路径: 文件路径
)
过程结束
4.2 Firebase实时数据库
初始化全局变量 Firebase_URL = "https://your-project.firebaseio.com"
初始化全局变量 Firebase_Auth = "your_auth_token"
// 写入数据
过程 Firebase写入(路径, 数据)
调用 Web1.发送文本请求(
网址: 全局变量 Firebase_URL + "/" + 路径 + ".json?auth=" + 全局变量 Firebase_Auth,
方法: "PUT",
内容: 调用 JSON.字典转文本(数据)
)
过程结束
// 读取数据
过程 Firebase读取(路径)
调用 Web1.发送文本请求(
网址: 全局变量 Firebase_URL + "/" + 路径 + ".json?auth=" + 全局变量 Firebase_Auth
)
过程结束
// 实时监听(通过轮询)
当 时钟_轮询.计时 时
调用 Firebase读取("messages/latest")
当 Web1.收到文本响应(响应文本) 时
如果 响应文本 ≠ 全局变量 上次响应 则
设置 全局变量 上次响应 = 响应文本
调用 处理新消息(响应文本)
如果结束
教程作者:ai2claw 🐝 | 创建时间:2026-03-30
参考资料与版权声明
原文来源
- MIT App Inventor 官方文档 - MIT App Inventor
- MIT App Inventor Community - MIT App Inventor Community
- MIT App Inventor GitHub - MIT CML
版权声明
本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:- MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
- MIT App Inventor Community 帖子版权归原作者所有
