1.0.8 • Published 2 years ago

@byron-react-native/tencent-im v1.0.8

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

react-native-tencent-im

Getting started

$ npm install @byron-react-native/tencent-im --save

or

$ yarn add @byron-react-native/tencent-im

Usage

import {ImSdk} from '@byron-react-native/tencent-im';

export enum V2TIMLogLevel {
    V2TIM_LOG_NONE = 0, ///< 不输出任何 sdk log
    V2TIM_LOG_DEBUG = 3, ///< 输出 DEBUG,INFO,WARNING,ERROR 级别的 log
    V2TIM_LOG_INFO = 4, ///< 输出 INFO,WARNING,ERROR 级别的 log
    V2TIM_LOG_WARN = 5, ///< 输出 WARNING,ERROR 级别的 log
    V2TIM_LOG_ERROR = 6, ///< 输出 ERROR 级别的 log
  }

  export enum V2TIMMessageStatus {
    V2TIM_MSG_STATUS_SENDING = 1, ///< 消息发送中
    V2TIM_MSG_STATUS_SEND_SUCC = 2, ///< 消息发送成功
    V2TIM_MSG_STATUS_SEND_FAIL = 3, ///< 消息发送失败
    V2TIM_MSG_STATUS_HAS_DELETED = 4, ///< 消息被删除
    V2TIM_MSG_STATUS_LOCAL_REVOKED = 6, ///< 被撤销的消息
  }

  export enum V2TIMElemType {
    V2TIM_ELEM_TYPE_NONE = 0, ///< 未知消息
    V2TIM_ELEM_TYPE_TEXT = 1, ///< 文本消息
    V2TIM_ELEM_TYPE_CUSTOM = 2, ///< 自定义消息
    V2TIM_ELEM_TYPE_IMAGE = 3, ///< 图片消息
    V2TIM_ELEM_TYPE_SOUND = 4, ///< 语音消息
    V2TIM_ELEM_TYPE_VIDEO = 5, ///< 视频消息
    V2TIM_ELEM_TYPE_FILE = 6, ///< 文件消息
    V2TIM_ELEM_TYPE_LOCATION = 7, ///< 地理位置消息
    V2TIM_ELEM_TYPE_FACE = 8, ///< 表情消息
    V2TIM_ELEM_TYPE_GROUP_TIPS = 9, ///< 群 Tips 消息
  }

  export interface V2TIMImage {
    /// 图片 ID,内部标识,可用于外部缓存 key
    uuid: string;

    /// 图片类型
    type: number;

    /// 图片大小(type == V2TIM_IMAGE_TYPE_ORIGIN 有效)
    size: number;

    /// 图片宽度
    width: number;

    /// 图片高度
    height: number;

    /// 图片 url
    url: string;
  }

  export interface V2TIMSoundElem {
    /// 语音文件路径(只有发送方才能获取到)
    path: string;

    /// 语音消息内部 ID
    uuid: string;

    /// 语音数据大小
    dataSize: number;

    /// 语音长度(秒)
    duration: number;
  }

  export interface V2TIMMessage {
    /// 消息 ID(消息创建的时候为 nil,消息发送的时候会生成)
    msgID: string;

    /// 消息时间
    timestamp: Date;

    /// 消息发送者
    sender: string;

    /// 消息发送者昵称
    nickName: string;

    /// 消息发送者好友备注
    friendRemark: string;

    /// 如果是群组消息,nameCard 为发送者的群名片
    nameCard: string;

    /// 消息发送者头像
    /// 在 C2C 场景下,陌生人的头像不会实时更新,如需更新陌生人的头像(如在 UI 上点击陌生人头像以展示陌生人信息时),
    /// 请调用 V2TIMManager.h -> getUsersInfo 接口触发信息的拉取。待拉取成功后,SDK 会更新本地头像信息,即 faceURL 字段的内容。
    /// @note 请不要在收到每条消息后都去 getUsersInfo,会严重影响程序性能。
    faceURL: string;

    /// 如果是群组消息,groupID 为会话群组 ID,否则为 nil
    groupID: string;

    /// 如果是单聊消息,userID 为会话用户 ID,否则为 nil,
    /// 假设自己和 userA 聊天,无论是自己发给 userA 的消息还是 userA 发给自己的消息,这里的 userID 均为 userA
    userID: string;

    /// 群聊中的消息序列号云端生成,在群里是严格递增且唯一的,
    /// 单聊中的序列号是本地生成,不能保证严格递增且唯一。
    seq: number;

    /// 消息随机码
    random: number;

    /// 消息发送状态
    status: V2TIMMessageStatus;

    /// 消息发送者是否是自己
    isSelf: boolean;

    /// 消息自己是否已读
    isRead: boolean;

    /// 消息对方是否已读(只有 C2C 消息有效)
    isPeerRead: boolean;

    /// 群消息中被 @ 的用户 UserID 列表(即该消息都 @ 了哪些人)
    groupAtUserList: string[];

    /// 消息类型
    elemType: V2TIMElemType;

    /// 消息类型 为 V2TIM_ELEM_TYPE_TEXT,textElem 会存储文本消息内容
    textElem: { text: string };

    /// 消息类型 为 V2TIM_ELEM_TYPE_CUSTOM,customElem 会存储自定义消息内容
    customElem: string;

    /// 消息类型 为 V2TIM_ELEM_TYPE_IMAGE,imageElem 会存储图片消息内容
    imageOriginal: ImSdkImageElem;
    imageThumb: ImSdkImageElem;
    imageLarge: ImSdkImageElem;
    /// 消息类型 为 V2TIM_ELEM_TYPE_SOUND,soundElem 会存储语音消息内容
    soundElem: ImSdkSoundElem;

    /// 消息类型 为 V2TIM_ELEM_TYPE_VIDEO,videoElem 会存储视频消息内容
    // videoElem: V2TIMSoundElem;

    /// 消息类型 为 V2TIM_ELEM_TYPE_FILE,fileElem 会存储文件消息内容
    // @property(nonatomic,strong,readonly) V2TIMFileElem *fileElem;

    /// 消息类型 为 V2TIM_ELEM_TYPE_LOCATION,locationElem 会存储地理位置消息内容
    // @property(nonatomic,strong,readonly) V2TIMLocationElem *locationElem;

    /// 消息类型 为 V2TIM_ELEM_TYPE_FACE,faceElem 会存储表情消息内容
    // @property(nonatomic,strong,readonly) V2TIMFaceElem *faceElem;

    /// 消息类型 为 V2TIM_ELEM_TYPE_GROUP_TIPS,groupTipsElem 会存储群 tips 消息内容
    // @property(nonatomic,strong,readonly) V2TIMGroupTipsElem *groupTipsElem;

    /// 消息自定义数据(本地保存,不会发送到对端,程序卸载重装后失效)
    // @property(nonatomic,strong) NSData* localCustomData;

    /// 消息自定义数据,可以用来标记语音、视频消息是否已经播放(本地保存,不会发送到对端,程序卸载重装后失效)
    // @property(nonatomic,assign) int localCustomInt;

    /// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
    // @property(nonatomic,strong) NSData* cloudCustomData;
  }

  export enum V2TIMConversationType {
    V2TIM_C2C = 1, ///< 单聊
    V2TIM_GROUP = 2, ///< 群聊
  }

  export enum V2TIMGroupReceiveMessageOpt {
    V2TIM_GROUP_RECEIVE_MESSAGE = 0, ///< 在线正常接收消息,离线时会进行 APNs 推送
    V2TIM_GROUP_NOT_RECEIVE_MESSAGE = 1, ///< 不会接收到群消息
    V2TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE = 2, ///< 在线正常接收消息,离线不会有推送通知
  }

  export interface V2TIMConversation {
    /// 会话类型
    type: V2TIMConversationType;

    /// 会话唯一 ID,如果是 C2C 单聊,组成方式为 c2c_userID,如果是群聊,组成方式为 group_groupID
    conversationID: string;

    /// 如果会话类型为 C2C 单聊,userID 会存储对方的用户ID,否则为 nil
    userID: string;

    /// 如果会话类型为群聊,groupID 会存储当前群的群 ID,否则为 nil
    groupID: string;

    /// 如果会话类型为群聊,groupType 为当前群类型,否则为 nil
    groupType: string;

    /// 会话展示名称(群组:群名称 >> 群 ID;C2C:对方好友备注 >> 对方昵称 >> 对方的 userID)
    showName: string;

    /// 会话展示头像(群组:群头像;C2C:对方头像)
    faceUrl: string;

    /// 会话未读消息数量,直播群(AVChatRoom)不支持未读计数,默认为 0
    unreadCount: number;

    /// 消息接收选项(群会话有效)
    recvOpt: V2TIMGroupReceiveMessageOpt;

    /// 会话最后一条消息,可以通过 lastMessage -> timestamp 对会话做排序,timestamp 越大,会话越靠前
    lastMessage: V2TIMMessage;

    /// 群会话 @ 信息列表,用于展示 “有人@我” 或 “@所有人” 这两种提醒状态
    groupAtInfolist: Array<any>;

    /// 草稿信息,设置草稿信息请调用 setConversationDraft() 接口
    draftText: string;

    /// 草稿编辑时间,草稿设置的时候自动生成
    draftTimestamp: Date;
  }

  export enum ImSdkEventType {
    /**
     * 正在连接到腾讯云服务器
     */
    "Connecting" = "Connecting",
    /**
     * 已经成功连接到腾讯云服务器
     */
    "ConnectSuccess" = "ConnectSuccess",
    /**
     * 连接腾讯云服务器失败
     */
    "ConnectFailed" = "ConnectFailed",
    /**
     * 当前用户被踢下线
     */
    "KickedOffline" = "KickedOffline",
    /**
     * 登录票据已经过期
     */
    "UserSigExpired" = "UserSigExpired",
    /**
     * 当前用户的资料发生了更新
     */
    "SelfInfoUpdated" = "SelfInfoUpdated",
    /**
     * 新消息通知
     */
    "NewMessage" = "NewMessage",
    /**
     * 收到会话新增的回调
     */
    "NewConversation" = "NewConversation",
    /**
     * 收到会话更新的回调
     */
    "ConversationChanged" = "ConversationChanged",
    /**
     * 有新成员加入群(该群所有的成员都能收到)
     */
    "MemberEnter" = "MemberEnter",
    /**
     * 有成员离开群(该群所有的成员都能收到)
     */
    "MemberLeave" = "MemberLeave",
  }

  export interface ImSdkMember {
    faceURL: string;
    friendRemark: string;
    nameCard: string;
    nickName: string;
    userID: string;
  }

  export interface ImSdkSoundElem {
    path: string;
    uuid: string;
    dataSize: number;
    duration: number;
  }

  export interface ImSdkImageElem {
    uuid: string;
    type: number;
    width: number;
    height: number;
    url: string;
  }

  export interface V2TIMGroupMemberInfo {
    role: number;
    muteUntil: number;
    joinTime: number;
    userID: string;
    nickName: string;
    friendRemark: string;
    nameCard: string;
    faceURL: string;
  }

  export class ImSdk {
    static initSDK: (
      sdkAppID: number,
      logLevel?: V2TIMLogLevel
    ) => Promise<void>;
    static login: (userID: string, userSig: string) => Promise<void>;
    static logout: () => Promise<void>;
    static setSelfInfo: (nickName: string, faceURL: string) => Promise<void>;
    static markC2CMessageAsRead: (userID: string) => Promise<void>;
    static markGroupMessageAsRead: (userID: string) => Promise<void>;
    static getC2CHistoryMessageList: (
      userID: string,
      size: number,
      isFirst?: boolean
    ) => Promise<V2TIMMessage[]>;
    static getConversationList: (
      page: number,
      size: number
    ) => Promise<{
      page: number;
      is_finished: boolean;
      data: V2TIMConversation[];
    }>;
    static getGroupMemberList: (
      groupID: string,
      page: number
    ) => Promise<{
      page: number;
      data: V2TIMGroupMemberInfo[];
    }>;
    static sendC2CTextMessage: (
      text: string,
      userID: string
    ) => Promise<V2TIMMessage>;
    static sendC2CCustomMessage: (
      userID: string,
      params: Record<string, string>
    ) => Promise<V2TIMMessage>;
    static sendImageMessage: (
      userID: string,
      imagePath: string
    ) => Promise<V2TIMMessage>;
    static sendSoundMessage: (
      userID: string,
      soundPath: string,
      duration: number
    ) => Promise<V2TIMMessage>;
    static sendGroupTextMessage: (
      text: string,
      groupID: string
    ) => Promise<V2TIMMessage>;
    static sendGroupAtTextMessage: (
      text: string,
      groupID: string,
      atUserID: string
    ) => Promise<V2TIMMessage>;
    static sendGroupCustomMessage: (
      groupID: string,
      params: Record<string, string>
    ) => Promise<V2TIMMessage>;
    static sendGroupImageMessage: (
      groupID: string,
      imagePath: string
    ) => Promise<V2TIMMessage>;
    static sendGroupSoundMessage: (
      groupID: string,
      soundPath: string,
      duration: number
    ) => Promise<V2TIMMessage>;
    static joinGroup: (groupID: string, msg: string) => Promise<void>;
    static quitGroup: (groupID: string) => Promise<void>;
    static addListener: (
      event: ImSdkEventType,
      listener: (data: any) => void
    ) => EmitterSubscription;
  }

Screenshot

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago