更新记录

1.0.0(2026-03-30)

支持insert/update/delete/select/upsert/listen/unlisten


平台兼容性

supabase-database

Supabase PostgREST(增删查改 / upsert)Realtime(postgres_changes 监听) 的 UTS 插件,支持 Android(Kotlin + OkHttp)iOS(Swift + URLSession),不引入 supabase-kt / SPM,便于云打包集成。

控制台准备

  1. 在 Supabase 控制台为表开启 Replication → Realtime,否则 listen 收不到变更。
  2. 使用 anon key(或带 RLS 策略下可用的 key);update / deletematch 必须非空,避免误删全表。
  3. 服务端 RLS 与 Web/JS 一致:匿名访问需配置相应 policy。

使用

// #ifdef APP-PLUS
import { SupabasePluginImpl } from '@/uni_modules/supabase-database'
// #endif

// onLaunch
// #ifdef APP-PLUS
this.globalData.supabase = new SupabasePluginImpl({
  supabaseUrl: 'https://xxx.supabase.co',
  supabaseAnonKey: '你的 anon key'
})
// #endif
const sb = getApp().globalData.supabase
if (!sb) return

sb.insert('messages', { text: 'hi' }, (res) => { /* res.success, res.data, res.errMsg */ })

sb.update('messages', { id: 'uuid' }, { text: 'bye' }, (res) => { })

sb.delete('messages', { id: 'uuid' }, (res) => { })

sb.select('messages', {
  match: { user_id: 'x' },
  columns: '*',
  limit: 20,
  order: 'created_at',
  ascending: false,
  single: false
}, (res) => { })

sb.upsert('profiles', { id: 'u1', name: 'a' }, 'id', (res) => { })

const lid = sb.listen('messages', (res) => {
  if (res.success && res.data) console.log('变更', res.data)
}, { schema: 'public', event: '*', filter: 'id=eq.xxx' })

sb.unlisten(lid)

API 摘要

方法 说明
insert(table, data, cb) POST,Prefer return=representation
update(table, match, data, cb) PATCH,match 为等值 AND(k=eq.v
delete(table, match, cb) DELETE,同上
select(table, options, cb) GET;single: true 时按单行 Object 解析
upsert(table, data, onConflict, cb) POST + on_conflict + merge
listen(table, cb, options?) Realtime WebSocket,返回 listenerId
unlisten(listenerId) 关闭对应连接

listen 成功时 res.data 为服务端推送的 payload(常见字段含 eventTypeschematablenew/old 等,以项目 Realtime 版本为准)。

依赖

  • Androidutssdk/app-android/config.json 已声明 okhttp3:okhttp:4.12.0
  • iOS:仅系统框架,无额外 CocoaPods。

说明

  • select 多行时 res.data 在运行时为 JSON 数组;若 TypeScript 标注为 UTSJSONObject,可按实际结构断言或从 JSON.parse 结果读取。
  • 与 databaseUpdate 的「集合 + 文档 ID」不同,此处为 表名 + 行级 match,语义对齐 PostgREST。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。