OneSignal 是一个领先的客户互动平台,提供推送通知、电子邮件、短信和应用内消息等功能。将 Adapty 与 OneSignal 集成,可让您在一处访问所有订阅事件,从而根据这些事件触发自动化通信。
通过 Adapty,您可以跨多个商店追踪订阅事件、分析用户行为,并将这些数据用于更精准的通信。此集成帮助您在 OneSignal 看板中监控订阅事件,并将其映射到您的获客活动。
Adapty 会根据订阅事件更新 OneSignal 标签,让您以极少的配置即可发送个性化推送通知。
集成特性
| 集成特性 | 说明 |
|---|
| 更新频率 | 实时更新 |
| 数据方向 | 单向:从 Adapty 到 OneSignal 服务器 |
| Adapty 集成点 | - 移动应用代码中的 OneSignal 和 Adapty SDK
- Adapty 服务器
|
设置 OneSignal 集成
要设置集成:
-
在 Adapty 看板中打开 Integrations → OneSignal。
-
启用集成开关。
-
输入您的 OneSignal App ID。
要设置与 OneSignal 的集成,请前往 Adapty 看板中的 Integrations -> OneSignal,开启开关并配置集成凭据。
获取您的 OneSignal App ID
在您的 OneSignal 看板中找到 OneSignal App ID:
-
导航至 Settings → Keys & IDs。
-
复制您的 OneSignal App ID 并将其粘贴到 Adapty 看板中的 App ID 字段。
您可以在以下文档中找到有关 OneSignal ID 的更多信息。
配置事件
Adapty 允许您向 OneSignal 发送三组事件。在 Adapty 看板中开启您需要的事件。您可以在此处查看所有可用事件的完整列表及详细说明。
Adapty 通过服务器到服务器集成将订阅事件发送到 OneSignal,让您能够在 OneSignal 中追踪所有与订阅相关的活动。
从 2023 年 4 月 17 日起,OneSignal 的免费套餐不再支持此集成。该功能仅适用于 Growth、Professional 及更高级别的套餐。详情请参阅 OneSignal 定价。
此集成会将各种属性作为标签更新并分配给您的 Adapty 用户,然后将其发送到 OneSignal。请参阅以下标签列表,找到最适合您需求的标签。
OneSignal 对标签数量有限制。这包括 Adapty 生成的标签和 OneSignal 中已有的所有标签。超出限制可能会在发送事件时导致错误。
| 标签 | 类型 | 说明 |
|---|
adapty_customer_user_id | String | 用户在您应用中的唯一标识符。必须在您的系统、Adapty 和 OneSignal 中保持一致。 |
adapty_profile_id | String | Adapty 用户画像 ID,可在您的 Adapty 看板中找到。 |
environment | String | Sandbox 或 Production,表示用户当前所处的环境。 |
store | String | 购买产品的商店。选项:app_store、play_store、stripe,或您的自定义商店名称。 |
vendor_product_id | String | 应用商店中的产品 ID(例如 org.locals.12345)。 |
subscription_expires_at | String | 最新订阅的到期日期(YYYY-MM-DDTHH:MM:SS+0000,例如 2023-02-10T17:22:03.000000+0000)。 |
last_event_type | String | 来自 Adapty 事件列表的最新事件类型。 请注意以下情况: - 对于 Subscription expired 事件,Adapty 将 last_event_type 属性发送为 subscription_cancelled。 - 对于 Trial renew canceled,发送为 auto_renew_off - 对于 Subscription renew canceled,发送为 auto_renew_off_subscription |
purchase_date | String | 最近一次交易日期(YYYY-MM-DDTHH:MM:SS+0000,例如 2023-02-10T17:22:03.000000+0000)。 |
active_subscription | String | 如果用户有有效订阅则为 true,订阅已到期则为 false。 |
period_type | String | 表示购买或续订的最新周期类型。可能的值:trial 表示试用期,normal 表示其他所有情况。 |
所有浮点值均四舍五入为整数,字符串保持不变。
除了预定义标签之外,您还可以将自定义属性作为标签发送,从而在包含的数据方面获得更大的灵活性。这对于追踪与您的产品或服务相关的特定详细信息非常有用。
如果在集成页面上启用了 Send user attributes 复选框,自定义用户属性将自动发送到 OneSignal。未勾选时,Adapty 恰好发送 10 个标签;勾选后,可以发送超过 10 个标签,从而实现更丰富的数据捕获。
SDK 配置
将 OneSignal 与 Adapty 集成有两种方式:
- 旧版(v5 之前): 使用
playerId(在 OneSignal SDK v5 中已弃用)。
- 当前版本(v5+): 使用
subscriptionId。
请确保将 playerId(适用于 v5 之前的 OneSignal SDK)或 subscriptionId(适用于 OneSignal SDK v5+)发送给 Adapty。若不发送,OneSignal 标签将无法更新,集成也无法正常运行。
// SubscriptionID
OneSignal.Notifications.requestPermission({ accepted in
Task {
try await Adapty.setIntegrationIdentifier(
key: "one_signal_subscription_id",
value: OneSignal.User.pushSubscription.id
)
}
}, fallbackToSettings: true)
// SubscriptionID
val oneSignalSubscriptionObserver = object: IPushSubscriptionObserver {
override fun onPushSubscriptionChange(state: PushSubscriptionChangedState) {
Adapty.setIntegrationIdentifier("one_signal_subscription_id", state.current.id) { error ->
if (error != null) {
// handle the error
}
}
}
}
// SubscriptionID
IPushSubscriptionObserver oneSignalSubscriptionObserver = state -> {
Adapty.setIntegrationIdentifier("one_signal_subscription_id", state.getCurrent().getId(), error -> {
if (error != null) {
// handle the error
}
});
};
// 1. Since OneSignal.User.pushSubscription.id may return null if called too early,
// OneSignal suggests to listen for the updates:
OneSignal.User.pushSubscription.addObserver((state) {
if (state.current.optedIn) {
// now you can try to retrieve subscriptionId
}
});
// 2. Then you can push subscriptionId to Adapty:
final subscriptionId = OneSignal.User.pushSubscription.id;
if (subscriptionId != null) {
await Adapty().setIntegrationIdentifier(key: "one_signal_subscription_id", value: subscriptionId);
}
using AdaptySDK;
using OneSignalSDK;
var pushUserId = OneSignal.Default.PushSubscriptionState.userId;
Adapty.SetIntegrationIdentifier(
"one_signal_player_id",
pushUserId,
(error) => {
// handle the error
});
import { adapty } from 'react-native-adapty';
import OneSignal from 'react-native-onesignal';
OneSignal.User.pushSubscription.addEventListener('change', (subscription) => {
const subscriptionId = subscription.current.id;
if (subscriptionId) {
adapty.setIntegrationIdentifier("one_signal_subscription_id", subscriptionId);
}
});
// PlayerID
// in your OSSubscriptionObserver implementation
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges) {
if let playerId = stateChanges.to.userId {
Task {
try await Adapty.setIntegrationIdentifier(
key: "one_signal_player_id",
value: playerId
)
}
}
}
// PlayerID
val osSubscriptionObserver = OSSubscriptionObserver { stateChanges ->
stateChanges?.to?.userId?.let { playerId ->
Adapty.setIntegrationIdentifier("one_signal_player_id", playerId) { error ->
if (error != null) {
// handle the error
}
}
}
}
// PlayerID
OSSubscriptionObserver osSubscriptionObserver = stateChanges -> {
OSSubscriptionState to = stateChanges != null ? stateChanges.getTo() : null;
String playerId = to != null ? to.getUserId() : null;
if (playerId != null) {
Adapty.setIntegrationIdentifier("one_signal_player_id", playerId, error -> {
if (error != null) {
// handle the error
}
});
}
};
// PlayerID (pre-v5 OneSignal SDK)
// in your OSSubscriptionObserver implementation
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges) {
if let playerId = stateChanges.to.userId {
Task {
try await Adapty.setIntegrationIdentifier(
key: "one_signal_player_id",
value: playerId
)
}
}
}
import { adapty } from 'react-native-adapty';
import OneSignal from 'react-native-onesignal';
OneSignal.addSubscriptionObserver(event => {
const playerId = event.to.userId;
adapty.setIntegrationIdentifier("one_signal_player_id", playerId);
});
更多内容请参阅 OneSignal 文档:
处理多设备
如果用户拥有多台设备,追踪购买事件和订阅可能会比较复杂。OneSignal 通过外部用户 ID 提供了处理此问题的方法。
要保持跨设备的用户数据一致性:
- 在您的服务器端匹配不同设备,并将此数据发送至 OneSignal。
- 将 Adapty 的 customer_user_id 用作 OneSignal 中的 externalUserId。如果您的应用没有注册系统,可考虑使用另一个在用户所有设备上保持一致的唯一标识符。
在所有设备上保持用户标识符的一致性,并在用户 ID 更改时及时更新 OneSignal,这一点非常重要。这样可以简化用户活动和订阅的追踪,同时确保消息传递的一致性,并实现更准确的数据分析和更好的用户体验。更多详情,请参阅 OneSignal 的外部用户 ID 文档。