Android SDK #

public class UPushClient {

    /**
     * 配置
     * @param appId       项目唯一标示
     * @param appKey      应用唯一标示
     * @param smallIcon   通知栏小图标, 必须,例如: R.mipmap.ic_launcher
     */
    public static void configUPush(Context context, String appId, String appKey, int smallIcon);

    /**
     * 注册推送
     * @param context
     * @param addr master地址
     * @param port master端口
     */
    public static void registerUPush(Context context, String addr, int port);

    /**
     * 注册到指定连接服务
     * @param context
     * @param addr connector地址
     * @param port connector端口
     */
    public static void registerSpecifiedUPushServer(Context context, String addr, int port);

    /**
     * 注册厂商推送
     * @param context
     * @param pushTypeName 可选,如果不指定厂商名,内部会自动识别。参照: 厂商类型 
     */
    public static void registerVendorPush(Context context, String pushTypeName);
    public static void registerVendorPush(Context context)


    /**
     * 注册本地通知显示前处理,在后台服务进程中被调用
     * @param preHandler
     */
    public static void registerLocalNotificationPreHandle(Context c, Class<? extends UPushLocalNotificationPreHandle> preHandler);
    
    /**
     * 注册在后台服务中的消息处理,也可理解为在后台服务接收到消息的拦截处理,它在后台服务进程中被调用。
     * 注意UPushMessageReceiver是在主进程(前台进程)被调用,当前台进程被销毁时,后台服务进程可能存在,所以需要在后台服务进程处理数据时使用。
     * @param handler
     */
    public static void registerBackgroundMessageHandle(Context c, Class<? extends UPushBackgroundMessageHandle> handler);

    /**
     * 注销
     * @param context
     */
    public static void unregisterUPush(Context context);

    /**
     * 绑定用户
     * @param userId 用户唯一标示
     */
    public static void bindUser(Context context, String userId);

    /**
     * 绑定厂商推送token。如果使用UPush实现的各平台推送aar,无需调用此方法,
     * 如果开发者自行实现各厂商推送,需要调用此方法绑定厂商推送令牌
     * @param tpType 厂商类型
     * @param tpToken 厂商token
     */
    public static void bindVendorPushToken(Context context, int tpType, String tpToken);

    /**
     * 检查连接,如果没有连接则立即建立连接,用于从后台返回前台时拉起推送服务
     * @param context
     */
    public static void checkConnection(Context context);

    /**
     * 取得状态
     */
    public static int getStatus(Context context);

    /**
     * 取得已经绑定的用户ID
     */
    public static String getUserId(Context c);

    /**
     * 取得PushToken
     * @param c
     * @return
     */
    public static String getPushToken(Context c);
}

消息 #

  • 高亮属性不为空,其他属性可能是为空





 




 




 




 




























public class UMessage implements Parcelable {

    /**
     * 消息唯一标示
     */
    private String msgId;

    /**
     * 消息体
     */
    private String payload;

    /**
     * 消息类型
     */
    private Integer type;

    /**
     * 通知类型
     */
    private Integer notifyType;

    /**
     * 消息来源标示/发送者ID
     */
    private String fromId;

    /**
     * 消息目标Id/接收者Id,默认/为空表示是自己,群消息时为群组ID
     */
    private String toId;

    /**
     * 额外/扩展字段,JSON字符串
     */
    private String extra;

    /**
     * 通知栏
     */
    private UMessageNotification notification;

    /**
     * 消息画像
     */
    private UMessagePortrait portrait;

}
notifyType 说明

参照 NotifyType


消息画像 #

public class UMessagePortrait implements Parcelable {
    /**
     * fromId显示名
     */
    private String name;
    /**
     * fromId头像
     */
    private String avatar;
    /**
     * 群组名
     */
    private String groupName;
    /**
     * 群组头像
     */
    private String groupAvatar;

    /**
     * 通知类型
     * 由服务端api setGroupNotifyTypeForUser, setNotifyTypeForFromId设置的通知类型
     * UMessage中的通知类型是计算后最终的消息通知类型
     */
    private Integer notifyType;
}

通知栏 #

public class UMessageNotification implements Parcelable {
    /**
     * 标题
     */
    private String title;

    /**
     * 子标题
     */
    private String subTitle;

    /**
     * 通知栏显示内容
     */
    private String body;

    /**
     * 角标数
     */
    private Integer badge;

    /**
     * 通知音
     */
    private String sound;

    /**
     * 自定义通知栏点击动作
     */
    private String action;

    /**
     * 通知channel标示,建议通过channelId去控制通知的行为,声音震动等
     */
    private String channelId;

    /**
     * 大图标/消息头像/消息画像
     */
    private String largeIcon;
}

事件监听 #

public abstract class UPushMessageReceiver extends BroadcastReceiver implements UPushIntentHandle {

    public Context getContext();

   /**
     * 接收消息
     * @param msg            消息
     * @param pushTime       推送时间
     * @param isOfflineMsg   是否为离线消息
     */
    public abstract void onPush(UMessage msg, long pushTime, boolean isOfflineMsg);

    /**
     * 通知点击回调
     * @param msgId
     * @param msg
     * @param remoteNotification true远程通知,厂商通知,false本地通知
     */
    void onNotificationClicked(String msgId, UMessage msg, boolean remoteNotification);

    /**
     * 消息撤回
     * @param data          JSON字符串,{msgId,fromId,alert} 其中msgId一定存在
     * @param timestamp     撤回时间
     * @param msg           被撤回的消息
     */
    public abstract void onRevoke(String data, long timestamp, UMessage msg);

    /**
     * 状态监听
     * @param status        参照共通 - 状态码
     */
    public abstract void onStatus(int status);

    /**
     * pushToken监听
     * @param code         0 成功,小于0失败,参照共通 - 错误码
     * @param pushToken    推送设备唯一标示
     * @param serverTime   服务端推送token时间
     * @param userId       绑定到pushToken的用户ID,未绑定时为空
     */
    public abstract void onPushToken(int code, String pushToken, long serverTime, String userId);

    /**
     * 账号在其他设备登录监听
     * @param info         JSON字符串, keys: ip, platform
     */
    public abstract void onRegisteredOnAnotherDevice(String info);

    /**
     * 注销完成监听
     */
    public abstract void onUnregister();

    /**
     * 绑定用户监听
     * @param code      0成功,小于0失败,参照错误码
     */
    public abstract void onBindUser(int code);

    /**
     * 绑定第三方推送状态
     * @param code 0失败,1成功
     * @param type 厂商推送类型, 参照{@link com.cmcim.upush.android.sdk.PushType}
     * @param vendorToken 厂商推送令牌
     */
    public abstract void onBindVendorPush(int code, int type, String vendorToken);
}

Channel #

SDK创建了两个通道upush_high_channelupush_low_channel

  • upush_high_channel,默认铃声,震动,闪灯,NotificationManager.IMPORTANCE_HIGH
  • upush_low_channel,静默,无任何提醒,NotificationManager.IMPORTANCE_LOW

高级 #

以下两个后台拦截相关的类,大多数情况无需使用,只有当有后台常驻权限时有用。

通知显示拦截处理 #

注意它在后台进程被调用,可以使用广播和主进程通信

public abstract class UPushLocalNotificationPreHandle {
    public UPushLocalNotificationPreHandle(Context c) {}
    public void onDestroy(Context c) {}

    /**
     * 通知将要显示,对通知进行拦截处理
     * @param c
     * @param builder
     * @param message
     * @return 为空或等0不显示通知,不为空时表示未读数并显示通知
     */
    public abstract Integer onNotificationWillAppear(Context c, NotificationCompat.Builder builder,
                                     final UMessage message);
}

后台消息拦截处理 #

在后台进程被调用,后台服务接收到消息(后台) -> UPushBackgroundMessageHandle::onPush(后台) -> UPushMessageReceiver::onPush(前台)

public abstract class UPushBackgroundMessageHandle {

    public UPushBackgroundMessageHandle() {}

    /**
     * 参照UPushIntentHandle中onPush
     * @param c
     * @param msg
     * @param pushTime
     * @param isOfflineMsg
     * @return 是否向下转发,当返回false时UPushMessageReceiver不会收到onPush
     */
    public abstract boolean onPush(Context c, UMessage msg, long pushTime, boolean isOfflineMsg);

    /**
     * 参照UPushIntentHandle中onRevoke
     * @param c
     * @param data
     * @param timestamp
     * @param message
     * @return 是否向下转发,当返回false时UPushMessageReceiver不会收到onRevoke
     */
    public abstract boolean onRevoke(Context c, String data, long timestamp, UMessage message);
}


上次更新: 8/27/2024, 7:32:38 PM