- 概述
- 方案一:AI2Server(推荐新手)
- 方案二:LeanDB(推荐)
- 方案三:Python Flask自建
- 方案四:Supabase(已有文档)
- 方案五:CloudBase云开发
- 安全性考虑
- 常见问题
- 总结
概述
App Inventor的TinyWebDB需要一个后台服务。默认服务有限制(速率、数据量),生产环境需要自建后台。
已有文档:other/tinywebdb.md 介绍了TinyWebDB组件基本用法。本文聚焦自建后台的完整方案。
| 方案 | 难度 | 免费 | 稳定性 |
|---|---|---|---|
| 默认AI2服务 | ⭐ | ✅ | 低(有限制) |
| AI2Server(Gitee) | ⭐⭐ | ✅ | 中 |
| LeanDB | ⭐⭐ | ✅ | 高 |
| Python Flask | ⭐⭐⭐ | ✅ | 高 |
| Node.js | ⭐⭐⭐ | ✅ | 高 |
| 云函数 | ⭐⭐ | ✅ | 高 |
方案一:AI2Server(推荐新手)
Gitee上的AI2Server 是专为App Inventor设计的开源后台。
特点
- 一键部署
- 支持批量用户管理
- 提供API接口
- 支持数据存储和检索
部署步骤
- 访问 https://gitee.com/fsyz/Ai2Server
- 下载源码
- 部署到支持PHP的主机或Docker
App Inventor配置
当 Screen1.初始化
设 TinyWebDB1.服务地址 = "https://your-server.com/ai2server/"
批量添加用户
参考 https://gitee.com/fsyz/README/blob/master/AI2server/BatchAddUser.md
方案二:LeanDB(推荐)
LeanDB 是专为App Inventor设计的云端数据库服务。
特点
- 免费使用
- 无需部署
- RESTful API
- 支持数据查询
配置步骤
- 访问 https://kevinkun.cn/leandb/(新地址:https://wangsk789.github.io/leandb/)
- 注册账号,创建应用
- 获取API地址
- 在App Inventor中配置TinyWebDB的ServiceURL
当 Screen1.初始化
设 TinyWebDB1.服务地址 = "https://leandb-api.example.com/api/your-app-id/"
方案三:Python Flask自建
完全控制的后台方案。
安装
pip install flask
服务端代码
# tinywebdb_server.py
from flask import Flask, request, jsonify
import json, os
app = Flask(__name__)
DATA_FILE = 'data.json'
def load_data():
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
return {}
def save_data(data):
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
@app.route('/getvalue', methods=['GET'])
def get_value():
tag = request.args.get('tag', '')
data = load_data()
if tag in data:
return jsonify([tag, data[tag]])
return jsonify([tag, "NO_DATA"])
@app.route('/storevalue', methods=['POST'])
def store_value():
data = load_data()
body = request.json
tag = body.get('tag', '')
value = body.get('value', '')
data[tag] = value
save_data(data)
return jsonify({"status": "OK", "tag": tag})
@app.route('/deletevalue', methods=['POST'])
def delete_value():
data = load_data()
body = request.json
tag = body.get('tag', '')
if tag in data:
del data[tag]
save_data(data)
return jsonify({"status": "OK"})
@app.route('/search', methods=['GET'])
def search():
keyword = request.args.get('keyword', '')
data = load_data()
results = []
for tag, value in data.items():
if keyword in tag:
results.append([tag, value])
return jsonify(results)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
部署到云服务器
# 使用nohup后台运行
nohup python3 tinywebdb_server.py &
# 或使用gunicorn(生产环境)
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 tinywebdb_server:app
App Inventor配置
设 TinyWebDB1.服务地址 = "http://your-server-ip:5000/"
方案四:Supabase(已有文档)
extensions/Supabase.md 已有详细文档,此处仅提及。
方案五:CloudBase云开发
extensions/CloudBase.md 已有腾讯云CloudBase文档。
安全性考虑
API密钥验证
# 在Flask中添加验证
API_KEY = "your-secret-key"
@app.before_request
def check_auth():
key = request.headers.get('X-API-Key', '')
if key != API_KEY:
return jsonify({"error": "Unauthorized"}), 401
App Inventor端:
设 TinyWebDB1.请求头 = ["X-API-Key: your-secret-key"]
HTTPS
生产环境必须使用HTTPS。可以使用:
- Let’s Encrypt(免费SSL证书)
- Cloudflare(免费HTTPS代理)
- Nginx反向代理+SSL
常见问题
Q1: TinyWebDB返回”NO_DATA”?
- 检查ServiceURL是否正确(末尾要有
/) - 确认tag是否正确
- 检查服务端数据文件是否存在
Q2: 自建服务外网无法访问?
- 检查防火墙是否开放端口
- 云服务器需要在安全组中开放端口
- 检查服务是否正在运行
Q3: 数据量大了性能下降?
JSON文件方案不适合大数据量。解决方案:
- 改用SQLite/MySQL数据库
- 使用Redis缓存
- 部署到性能更好的服务器
总结
| 方案 | 推荐度 | 适合 |
|---|---|---|
| AI2Server | ⭐⭐⭐ | 快速上手 |
| LeanDB | ⭐⭐⭐⭐ | 生产使用 |
| Flask自建 | ⭐⭐⭐⭐ | 完全控制 |
| Supabase | ⭐⭐⭐⭐⭐ | 专业项目 |
版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。
扫码添加客服咨询