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 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。