消息推送
更新时间:2025-12-12 15:52:22
系统消息
APP接入手机厂商推送SDK,实现设备消息推送
package com.polaris.iot.appsdk.libaccount
object ThirdPushApi{
/**
* @param params [PushRegisterReq]
* @param ioTCallback [IoTCallback] 可选
*/
fun register(params: PushRegisterReq, ioTCallback: IoTCallback?)
/**
* @param ioTCallback [IoTCallback] 可选
*/
@JvmStatic
fun unregister(ioTCallback: IoTCallback?)
}
注册
注册各厂商平台推送SDK生成的token到RTCX平台
String token="手机厂商推送SDK生成的凭证"
//厂商,1 - apple; 2 - huawei;3 - xiaomi;4 - oppo;5 - vivo;6 - honor;7 - google;不能确认具体厂商,使用默认选项
int verdor = 2;
//时区
String timeZone="+08:00"
PushRegisterReq reqParams = new PushRegisterReq(
token,
vendor,
timeZone
)
ThirdPushApi.register(reqParams, new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
//注册成功
}
});
反注册
将已注册到RTCX平台的token反注册
用户退出登录时调用,请在OpenAccount.logout()接口之前已完成本接口调用
ThirdPushApi.unregister(new IoTCallback() {
@Override
public void onFailure(@Nullable IoTRequest request, @NonNull IoTSDKError exception) {
}
@Override
public void onResponse(@NonNull IoTRequest request, @NonNull IoTResponse response) {
//反注册成功
}
})
应用内消息
应用处于前台时,可能收不到系统推送消息,可使用应用内推送。
package com.polaris.iot.appsdk.libsignaling
import com.alibaba.fastjson.JSONObject
object UserMsgNotificationMgr {
/**
* 订阅消息通知
*
* @param notificationType 订阅类型[UserNotificationType]
* @param callback 回调[UserMessageNotificationCallback]
*/
@JvmStatic
fun subscribe(notificationType: UserNotificationType, callback: UserMessageNotificationCallback)
/**
* 取消订阅
*
* @param notificationType 订阅类型[UserNotificationType]
* @param callback 回调[UserMessageNotificationCallback]
*/
@JvmStatic
fun unsubscribe(notificationType: UserNotificationType, callback: UserMessageNotificationCallback)
/**
* 取消订阅
* @param notificationType 订阅类型[UserNotificationType]
*/
@JvmStatic
fun unsubscribe(notificationType: UserNotificationType)
}
data class UserNotificationMessage(
/**
* 消息ID
*/
val id: String,
/**
* 消息类型
*/
val type: UserNotificationType,
/**
* 业务数据,请根据实际业务取对象中的值
*/
val data: JSONObject?,
)
abstract class UserMessageNotificationCallback{
abstract fun onMessage(message: UserNotificationMessage)
}
enum class UserNotificationType {
USER_LOGOUT, //用户登出 内部使用,可忽略
TRANSFER_NOTIFY, //透传通知
}
示例
简单封装
package com.polaris.iot.appsdk.xsdemoapp.utils
import android.widget.Toast
import com.polaris.iot.appsdk.libcommon.log.IoTLogger
import com.polaris.iot.appsdk.libcommon.utils.JsonUtils
import com.polaris.iot.appsdk.libsignaling.UserMessageNotificationCallback
import com.polaris.iot.appsdk.libsignaling.UserMsgNotificationMgr
import com.polaris.iot.appsdk.libsignaling.UserNotificationMessage
import com.polaris.iot.appsdk.libsignaling.UserNotificationType
import com.polaris.iot.appsdk.xsdemoapp.XsDemoApplication
class UserNotifyTransfer private constructor (private val application: XsDemoApplication){
companion object {
private const val TAG: String = "UserNotifyTransfer"
private var instance: UserNotifyTransfer? = null
@JvmStatic
fun getInstance(application: XsDemoApplication): UserNotifyTransfer {
return instance ?: synchronized(this) {
instance ?: UserNotifyTransfer(application).also { instance = it }
}
}
}
private val onUserNotifyMessage = object : UserMessageNotificationCallback() {
override fun onMessage(message: UserNotificationMessage) {
/**
* 业务数据,请根据实际业务取对象中的值
*/
val message = JsonUtils.toJsonString(message.data)
IoTLogger.i(TAG, "on isAppInBackground=${application.isAppInBackground} message=${message}" )
if(application.isAppInBackground){
return
}
Toast.makeText(application, "user notify msg: $message",Toast.LENGTH_SHORT).show()
//统一全局处理或分发到各界面
}
}
/**
* 订阅,用户登录成功或自动登录成功后调用
*/
fun subscribe(notificationType: UserNotificationType){
IoTLogger.d(TAG, "subscribe type=$notificationType")
UserMsgNotificationMgr.subscribe(notificationType, onUserNotifyMessage)
}
/**
* 取消订阅, 退出登录后调用
*/
fun unsubscribe(notificationType: UserNotificationType){
IoTLogger.d(TAG, "unsubscribe type=$notificationType")
UserMsgNotificationMgr.unsubscribe(notificationType)
}
}
使用
//用户登录成功后
UserNotifyTransfer.getInstance((XsDemoApplication) requireActivity().getApplication()).subscribe(UserNotificationType.TRANSFER_NOTIFY);
//用户登出后
UserNotifyTransfer.getInstance((XsDemoApplication) requireActivity().getApplication()).unsubscribe(UserNotificationType.TRANSFER_NOTIFY);