跳转到主要内容

概述

OneSignal + Google Cloud SQL 集成可以实现从您的 Cloud SQL 数据库自动同步自定义事件到 OneSignal。这允许您基于存储在托管 PostgreSQL 数据库中的用户行为数据触发自动化 Journeys 和个性化消息活动。

要求

  • 访问自定义事件(目前处于测试阶段)
  • 升级账户计划(免费应用不可用)。

谷歌云SQL

  • Cloud SQL for PostgreSQL 实例(建议版本 11 或更高)
  • 对事件表具有读取权限的数据库访问权限
  • 从 OneSignal 到您的 Cloud SQL 实例的网络连接
  • 用于安全连接的 Cloud SQL Auth proxy(推荐)

设置

1

配置 Cloud SQL 数据库访问

为 OneSignal 创建一个对事件表具有只读访问权限的专用用户:
-- Create OneSignal user
CREATE USER onesignal_reader WITH PASSWORD 'strong_unique_password';

-- Grant schema access
GRANT USAGE ON SCHEMA event_data TO onesignal_reader;

-- Grant table access
GRANT SELECT ON ALL TABLES IN SCHEMA event_data TO onesignal_reader;

-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA event_data
GRANT SELECT ON TABLES TO onesignal_reader;
2

配置网络访问

确保 OneSignal 可以连接到您的 Cloud SQL 实例:选项1:授权网络(公有 IP)
  • 在 Google Cloud 控制台中,转到 SQL > 实例
  • 选择您的实例 → 连接网络
  • 将 OneSignal IP 地址添加到授权网络
选项2:私有 IP(推荐)
  • 使用私有 IP 配置您的 Cloud SQL 实例
  • 使用 Cloud SQL Auth Proxy 进行安全连接
  • 确保正确的 VPC 对等连接或防火墙规则
选项3:Cloud SQL Auth Proxy
  • 下载并配置 Cloud SQL Auth Proxy
  • 使用服务帐户身份验证
  • 通过安全代理隧道连接
3

设置 Cloud SQL Auth Proxy(推荐)

为了增强安全性,使用 Cloud SQL Auth Proxy:
# Download Cloud SQL Auth Proxy
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64

# Make executable
chmod +x cloud_sql_proxy

# Run proxy (replace with your instance connection name)
./cloud_sql_proxy -instances=PROJECT:REGION:INSTANCE=tcp:5432
创建具有 Cloud SQL Client 角色的服务帐户:
gcloud iam service-accounts create onesignal-cloudsql
gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:onesignal-cloudsql@PROJECT_ID.iam.gserviceaccount.com" \
    --role="roles/cloudsql.client"
4

在 OneSignal 中添加集成

在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成选择 Google Cloud SQL 并提供:
  • 实例连接名称PROJECT_ID:REGION:INSTANCE_ID
  • 数据库名称:您的事件数据库名称
  • 用户名onesignal_reader
  • 密码:在步骤1中创建的密码
  • SSL 模式require(出于安全考虑推荐)
  • 连接类型:在直接、Auth Proxy 或私有 IP 之间选择
5

配置事件数据查询

定义 SQL 查询以从您的 Cloud SQL 数据库检索事件数据:
SELECT
    event_name,
    user_id,
    created_at as event_timestamp,
    properties as event_payload
FROM event_data.user_events
WHERE created_at >= CURRENT_TIMESTAMP - INTERVAL '1 hour'
ORDER BY created_at DESC
确保您的事件表包含:
  • 事件名称/类型(字符串)
  • 用户标识符(字符串)
  • 事件时间戳(时间戳)
  • 事件属性(JSON/JSONB)
6

测试连接

点击测试连接验证 OneSignal 可以连接到您的 Cloud SQL 实例并成功执行事件查询。

事件数据映射

将您的 映射到 OneSignal 的自定义事件格式:
OneSignal 字段描述必需
nameevent_name事件标识符
external_iduser_id用户标识符
timestampevent_timestamp事件发生时间
propertiesevent_data

高级配置

连接池

为大量事件同步优化数据库连接:
-- Check current connection limits
SELECT * FROM pg_stat_activity WHERE datname = 'your_database';

-- Optimize for OneSignal connections
ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';

查询优化

提高事件查询性能:
-- Create index on timestamp for efficient filtering
CREATE INDEX idx_events_created_at ON user_events(created_at);

-- Create composite index for user-based queries
CREATE INDEX idx_events_user_time ON user_events(user_id, created_at);

-- Analyze query performance
EXPLAIN ANALYZE
SELECT event_name, user_id, created_at, properties
FROM user_events
WHERE created_at >= NOW() - INTERVAL '1 hour';

JSON 数据处理

如果使用 JSONB 存储事件属性,请优化 JSON 查询:
-- Create GIN index for JSON properties
CREATE INDEX idx_events_properties ON user_events USING GIN(properties);

-- Query specific JSON properties
SELECT
    event_name,
    user_id,
    properties->>'purchase_amount' as amount,
    properties->>'product_id' as product
FROM user_events
WHERE properties->>'event_type' = 'purchase';
在 OneSignal 查询事件数据时监控您的 Cloud SQL 实例的性能。考虑为分析工作负载使用读取副本以避免影响生产性能。

常见问题

OneSignal 多久从 Cloud SQL 同步一次事件?

OneSignal 根据您配置的计划同步事件数据,最小间隔为 15 分钟。

我可以使用 Cloud SQL 读取副本进行事件同步吗?

是的,建议使用读取副本来将分析查询与生产数据库工作负载隔离。

如果我的 Cloud SQL 实例暂时不可用会发生什么?

OneSignal 将使用指数退避重试连接。一旦您的实例可再次访问,事件同步将自动恢复。
I