Java SDK #
Java SDK的集成可参照Rest API项目 (opens new window)
类定义 #
- 高亮属性为必选,未标记属性都是可选。
消息 #
- 建议使用UMessage.Builder构建
public class UMessage {
/**
* 推送内容,必选
*/
private String payload;
/**
* 消息唯一标示,如果为空会自动生成,可在发送成功后获取
*/
private String msgId;
/**
* 消息发送者唯一标示,即发送者的用户ID
*/
private String fromId;
/**
* 消息类型,不填写默认为1
*/
private Integer type;
/**
* 额外/扩展信息
*/
private Map<String, Object> extra;
/**
* 通知栏显示内容,为空表示穿透消息
*/
private UMessageNotification notification;
/**
* 指定消息的有效期,单位秒
* 1表示即时消息,不存储离线消息,无法送达就丢弃。
* 0或者空时使用系统设置的有效期。有效期不能大于系统配置的消息有效期
*/
private Integer expires;
/**
* 通知类型
*/
private Integer notifyType;
/**
* 延迟时间发送,单位秒
*/
private Long delayTime;
/**
* 手动指定消息的接收者,99%场景不使用。
* 例如使用接口:UPushMsgTask userPush(UMessage message, String userId),
* 其中userId就是消息的接受者,那么在构建消息时无需指定toId。
*/
private String toId;
/**
* Builder UMessage的构造器
*/
public static class Builder<T extends Builder> {
/**
* 默认构造
*/
public Builder()
/**
* 设置通知类型
*/
public T notifyType(Integer notifyType)
/**
* 把键值对添加到额外信息
*
* @param key
* @param value
* @return
*/
public T putExtra(String key, Object value)
/**
* 设置额外信息
*/
public T extra(Map<String, Object> map)
/**
* 群组消息@的用户ID数组,只在群组消息有效
* @param alts alts被添加到extra
*/
public T setAlts(String[] alts)
/**
* 群消息@全体
*/
public T setAltAll()
/**
* voip消息具有最高推送优先级
*/
public T viop()
/**
* 消息发送者ID
*
* @param value
*/
public T fromId(String value)
/**
* 消息唯一标示
*
* @param value
* @return
*/
public T msgId(String value)
/**
* 消息内容
*
* @param value
* @return
*/
public T payload(String value)
/**
* 消息类型
*
* @param value
* @return
*/
public T type(Integer value)
/**
* 消息有效期,单位秒,时间不能大于系统配置的offline.msg.expire
* 1表示即时消息,在线推送不在线丢弃(手机端有三方推送并且是通知栏消息时,会使用三方推送)。
* 0表示永久消息,直到接收或者超过服务端配置的有效期才会被删除
* ios的voip是即时消息
* @param value
* @return
*/
public T expires(Integer value)
/**
* 消息延迟推送
* @param delayTime 延迟时间 秒
* @return
*/
public T delayTime(Long delayTime)
/**
* 设置通知栏可用(简便的方式,通知栏自动装载)
* @return
*/
public T setNotificationEnable()
/**
* 手动指定通知栏内容,(不推荐,建议使用自动装载方式)
* @param notification
*/
public T notification(UMessageNotification notification)
/**
* 参照上面toId说明,绝大多数场景不要使用
*/
public T toId(String value)
public UMessage build()
}
}
群订阅者 #
public class UserSubscribeModel {
/**
* 用户唯一标示
*/
private String userId;
/**
* 用户名称
*/
private String name;
}
消息撤回 #
public class URevokeMessage {
/**
* 被撤回的消息唯一标示,必选
*/
private String msgId;
/**
* 发送者唯一标示
*/
private String fromId;
/**
* 提示语
*/
private String alert;
/**
* 同 UMessage
*/
private Integer expires;
/**
* 消息类型
*/
private Integer type;
}
通知 #
- 使用自动装载的方式构建通知可完全忽略此类
public class UMessageNotification {
/**
* 标题
*/
private String title;
/**
* 副标题,android系统时副标题拼接在内容前面用":"分割
*/
private String subTitle;
/**
* 通知栏显示内容
*/
private String body;
/**
* 大图标
*/
private String largeIcon;
/**
* 声音描述,ios, android 8.0以下版本
*/
private String sound;
/**
* 角标数,正数时直接设置角标数,负数时表示角标自增
*/
private Integer badge;
/**
* 自定义通知点击动作
*/
private String action;
/**
* 厂商推送额外/扩展信息,只用用于构建厂商推送,不会推送给客户端。
* 对厂商推送服务二次开发使用,不做二开请忽略此属性。
*/
private Map<String, Object> vendorExtra;
/**
* 通知channel标示,android独有
*/
private String channelId;
/**
* 类别, ios独有
*/
private String category;
}
请求 #
public interface UPushTask {
/**
* 异步发送,带回调方法
* @param callback
*/
void send(UPushCallback callback);
/**
* 异步发送,不管关心回调
*/
void send();
/**
* 同步发送
* @return
*/
UPushResponse sendSync();
/**
* 同步发送
* @param timeout 等待超时时间,毫秒
* @return
*/
UPushResponse sendSync(int timeout);
}
public interface UPushMsgTask extends UPushTask {
/**
* 推送目标存在多平台时,用包名来过滤不同平台的设备,包含或排除,向满足包名条件的平台推送
* @param packageName 指定包名,多个包名时用;分割,前面加!表示排除
* @return
*/
UPushMsgTask filterPackageName(String packageName);
/**
* 对用户推送时,如果需要把消息同步给fromId其他平台设备,需要调用此方法
* 推送群消息时排除掉发送设备
* 全体推送消息时排除掉发送设备
* 必须配合fromId一起使用
* @param fromToken 发送设备的pushToken
* @return
*/
UPushMsgTask excludeFromToken(String fromToken);
/**
* 设置消息画像,如果指定了消息画像,系统内将不使用自动装载方式构建画像。必须配合fromId一起使用。
* @param portrait
* @return
*/
UPushMsgTask setPortrait(UMessagePortrait portrait);
}
public interface UPushCallback {
/**
* @param response 应答对象
*/
void onResponse(UPushResponse response);
}
public class UMessagePortrait {
private String name;
private String avatar;
private String groupName;
private String groupAvatar;
public UMessagePortrait() {}
public UMessagePortrait(String name, String avatar);
public UMessagePortrait(String name, String avatar, String groupName, String groupAvatar);
// ...省略属性的set,get方法
}
应答 #
public class UPushResponse {
/**
* 应答code, 0成功, 其他请参照错误码
*/
private Integer code;
/**
* 请求成功返回数据
*/
private Object data;
/**
* 返回错误信息
*/
private String msg;
}
常量 #
通知类型 #
public class NotifyType {
/**
* 正常通知
*/
public static final int DEFAULT = 0;
/**
* 接收通知,只显示发送人/标题,消息内容用"您有一条新消息"来代替内容
*/
public static final int NO_MESSAGE = 1;
/**
* 接收通知,不显示发送人/标题,消息内容用"您有一条新消息"来代替内容
*/
public static final int ONLY_NOTIFY = 2;
/**
* 免打扰,接收通知但不提醒
*/
public static final int NO_DISTURB = 3;
}
错误码 #
错误码 | 描述 |
---|---|
0 | 成功 |
1 | 部分成功 |
10000 | 未知错误,未捕获的系统异常 |
10001 | 未知错误,未捕获的系统异常 |
10002 | 无效参数 |
10003 | 无效请求 |
10004 | 请求超时 |
10006 | 服务无法连接 |
10007 | 无效的pushToken |
10009 | 服务启动校验出错 |
10010 | 设备没有授权 |
20001 | pushToken不存在 |
20002 | pushToken的已经注销 |
20003 | 用户不存在 |
20004 | 在黑名单中无法推送 |
20005 | 群组不存在 |
20006 | 用户不在群组中 |
30001 | 撤回超时 |
30002 | 撤回,校验fromId失败 |
30003 | 无法撤回不存在的群消息 |
厂商类型 #
厂商 | 厂商缩写 | 厂商类型 |
---|---|---|
苹果 | APNS | 1 |
小米 | XIAOMI | 2 |
华为 | HUAWEI | 3 |
OPPO | OPPO | 4 |
VIVO | VIVO | 5 |
谷歌 | FCM | 7 |
魅族 | MEIZU | 8 |
荣耀 | HONOR | 9 |
初始化 #
/**
* 构建推送对象
*
* @param appSecret 创建项目生成的AppSecret
* @param addr master服务器地址,如果master使用负载均衡,这里传入负载地址,端口同理
* @param port master服务器端口
*/
UPushClient(String appSecret, String addr, int port)
设备推送 #
/**
* pushToken推送
* @param message 消息
* @param pushToken 推送设备唯一标示
* @return
*/
UPushTask tokenPush(UMessage message, String pushToken)
/**
* 多pushToken推送
* @param message 消息
* @param pushTokens pushToken集合
* @return
*/
UPushTask tokensPush(UMessage message, Collection<String> pushTokens)
/**
* pushToken消息撤回
* @param revokeMessage 撤回消息
* @param pushToken 推送设备唯一标示
* @return
*/
UPushTask tokenRevoke(URevokeMessage revokeMessage, String pushToken)
/**
* 多pushToken消息撤回
* @param revokeMessage 撤回消息
* @param pushTokens pushToken集合
* @return
*/
UPushTask tokensRevoke(URevokeMessage revokeMessage, Collection<String> pushTokens)
用户推送 #
- 推荐使用
/**
* 用户推送
* @param message 消息
* @param userId 用户ID
* @return
*/
UPushMsgTask userPush(UMessage message, String userId)
/**
* 多用户推送
* @param message 消息
* @param userIds 用户ID集合
* @return
*/
UPushMsgTask usersPush(UMessage message, Collection<String> userIds)
/**
* 用户消息撤回
* @param revokeMessage 撤回消息
* @param userId 用户ID
* @return
*/
UPushMsgTask userRevoke(URevokeMessage revokeMessage, String userId)
/**
* 多用户消息撤回
* @param revokeMessage 撤回消息
* @param userIds 用户ID集合
* @return
*/
UPushMsgTask usersRevoke(URevokeMessage revokeMessage, Collection<String> userIds)
/**
* 删除用户
* @param userId
* @return
*/
UPushTask deleteUser(String userId)
/**
* 删除多个用户
* @param userIds
* @return
*/
UPushTask deleteUsers(Collection<String> userIds)
群组推送 #
- 抽象意义上的群组。groupId可以理解为群组唯一标示,组织唯一标示,订阅项唯一标示,标签唯一标示等等,是对业务系统中某个范围推送领域的抽象,不局限于'群组'的表意。下面不在对群组的含义进行赘述!
/**
* 群组推送
* @param message 消息
* @param groupId 群组ID
* @return
*/
UPushMsgTask groupPush(UMessage message, String groupId)
/**
* 对群组里指定用户推送
* @param message 消息
* @param groupId 群组ID
* @param userIds 群成员ID集合
* @return
*/
public UPushMsgTask groupPush(UMessage message, String groupId, Collection<String> userIds)
/**
* 群组消息撤回
* @param message 撤回消息
* @param groupId 群组ID
* @return
*/
UPushMsgTask groupRevoke(URevokeMessage message, String groupId)
全局推送 #
/**
* 全体推送
* @param message 消息
* @return
*/
UPushMsgTask pushAll(UMessage message)
/**
* 广播推送,即只对在线设备推送
* @param message 消息
* @return
*/
UPushMsgTask broadcast(UMessage message)
延迟消息撤回 #
- 在延迟消息未推送之前,请使用此方法,其他撤回无效。
/**
* 延迟消息撤回
* @param msgId 消息ID
* @return
*/
UPushTask delayMessageRevoke(String msgId)
群组/订阅 #
- 推荐使用用户订阅群组
/**
* pushToken订阅群组
* @param groupId 群组ID
* @param pushToken 推送设备唯一标示
* @return
*/
UPushTask tokenSubscribe(String groupId, String pushToken)
/**
* 多pushToken订阅群组
* @param groupId 群组ID
* @param pushTokens pushToken集合
* @return
*/
UPushTask tokensSubscribe(String groupId, Collection<String> pushTokens)
/**
* pushToken订阅多群组
* @param groupIds 群组ID集合
* @param pushToken 推送设备唯一标示
* @return
*/
UPushTask tokenMultiSubscribe(Collection<String> groupIds, String pushToken)
/**
* pushToken取消订阅群组
* @param groupId 群组ID
* @param pushToken 推送设备唯一标示
* @return
*/
UPushTask tokenUnsubscribe(String groupId, String pushToken)
/**
* 多pushToken取消订阅群组
* @param groupId 群组ID
* @param pushTokens pushToken集合
* @return
*/
UPushTask tokensUnsubscribe(String groupId, Collection<String> pushTokens)
/**
* 用户订阅群组
* @param groupId 群组ID
* @param userModel 订阅用户
* @return
*/
UPushTask userSubscribe(String groupId, UserSubscribeModel userModel)
/**
* 多用户订阅群组
* @param groupId 群组ID
* @param userModels 订阅用户集合
* @return
*/
UPushTask usersSubscribe(String groupId, Collection<UserSubscribeModel> userModels)
/**
* 用户取消订阅群组
* @param groupId 群组ID
* @param userId 用户ID
* @return
*/
UPushTask userUnsubscribe(String groupId, String userId)
/**
* 多用户取消订阅群组
* @param groupId 群组ID
* @param userIds userId集合
* @return
*/
UPushTask usersUnsubscribe(String groupId, Collection<String> userIds)
/**
* 用户取消订阅多群组
* @param groupIds
* @param userId
* @return
*/
UPushTask usersUnsubscribe(Collection<String> groupIds, String userId)
/**
* 删除订阅项,删除后并不会影响群离线消息
* @param groupId 群组ID
* @return
*/
UPushTask deleteGroup(String groupId)
设置 #
/**
* 设置推送设备的通知类型
* @param pushToken 推送设备唯一标示
* @param notifyType 通知类型
* @return
*/
UPushTask setNotifyTypeForToken(String pushToken, Integer notifyType)
/**
* 设置推送设备在接收群组消息时的通知类型
* @param groupId 群组ID
* @param pushToken 推送设备唯一标示
* @param notifyType 通知类型
* @return
*/
UPushTask setGroupNotifyTypeForToken(String groupId, String pushToken, Integer notifyType)
/**
* 设置用户在接收群组消息时的通知类型
* @param groupId 群组ID
* @param userId 用户ID
* @param notifyType 通知类型
* @return
*/
UPushTask setGroupNotifyTypeForUser(String groupId, String userId, Integer notifyType)
/**
* 设置用户接收fromId消息的通知类型
* @param fromId 消息发送者唯一标示,即发送者的用户ID
* @param userId 用户ID
* @param notifyType 通知类型
* @return
*/
UPushTask setNotifyTypeForFromId(String fromId, String userId, Integer notifyType)
/**
* 设置用户接收fromId消息时显示fromId的别名。可以理解为接收者给发送者设置的别名。
* @param fromId 消息发送者唯一标示,即发送者的用户ID
* @param userId 用户ID
* @param alias 别名/备注名
* @return
*/
UPushTask setAliasForFromId(String fromId, String userId, String alias)
/**
* 设置用户在群组中的别名
* @param groupId 群组ID
* @param userId 用户ID
* @param alias 别名/备注名
* @return
*/
UPushTask setAliasForUserInGroup(String groupId, String userId, String alias)
/**
* 设置用户消息画像。可以理解为发送者给自己设置的名字和头像。
* @param userId 用户唯一标示
* @param name 用户名字,可空
* @param avatar 用户头像,可空,建议为Url或者通过系统配置项msg.avatar.url.prefix拼接为Url。下面头像参数不再赘述。
* @return
*/
UPushTask setPortraitForUser(String userId, String name, String avatar)
/**
* 设置群组消息画面
* @param groupId 群组ID
* @param name 群组名,可空
* @param avatar 群组头像,可空
* @return
*/
UPushTask setPortraitForGroup(String groupId, String name, String avatar)
其他 #
- tokenReplace 如果业务系统完全不使用用户推送时,表示业务系统自行维护推送设备和用户的关系,业务系统发现pushToken变更时调用此方法,来保证之前pushToken的订阅能转移到新pushToken中,以及之前pushToken的离线消息会推送给新pushToken。建议业务系统整体上使用用户方式,用户推送,用户订阅,把这些复杂的关系维护交给UPush来完成。
- pushToken 相关接口是从版本1延续下来的,一方面是为了保证接口的完整性,另一方面在某些特殊场景依然需要对指定设备进行推送,如扫码登录,扫码支付等。
/**
* 业务系统发现pushToken变更时调用此方法
* @param previousToken 之前的pushToken
* @param currentToken 变更后的pushToken
* @return
*/
UPushTask tokenReplace(String previousToken, String currentToken)
/**
* 取得设备在线状态
* @param pushToken 设备的pushToken
* @return { status }, status: 1 在线,0 离线,-1 注销,-2 pushToken不存在
*/
public UPushTask getOnlineStatus(String pushToken)