You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OneSignal:是否存在类似addListenerForNotificationOpened的用户订阅通知事件?

Great question! OneSignal确实有对应的机制来监听用户的订阅行为,完全能实现你在用户刚完成订阅时发送tags的需求,它和addListenerForNotificationOpened类似,但专门针对订阅状态变化。

Web端实现方式

在Web环境下,你可以使用OneSignal.on('subscriptionChange', callback)来监听订阅状态的变化。当用户从“未订阅”切换到“已订阅”时,回调函数会触发,这时候你就可以在里面调用sendTags方法。

示例代码:

// 初始化OneSignal之后设置监听
OneSignal.on('subscriptionChange', function(isSubscribed) {
  // 确认用户是刚完成订阅
  if (isSubscribed) {
    // 准备要发送的tags数据
    const userTags = {
      subscriber_type: 'new',
      subscribed_timestamp: new Date().toISOString()
    };

    // 发送tags
    OneSignal.sendTags(userTags)
      .then(function(response) {
        console.log('Tags成功发送给新订阅用户:', response);
      })
      .catch(function(error) {
        console.error('发送tags失败:', error);
      });
  }
});

注意:这个事件会在用户首次订阅、或者取消订阅后重新订阅时触发,所以一定要通过isSubscribed判断状态,避免重复执行逻辑。

移动端(iOS/Android)实现方式

如果你是在移动端开发,OneSignal也提供了对应的观察者模式来监听订阅状态变化:

iOS(Swift示例)

你需要实现OSSubscriptionObserver协议,并注册观察者:

import OneSignal

class SubscriptionListener: NSObject, OSSubscriptionObserver {
    override init() {
        super.init()
        // 注册订阅状态观察者
        OneSignal.add(self as OSSubscriptionObserver)
    }

    func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
        // 判断是否是订阅成功的状态变化
        if stateChanges.to.subscribed {
            let tags = [
                "subscriber_type": "new",
                "subscribed_timestamp": Date().iso8601Format()
            ]
            
            // 发送tags
            OneSignal.sendTags(tags, onSuccess: { result in
                print("Tags发送成功:", result ?? "无返回数据")
            }, onFailure: { error in
                print("发送tags失败:", error?.localizedDescription ?? "未知错误")
            })
        }
    }
}

// 在AppDelegate的didFinishLaunchingWithOptions中初始化
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 初始化OneSignal...
    _ = SubscriptionListener()
    return true
}

Android(Kotlin示例)

通过SubscriptionObserver来监听:

import com.onesignal.OneSignal
import com.onesignal.subscriptions.SubscriptionObserver
import com.onesignal.subscriptions.SubscriptionStateChanges

class SubscriptionListener : SubscriptionObserver {
    init {
        OneSignal.addSubscriptionObserver(this)
    }

    override fun onSubscriptionChanged(stateChanges: SubscriptionStateChanges) {
        if (stateChanges.to.isSubscribed) {
            val tags = mapOf(
                "subscriber_type" to "new",
                "subscribed_timestamp" to java.util.Date().toString()
            )
            
            OneSignal.sendTags(tags,
                successCallback = { result ->
                    println("Tags发送成功: $result")
                },
                failureCallback = { error ->
                    println("发送tags失败: ${error?.message}")
                }
            )
        }
    }
}

// 在Application类或者MainActivity的onCreate中初始化
class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        // 初始化OneSignal...
        SubscriptionListener()
    }
}

这个机制完美匹配你的需求:在用户完成订阅的瞬间触发逻辑,然后通过Promise或回调确认tags发送完成。

内容的提问来源于stack exchange,提问作者H.C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:31:21