ashen_23

sdk upgrade

Too many changes to show.

To preserve performance only 21 of 21+ files are displayed.

Pod::Spec.new do |s|
s.name = "HHVDoctorSDK"
s.version = "2.0.6.0820.0952"
s.version = "2.0.6.0820.1021"
s.summary = "和缓视频医生 SDK"
s.description = <<-DESC
... ...
No preview for this file type
No preview for this file type
//
// IMGroupExt.h
// IMGroupExt
//
// Created by tomzhu on 2017/1/23.
//
//
#ifndef IMGroupExt_h
#define IMGroupExt_h
#import "TIMComm+Group.h"
#import "TIMGroupManager+Ext.h"
#endif /* IMGroupExt_h */
//
// IMMessageExt.h
// IMMessageExt
//
// Created by tomzhu on 2016/12/27.
//
//
#ifndef ImSDK_h
#define ImSDK_h
#import "TIMConversation+MsgExt.h"
#import "TIMMessage+MsgExt.h"
#import "TIMComm+MsgExt.h"
#import "TIMManager+MsgExt.h"
#endif /* ImSDK_h */
//
// IMSdkComm.h
// ImSDK
//
// Created by bodeng on 10/12/14.
// Copyright (c) 2014 tencent. All rights reserved.
//
#ifndef ImSDK_IMSdkComm_h
#define ImSDK_IMSdkComm_h
@interface OMErrResp : NSObject
{
NSString* cmd; // 返回的命令字
int seq; // 请求包的seq
NSString* uin; // uin
int errCode; // 错误码
NSString* errTips; // error tips
}
@property(nonatomic,strong) NSString* cmd;
@property(nonatomic,strong) NSString* uin;
@property(nonatomic,assign) int seq;
@property(nonatomic,assign) int errCode;
@property(nonatomic,strong) NSString* errTips;
@end
/// 业务相关回调
/**
* userid和tinyid 转换回包
* userList 存储IMUserId结构
*/
@interface OMUserIdResp : NSObject{
NSArray* userList; // 用户的登录的open id
}
@property(nonatomic,strong) NSArray* userList;
@end
/**
* userid转换tinyid回调
*
* @param resp 回包结构
*
* @return 0 处理成功
*/
typedef int (^OMUserIdSucc)(OMUserIdResp *resp);
//请求回调
typedef int (^OMErr)(OMErrResp *resp);
/**
* 音视频回调
*/
@interface OMCommandResp : NSObject{
NSData* rspbody;
}
@property(nonatomic,strong) NSData* rspbody;
@end
// relay 回调
typedef int (^OMCommandSucc)(OMCommandResp *resp);
// request 回调
typedef void (^OMRequestSucc)(NSData * data);
typedef void (^OMRequsetFail)(int code, NSString* msg);
/**
* UserId 结构,表示一个用户的账号信息
*/
@interface IMUserId : NSObject{
NSString* uidtype; // uid 类型
unsigned int userappid;
NSString* userid; // 用户id
unsigned long long tinyid;
unsigned long long uin;
}
@property(nonatomic,strong) NSString* uidtype;
@property(nonatomic,assign) unsigned int userappid;
@property(nonatomic,strong) NSString* userid;
@property(nonatomic,assign) unsigned long long tinyid;
@property(nonatomic,assign) unsigned long long uin;
@end
/**
* 一般多人音视频操作成功回调
*/
typedef void (^OMMultiSucc)();
/**
* 一般多人音视频操作失败回调
*
* @param code 错误码
* @param err 错误描述
*/
typedef void (^OMMultiFail)(int code, NSString * err);
#endif
//
// ImSDK.h
// ImSDK
//
// Created by bodeng on 24/3/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_ImSDK_h
#define ImSDK_ImSDK_h
#import "TIMComm.h"
#import "TIMManager.h"
#import "TIMMessage.h"
#import "TIMConversation.h"
#import "TIMGroupManager.h"
#import "TIMCallback.h"
#import "TIMFriendshipManager.h"
#import "IMSdkComm.h"
#import "TIMErrorCode.h"
#import "IMGroupExt.h"
#import "IMMessageExt.h"
#endif
//
// TIMCallback.h
// ImSDK
//
// Created by bodeng on 30/3/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_TIMCallback_h
#define ImSDK_TIMCallback_h
#import "TIMComm.h"
@class TIMMessage;
@class TIMGroupTipsElem;
@class TIMGroupInfo;
@class TIMSNSChangeInfo;
@class TIMFriendPendencyInfo;
/**
* 连接通知回调
*/
@protocol TIMConnListener <NSObject>
@optional
/**
* 网络连接成功
*/
- (void)onConnSucc;
/**
* 网络连接失败
*
* @param code 错误码
* @param err 错误描述
*/
- (void)onConnFailed:(int)code err:(NSString*)err;
/**
* 网络连接断开(断线只是通知用户,不需要重新登陆,重连以后会自动上线)
*
* @param code 错误码
* @param err 错误描述
*/
- (void)onDisconnect:(int)code err:(NSString*)err;
/**
* 连接中
*/
- (void)onConnecting;
@end
/**
* 用户在线状态通知
*/
@protocol TIMUserStatusListener <NSObject>
@optional
/**
* 踢下线通知
*/
- (void)onForceOffline;
/**
* 断线重连失败
*/
- (void)onReConnFailed:(int)code err:(NSString*)err;
/**
* 用户登录的userSig过期(用户需要重新获取userSig后登录)
*/
- (void)onUserSigExpired;
@end
/**
* 页面刷新接口(如有需要未读计数刷新,会话列表刷新等)
*/
@protocol TIMRefreshListener <NSObject>
@optional
/**
* 刷新会话
*/
- (void)onRefresh;
/**
* 刷新部分会话(包括多终端已读上报同步)
*
* @param conversations 会话(TIMConversation*)列表
*/
- (void)onRefreshConversations:(NSArray*)conversations;
@end
/**
* 消息回调
*/
@protocol TIMMessageListener <NSObject>
@optional
/**
* 新消息回调通知
*
* @param msgs 新消息列表,TIMMessage 类型数组
*/
- (void)onNewMessage:(NSArray*)msgs;
@end
@protocol TIMMessageReceiptListener <NSObject>
@optional
/**
* 收到了已读回执
*
* @param receipts 已读回执(TIMMessageReceipt*)列表
*/
- (void) onRecvMessageReceipts:(NSArray*)receipts;
@end
/**
* 消息修改回调
*/
@protocol TIMMessageUpdateListener <NSObject>
@optional
/**
* 消息修改通知
*
* @param msgs 修改的消息列表,TIMMessage 类型数组
*/
- (void)onMessageUpdate:(NSArray*) msgs;
@end
@protocol TIMMessageRevokeListener <NSObject>
@optional
/**
* 消息撤回通知
*
* @param locator 被撤回消息的标识
*/
- (void)onRevokeMessage:(TIMMessageLocator*)locator;
@end
/**
* 图片上传进度回调
*/
@protocol TIMUploadProgressListener <NSObject>
@optional
/**
* 上传进度回调
*
* @param msg 正在上传的消息
* @param elemidx 正在上传的elem的索引
* @param taskid 任务id
* @param progress 上传进度
*/
- (void)onUploadProgressCallback:(TIMMessage*)msg elemidx:(uint32_t)elemidx taskid:(uint32_t)taskid progress:(uint32_t)progress;
@end
/**
* 群事件通知回调
*/
@protocol TIMGroupEventListener <NSObject>
@optional
/**
* 群tips回调
*
* @param elem 群tips消息
*/
- (void)onGroupTipsEvent:(TIMGroupTipsElem*)elem;
@end
/**
* 好友代理事件回调
*/
@protocol TIMFriendshipListener <NSObject>
@optional
/**
* 添加好友通知
*
* @param users 好友列表(NSString*)
*/
- (void)onAddFriends:(NSArray*)users;
/**
* 删除好友通知
*
* @param identifiers 用户id列表(NSString*)
*/
- (void)onDelFriends:(NSArray*)identifiers;
/**
* 好友资料更新通知
*
* @param profiles 资料列表(TIMSNSChangeInfo *)
*/
- (void)onFriendProfileUpdate:(NSArray<TIMSNSChangeInfo *> *)profiles;
/**
* 好友申请通知
*
* @param reqs 好友申请者id列表(TIMFriendPendencyInfo *)
*/
- (void)onAddFriendReqs:(NSArray<TIMFriendPendencyInfo *> *)reqs;
@end
#endif
//
// TIMComm+Group.h
// IMGroupExt
//
// Created by tomzhu on 2017/2/9.
//
//
#ifndef TIMComm_Group_h
#define TIMComm_Group_h
#import "TIMComm.h"
@class TIMGroupPendencyMeta;
#pragma mark - 枚举类型
/**
* 群基本获取资料标志
*/
typedef NS_ENUM(NSInteger, TIMGetGroupBaseInfoFlag) {
/**
* 不获取群组资料
*/
TIM_GET_GROUP_BASE_INFO_FLAG_NONE = 0x00,
/**
* 获取群组名
*/
TIM_GET_GROUP_BASE_INFO_FLAG_NAME = 0x01,
/**
* 获取创建时间
*/
TIM_GET_GROUP_BASE_INFO_FLAG_CREATE_TIME = 0x01 << 1,
/**
* 获取群主id
*/
TIM_GET_GROUP_BASE_INFO_FLAG_OWNER_UIN = 0x01 << 2,
/**
* (不可用)
*/
TIM_GET_GROUP_BASE_INFO_FLAG_SEQ = 0x01 << 3,
/**
* 获取最近一次修改群信息时间
*/
TIM_GET_GROUP_BASE_INFO_FLAG_TIME = 0x01 << 4,
/**
* (不可用)
*/
TIM_GET_GROUP_BASE_INFO_FLAG_NEXT_MSG_SEQ = 0x01 << 5,
/**
* 获取最近一次发消息时间
*/
TIM_GET_GROUP_BASE_INFO_FLAG_LAST_MSG_TIME = 0x01 << 6,
/**
* (不可用)
*/
TIM_GET_GROUP_BASE_INFO_FLAG_APP_ID = 0x01 << 7,
/**
* 获取群成员数量
*/
TIM_GET_GROUP_BASE_INFO_FLAG_MEMBER_NUM = 0x01 << 8,
/**
* 获取最大群成员数量
*/
TIM_GET_GROUP_BASE_INFO_FLAG_MAX_MEMBER_NUM = 0x01 << 9,
/**
* 获取群公告
*/
TIM_GET_GROUP_BASE_INFO_FLAG_NOTIFICATION = 0x01 << 10,
/**
* 获取群简介
*/
TIM_GET_GROUP_BASE_INFO_FLAG_INTRODUCTION = 0x01 << 11,
/**
* 获取群头像
*/
TIM_GET_GROUP_BASE_INFO_FLAG_FACE_URL = 0x01 << 12,
/**
* 获取入群类型
*/
TIM_GET_GROUP_BASE_INFO_FLAG_ADD_OPTION = 0x01 << 13,
/**
* 获取群组类型
*/
TIM_GET_GROUP_BASE_INFO_FLAG_GROUP_TYPE = 0x01 << 14,
/**
* 获取最后一条群消息
*/
TIM_GET_GROUP_BASE_INFO_FLAG_LAST_MSG = 0x01 << 15,
/**
* 获取在线人数
*/
TIM_GET_GROUP_BASE_INFO_FLAG_ONLINE_NUM = 0x01 << 16,
/**
* 获取群成员是否可见标志
*/
TIM_GET_GROUP_BASE_INFO_VISIBLE = 0x01 << 17,
/**
* 获取群是否能被搜到标志
*/
TIM_GET_GROUP_BASE_INFO_SEARCHABLE = 0x01 << 18,
/**
* 获取群全员禁言时间
*/
TIM_GET_GROUP_BASE_INFO_ALL_SHUTUP = 0x01 << 19
};
/**
* 群成员角色过滤方式
*/
typedef NS_ENUM(NSInteger, TIMGroupMemberFilter) {
/**
* 全部成员
*/
TIM_GROUP_MEMBER_FILTER_ALL = 0x00,
/**
* 群主
*/
TIM_GROUP_MEMBER_FILTER_SUPER = 0x01,
/**
* 管理员
*/
TIM_GROUP_MEMBER_FILTER_ADMIN = 0x02,
/**
* 普通成员
*/
TIM_GROUP_MEMBER_FILTER_COMMON = 0x04,
};
/**
* 群成员获取资料标志
*/
typedef NS_ENUM(NSInteger, TIMGetGroupMemInfoFlag) {
/**
* 入群时间
*/
TIM_GET_GROUP_MEM_INFO_FLAG_JOIN_TIME = 0x01,
/**
* 消息标志
*/
TIM_GET_GROUP_MEM_INFO_FLAG_MSG_FLAG = 0x01 << 1,
/**
* 角色
*/
TIM_GET_GROUP_MEM_INFO_FLAG_ROLE_INFO = 0x01 << 3,
/**
* 禁言时间
*/
TIM_GET_GROUP_MEM_INFO_FLAG_SHUTUP_TIME = 0x01 << 4,
/**
* 群名片
*/
TIM_GET_GROUP_MEM_INFO_FLAG_NAME_CARD = 0x01 << 5,
};
/**
* 群组操作结果
*/
typedef NS_ENUM(NSInteger, TIMGroupMemberStatus) {
/**
* 操作失败
*/
TIM_GROUP_MEMBER_STATUS_FAIL = 0,
/**
* 操作成功
*/
TIM_GROUP_MEMBER_STATUS_SUCC = 1,
/**
* 无效操作,加群时已经是群成员,移除群组时不在群内
*/
TIM_GROUP_MEMBER_STATUS_INVALID = 2,
/**
* 等待处理,邀请入群时等待对方处理
*/
TIM_GROUP_MEMBER_STATUS_PENDING = 3,
};
typedef NS_ENUM(NSInteger, TIMGroupPendencyGetType) {
/**
* 申请入群
*/
TIM_GROUP_PENDENCY_GET_TYPE_JOIN = 0x0,
/**
* 邀请入群
*/
TIM_GROUP_PENDENCY_GET_TYPE_INVITE = 0x1,
};
typedef NS_ENUM(NSInteger, TIMGroupPendencyHandleStatus) {
/**
* 未处理
*/
TIM_GROUP_PENDENCY_HANDLE_STATUS_UNHANDLED = 0,
/**
* 被他人处理
*/
TIM_GROUP_PENDENCY_HANDLE_STATUS_OTHER_HANDLED = 1,
/**
* 被用户处理
*/
TIM_GROUP_PENDENCY_HANDLE_STATUS_OPERATOR_HANDLED = 2,
};
typedef NS_ENUM(NSInteger, TIMGroupPendencyHandleResult) {
/**
* 拒绝申请
*/
TIM_GROUP_PENDENCY_HANDLE_RESULT_REFUSE = 0,
/**
* 同意申请
*/
TIM_GROUP_PENDENCY_HANDLE_RESULT_AGREE = 1,
};
#pragma mark - block回调
/**
* 群成员列表回调
*
* @param members 群成员列表,成员类型 TIMGroupMemberInfo
*/
typedef void (^TIMGroupMemberSucc)(NSArray * members);
/**
* 群列表回调
*
* @param arr 群列表,成员类型 TIMGroupInfo
*/
typedef void (^TIMGroupListSucc)(NSArray * arr);
/**
* 本人群组内成员信息回调
*
* @param selfInfo 本人成员信息
*/
typedef void (^TIMGroupSelfSucc)(TIMGroupMemberInfo * selfInfo);
/**
* 群接受消息选项回调
*
* @param opt 群接受消息选项
*/
typedef void (^TIMGroupReciveMessageOptSucc)(TIMGroupReceiveMessageOpt opt);
/**
* 群成员列表回调(分页使用)
*
* @param members 群成员(TIMGroupMemberInfo*)列表
*/
typedef void (^TIMGroupMemberSuccV2)(uint64_t nextSeq, NSArray * members);
/**
* 群搜索回调
*
* @param totalNum 搜索结果的总数
* @param groups 请求的群列表片段
*/
typedef void (^TIMGroupSearchSucc)(uint64_t totalNum, NSArray * groups);
/**
* 获取群组未决请求列表成功
*
* @param meta 未决请求元信息
* @param pendencies 未决请求列表(TIMGroupPendencyItem)数组
*/
typedef void (^TIMGetGroupPendencyListSucc)(TIMGroupPendencyMeta * meta, NSArray * pendencies);
#pragma mark - 基本类型
/**
* 创建群参数
*/
@interface TIMCreateGroupInfo : TIMCodingModel
/**
* 群组Id,nil则使用系统默认Id
*/
@property(nonatomic,strong) NSString* group;
/**
* 群名
*/
@property(nonatomic,strong) NSString* groupName;
/**
* 群类型:Private,Public,ChatRoom,AVChatRoom,BChatRoom
*/
@property(nonatomic,strong) NSString* groupType;
/**
* 是否设置入群选项,Private类型群组请设置为false
*/
@property(nonatomic,assign) BOOL setAddOpt;
/**
* 入群选项
*/
@property(nonatomic,assign) TIMGroupAddOpt addOpt;
/**
* 最大成员数,填0则系统使用默认值
*/
@property(nonatomic,assign) uint32_t maxMemberNum;
/**
* 群公告
*/
@property(nonatomic,strong) NSString* notification;
/**
* 群简介
*/
@property(nonatomic,strong) NSString* introduction;
/**
* 群头像
*/
@property(nonatomic,strong) NSString* faceURL;
/**
* 自定义字段集合,key是NSString*类型,value是NSData*类型
*/
@property(nonatomic,strong) NSDictionary* customInfo;
/**
* 创建成员(TIMCreateGroupMemberInfo*)列表
*/
@property(nonatomic,strong) NSArray* membersInfo;
@end
/**
* 未决请求选项
*/
@interface TIMGroupPendencyOption : TIMCodingModel
/**
* 拉取的起始时间 0:拉取最新的
*/
@property(nonatomic,assign) uint64_t timestamp;
/**
* 每页的数量
*/
@property(nonatomic,assign) uint32_t numPerPage;
@end
/**
* 未决请求元信息
*/
@interface TIMGroupPendencyMeta : TIMCodingModel
/**
* 下一次拉取的起始时间戳
*/
@property(nonatomic,assign) uint64_t nextStartTime;
/**
* 已读时间戳大小
*/
@property(nonatomic,assign) uint64_t readTimeSeq;
/**
* 未决未读数
*/
@property(nonatomic,assign) uint32_t unReadCnt;
@end
/**
* 创建群组时的成员信息
*/
@interface TIMCreateGroupMemberInfo : TIMCodingModel
/**
* 被操作成员
*/
@property(nonatomic,strong) NSString* member;
/**
* 成员类型
*/
@property(nonatomic,assign) TIMGroupMemberRole role;
/**
* 自定义字段集合,key是NSString*类型,value是NSData*类型
*/
@property(nonatomic,strong) NSDictionary* customInfo;
@end
/**
* 成员操作返回值
*/
@interface TIMGroupMemberResult : NSObject
/**
* 被操作成员
*/
@property(nonatomic,strong) NSString* member;
/**
* 返回状态
*/
@property(nonatomic,assign) TIMGroupMemberStatus status;
@end
/**
* 未决申请
*/
@interface TIMGroupPendencyItem : TIMCodingModel
/**
* 相关群组id
*/
@property(nonatomic,strong) NSString* groupId;
/**
* 请求者id,请求加群:请求者,邀请加群:邀请人
*/
@property(nonatomic,strong) NSString* fromUser;
/**
* 判决者id,请求加群:0,邀请加群:被邀请人
*/
@property(nonatomic,strong) NSString* toUser;
/**
* 未决添加时间
*/
@property(nonatomic,assign) uint64_t addTime;
/**
* 未决请求类型
*/
@property(nonatomic,assign) TIMGroupPendencyGetType getType;
/**
* 已决标志
*/
@property(nonatomic,assign) TIMGroupPendencyHandleStatus handleStatus;
/**
* 已决结果
*/
@property(nonatomic,assign) TIMGroupPendencyHandleResult handleResult;
/**
* 申请或邀请附加信息
*/
@property(nonatomic,strong) NSString* requestMsg;
/**
* 审批信息:同意或拒绝信息
*/
@property(nonatomic,strong) NSString* handledMsg;
/**
* 同意申请
*
* @param msg 同意理由,选填
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
-(void) accept:(NSString*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 拒绝申请
*
* @param msg 拒绝理由,选填
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
-(void) refuse:(NSString*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 用户自己的id
*/
@property(nonatomic,strong) NSString* selfIdentifier;
@end
#endif /* TIMComm_Group_h */
//
// TIMComm+MsgExt.h
// IMMessageExt
//
// Created by tomzhu on 2017/1/11.
//
//
#ifndef TIMComm_MsgExt_h
#define TIMComm_MsgExt_h
#import <Foundation/Foundation.h>
#import "TIMComm.h"
@class TIMSendToUsersDetailInfo;
#pragma mark - 枚举类型
typedef NS_ENUM(NSInteger, TIM_SNS_SYSTEM_TYPE){
/**
* 增加好友消息
*/
TIM_SNS_SYSTEM_ADD_FRIEND = 0x01,
/**
* 删除好友消息
*/
TIM_SNS_SYSTEM_DEL_FRIEND = 0x02,
/**
* 增加好友申请
*/
TIM_SNS_SYSTEM_ADD_FRIEND_REQ = 0x03,
/**
* 删除未决申请
*/
TIM_SNS_SYSTEM_DEL_FRIEND_REQ = 0x04,
/**
* 黑名单添加
*/
TIM_SNS_SYSTEM_ADD_BLACKLIST = 0x05,
/**
* 黑名单删除
*/
TIM_SNS_SYSTEM_DEL_BLACKLIST = 0x06,
/**
* 未决已读上报
*/
TIM_SNS_SYSTEM_PENDENCY_REPORT = 0x07,
/**
* 关系链资料变更
*/
TIM_SNS_SYSTEM_SNS_PROFILE_CHANGE = 0x08,
/**
* 推荐数据增加
*/
TIM_SNS_SYSTEM_ADD_RECOMMEND = 0x09,
/**
* 推荐数据删除
*/
TIM_SNS_SYSTEM_DEL_RECOMMEND = 0x0a,
/**
* 已决增加
*/
TIM_SNS_SYSTEM_ADD_DECIDE = 0x0b,
/**
* 已决删除
*/
TIM_SNS_SYSTEM_DEL_DECIDE = 0x0c,
/**
* 推荐已读上报
*/
TIM_SNS_SYSTEM_RECOMMEND_REPORT = 0x0d,
/**
* 已决已读上报
*/
TIM_SNS_SYSTEM_DECIDE_REPORT = 0x0e,
};
/**
* 资料变更
*/
typedef NS_ENUM(NSInteger, TIM_PROFILE_SYSTEM_TYPE){
/**
好友资料变更
*/
TIM_PROFILE_SYSTEM_FRIEND_PROFILE_CHANGE = 0x01,
};
#pragma mark - block回调
typedef void (^TIMSendToUsersFail)(int code, NSString *err, TIMSendToUsersDetailInfo *detailInfo);
#pragma mark - 基本类型
/**
* 发送消息给多用户的失败回调信息
*/
@interface TIMSendToUsersDetailInfo : NSObject
/**
* 发送消息成功的目标用户数
*/
@property(nonatomic,assign) uint32_t succCnt;
/**
* 发送消息失败的目标用户数
*/
@property(nonatomic,assign) uint32_t failCnt;
/**
* 失败信息(TIMSendToUsersErrInfo*)列表
*/
@property(nonatomic,strong) NSArray *errInofs;
@end
/**
* 发送消息给多用户的失败信息
*/
@interface TIMSendToUsersErrInfo : NSObject
/**
* 发送消息失败的目标用户id
*/
@property(nonatomic,strong) NSString *identifier;
/**
* 错误码
*/
@property(nonatomic,assign) int code;
/**
* 错误描述
*/
@property(nonatomic,strong) NSString *err;
@end
/**
* 关系链变更详细信息
*/
@interface TIMSNSChangeInfo : NSObject
/**
* 用户 identifier
*/
@property(nonatomic,strong) NSString * identifier;
/**
* 用户昵称
*/
@property(nonatomic,strong) NSString * nickname;
/**
* 申请添加时有效,添加理由
*/
@property(nonatomic,strong) NSString * wording;
/**
* 申请时填写,添加来源
*/
@property(nonatomic,strong) NSString * source;
/**
* 备注 type=TIM_SNS_SYSTEM_SNS_PROFILE_CHANGE 有效
*/
@property(nonatomic,strong) NSString * remark;
@end
#endif /* TIMComm_MsgExt_h */
//
// TIMComm.h
// ImSDK
//
// Created by bodeng on 29/1/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_TIMComm_h
#define ImSDK_TIMComm_h
#import <Foundation/Foundation.h>
#define ERR_IMSDK_KICKED_BY_OTHERS 6208
@protocol TIMConnListener;
@protocol TIMUserStatusListener;
@protocol TIMRefreshListener;
@protocol TIMMessageReceiptListener;
@protocol TIMMessageUpdateListener;
@protocol TIMMessageRevokeListener;
@protocol TIMUploadProgressListener;
@protocol TIMGroupEventListener;
@protocol TIMFriendshipListener;
//@protocol TIMGroupListener;
@class TIMMessage;
@class TIMImageElem;
@class TIMConversation;
@class TIMAPNSConfig;
@class TIMUserProfile;
@class TIMFriend;
@class TIMGroupInfoOption;
@class TIMGroupMemberInfoOption;
@class TIMFriendProfileOption;
@class TIMFriendResult;
#pragma mark - 枚举类型
/**
* 网络连接状态
*/
typedef NS_ENUM(NSInteger, TIMNetworkStatus) {
/**
* 已连接
*/
TIM_NETWORK_STATUS_CONNECTED = 1,
/**
* 链接断开
*/
TIM_NETWORK_STATUS_DISCONNECTED = 2,
};
/**
* 日志级别
*/
typedef NS_ENUM(NSInteger, TIMLogLevel) {
/**
* 不输出任何 sdk log
*/
TIM_LOG_NONE = 0,
/**
* 输出 DEBUG,INFO,WARNING,ERROR 级别的 log
*/
TIM_LOG_DEBUG = 3,
/**
* 输出 INFO,WARNING,ERROR 级别的 log
*/
TIM_LOG_INFO = 4,
/**
* 输出 WARNING,ERROR 级别的 log
*/
TIM_LOG_WARN = 5,
/**
* 输出 ERROR 级别的 log
*/
TIM_LOG_ERROR = 6,
};
/**
* 会话类型:
* C2C 双人聊天
* GROUP 群聊
*/
typedef NS_ENUM(NSInteger, TIMConversationType) {
/**
* C2C 类型
*/
TIM_C2C = 1,
/**
* 群聊 类型
*/
TIM_GROUP = 2,
/**
* 系统消息
*/
TIM_SYSTEM = 3,
};
/**
* 消息状态
*/
typedef NS_ENUM(NSInteger, TIMMessageStatus){
/**
* 消息发送中
*/
TIM_MSG_STATUS_SENDING = 1,
/**
* 消息发送成功
*/
TIM_MSG_STATUS_SEND_SUCC = 2,
/**
* 消息发送失败
*/
TIM_MSG_STATUS_SEND_FAIL = 3,
/**
* 消息被删除
*/
TIM_MSG_STATUS_HAS_DELETED = 4,
/**
* 导入到本地的消息
*/
TIM_MSG_STATUS_LOCAL_STORED = 5,
/**
* 被撤销的消息
*/
TIM_MSG_STATUS_LOCAL_REVOKED = 6,
};
/**
* 消息优先级标识
*/
typedef NS_ENUM(NSInteger, TIMMessagePriority) {
/**
* 高优先级,一般为红包或者礼物消息
*/
TIM_MSG_PRIORITY_HIGH = 1,
/**
* 普通优先级,普通消息
*/
TIM_MSG_PRIORITY_NORMAL = 2,
/**
* 低优先级,一般为点赞消息
*/
TIM_MSG_PRIORITY_LOW = 3,
/**
* 最低优先级,一般为后台下发的成员进退群通知
*/
TIM_MSG_PRIORITY_LOWEST = 4,
};
/**
* 图片压缩选项
*/
typedef NS_ENUM(NSInteger, TIM_IMAGE_COMPRESS_TYPE){
/**
* 原图(不压缩)
*/
TIM_IMAGE_COMPRESS_ORIGIN = 0x00,
/**
* 高压缩率:图片较小,默认值
*/
TIM_IMAGE_COMPRESS_HIGH = 0x01,
/**
* 低压缩:高清图发送(图片较大)
*/
TIM_IMAGE_COMPRESS_LOW = 0x02,
};
/**
* 图片类型
*/
typedef NS_ENUM(NSInteger, TIM_IMAGE_TYPE){
/**
* 原图
*/
TIM_IMAGE_TYPE_ORIGIN = 0x01,
/**
* 缩略图
*/
TIM_IMAGE_TYPE_THUMB = 0x02,
/**
* 大图
*/
TIM_IMAGE_TYPE_LARGE = 0x04,
};
/**
* 图片格式
*/
typedef NS_ENUM(NSInteger, TIM_IMAGE_FORMAT){
/**
* JPG 格式
*/
TIM_IMAGE_FORMAT_JPG = 0x1,
/**
* GIF 格式
*/
TIM_IMAGE_FORMAT_GIF = 0x2,
/**
* PNG 格式
*/
TIM_IMAGE_FORMAT_PNG = 0x3,
/**
* BMP 格式
*/
TIM_IMAGE_FORMAT_BMP = 0x4,
/**
* 未知格式
*/
TIM_IMAGE_FORMAT_UNKNOWN = 0xff,
};
/**
* 登录状态
*/
typedef NS_ENUM(NSInteger, TIMLoginStatus) {
/**
* 已登陆
*/
TIM_STATUS_LOGINED = 1,
/**
* 登陆中
*/
TIM_STATUS_LOGINING = 2,
/**
* 无登陆
*/
TIM_STATUS_LOGOUT = 3,
};
/**
* 群组成员是否可见
*/
typedef NS_ENUM(NSInteger, TIMGroupMemberVisibleType) {
/**
* 未知
*/
TIM_GROUP_MEMBER_VISIBLE_UNKNOWN = 0x00,
/**
* 群组成员不可见
*/
TIM_GROUP_MEMBER_VISIBLE_NO = 0x01,
/**
* 群组成员可见
*/
TIM_GROUP_MEMBER_VISIBLE_YES = 0x02,
};
/**
* 群组是否能被搜到
*/
typedef NS_ENUM(NSInteger, TIMGroupSearchableType) {
/**
* 未知
*/
TIM_GROUP_SEARCHABLE_UNKNOWN = 0x00,
/**
* 群组不能被搜到
*/
TIM_GROUP_SEARCHABLE_NO = 0x01,
/**
* 群组能被搜到
*/
TIM_GROUP_SEARCHABLE_YES = 0x02,
};
/**
* 加群选项
*/
typedef NS_ENUM(NSInteger, TIMGroupAddOpt) {
/**
* 禁止加群
*/
TIM_GROUP_ADD_FORBID = 0,
/**
* 需要管理员审批
*/
TIM_GROUP_ADD_AUTH = 1,
/**
* 任何人可以加入
*/
TIM_GROUP_ADD_ANY = 2,
};
/**
* 群组提示类型
*/
typedef NS_ENUM(NSInteger, TIMGroupTipsType){
/**
* 成员加入
*/
TIM_GROUP_TIPS_JOIN = 1,
/**
* 成员离开
*/
TIM_GROUP_TIPS_QUIT = 2,
/**
* 成员被踢
*/
TIM_GROUP_TIPS_KICK = 3,
/**
* 成员设置管理员
*/
TIM_GROUP_TIPS_SET_ADMIN = 4,
/**
* 成员取消管理员
*/
TIM_GROUP_TIPS_CANCEL_ADMIN = 5,
};
/**
* 群消息接受选项
*/
typedef NS_ENUM(NSInteger, TIMGroupReceiveMessageOpt) {
/**
* 接收消息
*/
TIM_GROUP_RECEIVE_MESSAGE = 0,
/**
* 不接收消息,服务器不进行转发
*/
TIM_GROUP_NOT_RECEIVE_MESSAGE = 1,
/**
* 接受消息,不进行 iOS APNs 推送
*/
TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE = 2,
};
/**
* 群 Tips 类型
*/
typedef NS_ENUM(NSInteger, TIM_GROUP_TIPS_TYPE){
/**
* 邀请加入群 (opUser & groupName & userList)
*/
TIM_GROUP_TIPS_TYPE_INVITE = 0x01,
/**
* 退出群 (opUser & groupName & userList)
*/
TIM_GROUP_TIPS_TYPE_QUIT_GRP = 0x02,
/**
* 踢出群 (opUser & groupName & userList)
*/
TIM_GROUP_TIPS_TYPE_KICKED = 0x03,
/**
* 设置管理员 (opUser & groupName & userList)
*/
TIM_GROUP_TIPS_TYPE_SET_ADMIN = 0x04,
/**
* 取消管理员 (opUser & groupName & userList)
*/
TIM_GROUP_TIPS_TYPE_CANCEL_ADMIN = 0x05,
/**
* 群资料变更 (opUser & groupName & introduction & notification & faceUrl & owner)
*/
TIM_GROUP_TIPS_TYPE_INFO_CHANGE = 0x06,
/**
* 群成员资料变更 (opUser & groupName & memberInfoList)
*/
TIM_GROUP_TIPS_TYPE_MEMBER_INFO_CHANGE = 0x07,
};
/**
* 群变更信息 Tips 类型
*/
typedef NS_ENUM(NSInteger, TIM_GROUP_INFO_CHANGE_TYPE){
/**
* 群名修改
*/
TIM_GROUP_INFO_CHANGE_GROUP_NAME = 0x01,
/**
* 群简介修改
*/
TIM_GROUP_INFO_CHANGE_GROUP_INTRODUCTION = 0x02,
/**
* 群公告修改
*/
TIM_GROUP_INFO_CHANGE_GROUP_NOTIFICATION = 0x03,
/**
* 群头像修改
*/
TIM_GROUP_INFO_CHANGE_GROUP_FACE = 0x04,
/**
* 群主变更
*/
TIM_GROUP_INFO_CHANGE_GROUP_OWNER = 0x05,
};
/**
* 群系统消息类型
*/
typedef NS_ENUM(NSInteger, TIM_GROUP_SYSTEM_TYPE){
/**
* 申请加群请求(只有管理员会收到)
*/
TIM_GROUP_SYSTEM_ADD_GROUP_REQUEST_TYPE = 0x01,
/**
* 申请加群被同意(只有申请人能够收到)
*/
TIM_GROUP_SYSTEM_ADD_GROUP_ACCEPT_TYPE = 0x02,
/**
* 申请加群被拒绝(只有申请人能够收到)
*/
TIM_GROUP_SYSTEM_ADD_GROUP_REFUSE_TYPE = 0x03,
/**
* 被管理员踢出群(只有被踢的人能够收到)
*/
TIM_GROUP_SYSTEM_KICK_OFF_FROM_GROUP_TYPE = 0x04,
/**
* 群被解散(全员能够收到)
*/
TIM_GROUP_SYSTEM_DELETE_GROUP_TYPE = 0x05,
/**
* 创建群消息(创建者能够收到)
*/
TIM_GROUP_SYSTEM_CREATE_GROUP_TYPE = 0x06,
/**
* 邀请入群通知(被邀请者能够收到)
*/
TIM_GROUP_SYSTEM_INVITED_TO_GROUP_TYPE = 0x07,
/**
* 主动退群(主动退群者能够收到)
*/
TIM_GROUP_SYSTEM_QUIT_GROUP_TYPE = 0x08,
/**
* 设置管理员(被设置者接收)
*/
TIM_GROUP_SYSTEM_GRANT_ADMIN_TYPE = 0x09,
/**
* 取消管理员(被取消者接收)
*/
TIM_GROUP_SYSTEM_CANCEL_ADMIN_TYPE = 0x0a,
/**
* 群已被回收(全员接收)
*/
TIM_GROUP_SYSTEM_REVOKE_GROUP_TYPE = 0x0b,
/**
* 邀请入群请求(被邀请者接收)
*/
TIM_GROUP_SYSTEM_INVITE_TO_GROUP_REQUEST_TYPE = 0x0c,
/**
* 邀请加群被同意(只有发出邀请者会接收到)
*/
TIM_GROUP_SYSTEM_INVITE_TO_GROUP_ACCEPT_TYPE = 0x0d,
/**
* 邀请加群被拒绝(只有发出邀请者会接收到)
*/
TIM_GROUP_SYSTEM_INVITE_TO_GROUP_REFUSE_TYPE = 0x0e,
/**
* 用户自定义通知(默认全员接收)
*/
TIM_GROUP_SYSTEM_CUSTOM_INFO = 0xff,
};
/**
* 推送规则
*/
typedef NS_ENUM(NSInteger, TIMOfflinePushFlag) {
/**
* 按照默认规则进行推送
*/
TIM_OFFLINE_PUSH_DEFAULT = 0,
/**
* 不进行推送
*/
TIM_OFFLINE_PUSH_NO_PUSH = 1,
};
/**
* 安卓离线推送模式
*/
typedef NS_ENUM(NSInteger, TIMAndroidOfflinePushNotifyMode) {
/**
* 通知栏消息
*/
TIM_ANDROID_OFFLINE_PUSH_NOTIFY_MODE_NOTIFICATION = 0x00,
/**
* 不弹窗,由应用自行处理
*/
TIM_ANDROID_OFFLINE_PUSH_NOTIFY_MODE_CUSTOM = 0x01,
};
/**
* 群成员角色
*/
typedef NS_ENUM(NSInteger, TIMGroupMemberRole) {
/**
* 未定义(没有获取该字段)
*/
TIM_GROUP_MEMBER_UNDEFINED = 0,
/**
* 群成员
*/
TIM_GROUP_MEMBER_ROLE_MEMBER = 200,
/**
* 群管理员
*/
TIM_GROUP_MEMBER_ROLE_ADMIN = 300,
/**
* 群主
*/
TIM_GROUP_MEMBER_ROLE_SUPER = 400,
};
/**
* 好友验证方式
*/
typedef NS_ENUM(NSInteger, TIMFriendAllowType) {
/**
* 同意任何用户加好友
*/
TIM_FRIEND_ALLOW_ANY = 0,
/**
* 需要验证
*/
TIM_FRIEND_NEED_CONFIRM = 1,
/**
* 拒绝任何人加好友
*/
TIM_FRIEND_DENY_ANY = 2,
};
/**
* 性别
*/
typedef NS_ENUM(NSInteger, TIMGender) {
/**
* 未知性别
*/
TIM_GENDER_UNKNOWN = 0,
/**
* 男性
*/
TIM_GENDER_MALE = 1,
/**
* 女性
*/
TIM_GENDER_FEMALE = 2,
};
#pragma mark - block 回调
/**
* 获取消息回调
*
* @param msgs 消息列表
*/
typedef void (^TIMGetMsgSucc)(NSArray * msgs);
/**
* 一般操作成功回调
*/
typedef void (^TIMSucc)(void);
/**
* 操作失败回调
*
* @param code 错误码
* @param msg 错误描述,配合错误码使用,如果问题建议打印信息定位
*/
typedef void (^TIMFail)(int code, NSString * msg);
/**
* 进度毁掉
*
* @param curSize 已下载大小
* @param totalSize 总大小
*/
typedef void (^TIMProgress)(NSInteger curSize, NSInteger totalSize);
/**
* 登陆成功回调
*/
typedef void (^TIMLoginSucc)(void);
/**
* 获取资源
*
* @param data 资源二进制
*/
typedef void (^TIMGetResourceSucc)(NSData * data);
/**
* 日志回调
*
* @param lvl 输出的日志级别
* @param msg 日志内容
*/
typedef void (^TIMLogFunc)(TIMLogLevel lvl, NSString * msg);
/**
* 上传图片成功回调
*
* @param elem 上传图片成功后 elem
*/
typedef void (^TIMUploadImageSucc)(TIMImageElem * elem);
/**
* APNs 推送配置更新成功回调
*
* @param config 配置
*/
typedef void (^TIMAPNSConfigSucc)(TIMAPNSConfig* config);
/**
* 群创建成功
*
* @param groupId 群组 Id
*/
typedef void (^TIMCreateGroupSucc)(NSString * groupId);
/**
* 好友列表
*
* @param friends 好友列表
*/
typedef void (^TIMFriendArraySucc)(NSArray<TIMFriend *> *friends);
/**
* 获取资料回调
*
* @param profile 资料
*/
typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
/**
* 获取资料回调
*
* @param profiles 资料
*/
typedef void (^TIMUserProfileArraySucc)(NSArray<TIMUserProfile *> *profiles);
/**
* 好友操作回调
*
* @param result 资料
*/
typedef void (^TIMFriendResultSucc)(TIMFriendResult *result);
/**
* 好友操作回调
*
* @param results 资料
*/
typedef void (^TIMFriendResultArraySucc)(NSArray<TIMFriendResult *> *results);
#pragma mark - 基本类型
/// 实现 NSCoding 协议
@interface TIMCodingModel : NSObject <NSCoding>
///读取实例变量,并把这些数据写到 coder 中去,序列化数据
- (void)encodeWithCoder:(NSCoder *)encoder;
///从 coder 中读取数据,保存到相应的变量中,即反序列化数据
- (id)initWithCoder:(NSCoder *)decoder;
@end
/// 初始化 SDK 配置信息
@interface TIMSdkConfig : NSObject
///用户标识接入 SDK 的应用 ID,必填
@property(nonatomic,assign) int sdkAppId;
///用户的账号类型,必填
@property(nonatomic,strong) NSString * accountType;
///禁用 crash 上报,默认上报 (方法已废弃,客户需要自己集成 Crash 上报逻辑)
@property(nonatomic,assign) BOOL disableCrashReport DEPRECATED_ATTRIBUTE;
///禁止在控制台打印 log
@property(nonatomic,assign) BOOL disableLogPrint;
///本地写 log 文件的等级,默认 DEBUG 等级
@property(nonatomic,assign) TIMLogLevel logLevel;
///log 文件路径,不设置时为默认路径
@property(nonatomic,strong) NSString * logPath;
///回调给 log 函数的 log 等级,默认 DEBUG 等级
@property(nonatomic,assign) TIMLogLevel logFuncLevel;
///log 监听函数
@property(nonatomic,copy) TIMLogFunc logFunc;
///消息数据库路径,不设置时为默认路径
@property(nonatomic,strong) NSString * dbPath;
///网络监听器
@property(nonatomic,strong) id<TIMConnListener> connListener;
@end
/// 设置用户配置信息
@interface TIMUserConfig : NSObject
///禁用本地存储(暂未实现)
//@property(nonatomic,assign) BOOL disableStorage;
///禁止消息已读自动上报,一旦禁用自动上报,需要开发者显式调用 setReadMessage ,详情请参考官网文档 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)
@property(nonatomic,assign) BOOL disableAutoReport;
///开启 C2C 已读回执,只针对 C2C 消息生效,用户开启已读回执功能后,对方调用 setReadMessage 时会同步已读信息到本客户端,您可以在 TIMMessageReceiptListener 监听消息已读回执
@property(nonatomic,assign) BOOL enableReadReceipt;
///不开启最近联系人(暂未实现)
//@property(nonatomic,assign) BOOL disableRecnetContact;
///不通过 onNewMessage: 抛出最近联系人的最后一条消息(暂未实现)
//@property(nonatomic,assign) BOOL disableRecentContactNotify;
///设置默认拉取的群组资料
@property(nonatomic,strong) TIMGroupInfoOption * groupInfoOpt;
///设置默认拉取的群成员资料
@property(nonatomic,strong) TIMGroupMemberInfoOption * groupMemberInfoOpt;
///关系链参数
@property(nonatomic,strong) TIMFriendProfileOption * friendProfileOpt;
///用户登录状态监听器
@property(nonatomic,strong) id<TIMUserStatusListener> userStatusListener;
///会话刷新监听器(未读计数、已读同步)
@property(nonatomic,strong) id<TIMRefreshListener> refreshListener;
///消息已读回执监听器
@property(nonatomic,strong) id<TIMMessageReceiptListener> messageReceiptListener;
///消息 svr 重写监听器
@property(nonatomic,strong) id<TIMMessageUpdateListener> messageUpdateListener;
///消息撤回监听器
@property(nonatomic,strong) id<TIMMessageRevokeListener> messageRevokeListener;
///文件上传进度监听器
@property(nonatomic,strong) id<TIMUploadProgressListener> uploadProgressListener;
///群组事件通知监听器
@property(nonatomic,strong) id<TIMGroupEventListener> groupEventListener;
///关系链数据本地缓存监听器
@property(nonatomic,strong) id<TIMFriendshipListener> friendshipListener;
@end
/// 登陆参数
@interface TIMLoginParam : NSObject
///用户名
@property(nonatomic,strong) NSString* identifier;
///鉴权 Token
@property(nonatomic,strong) NSString* userSig;
///App 用户使用 OAuth 授权体系分配的 Appid
@property(nonatomic,strong) NSString* appidAt3rd;
@end
/// APNs 配置
@interface TIMAPNSConfig : NSObject
///是否开启推送:0-不进行设置 1-开启推送 2-关闭推送
@property(nonatomic,assign) uint32_t openPush;
///C2C 消息声音,不设置传入 nil
@property(nonatomic,strong) NSString * c2cSound;
///Group 消息声音,不设置传入 nil
@property(nonatomic,strong) NSString * groupSound;
///Video 音视频邀请声音,不设置传入 nil
@property(nonatomic,strong) NSString * videoSound;
@end
/// SetToken 参数
@interface TIMTokenParam : NSObject
///获取的客户端 Token 信息
@property(nonatomic,strong) NSData* token;
///业务 ID,传递证书时分配
@property(nonatomic,assign) uint32_t busiId;
@end
/// 切后台参数
@interface TIMBackgroundParam : NSObject
///C2C 未读计数
@property(nonatomic,assign) int c2cUnread;
///群未读计数
@property(nonatomic,assign) int groupUnread;
@end
/// 消息定位
@interface TIMMessageLocator : NSObject
///所属会话的 id
@property(nonatomic,strong) NSString * sessId;
///所属会话的类型
@property(nonatomic,assign) TIMConversationType sessType;
///消息序列号
@property(nonatomic,assign) uint64_t seq;
///消息随机码
@property(nonatomic,assign) uint64_t rand;
///消息时间戳
@property(nonatomic,assign) time_t time;
///是否本人消息
@property(nonatomic,assign) BOOL isSelf;
///是否来自撤销通知
@property(nonatomic,assign) BOOL isFromRevokeNotify;
@end
/// 已读回执
@interface TIMMessageReceipt : NSObject
///已读回执对应的会话(目前只支持 C2C 会话)
@property(nonatomic,strong) TIMConversation * conversation;
///收到已读回执时,这个时间戳之前的消息都已读
@property(nonatomic,assign) time_t timestamp;
@end
/// Android 离线推送配置
@interface TIMAndroidOfflinePushConfig : NSObject
///离线推送时展示标签
@property(nonatomic,strong) NSString * title;
///Android 离线 Push 时声音字段信息
@property(nonatomic,strong) NSString * sound;
///离线推送时通知形式
@property(nonatomic,assign) TIMAndroidOfflinePushNotifyMode notifyMode;
@end
/// iOS 离线推送配置
@interface TIMIOSOfflinePushConfig : NSObject
///离线 Push 时声音字段信息
@property(nonatomic,strong) NSString * sound;
///忽略 badge 计数
@property(nonatomic,assign) BOOL ignoreBadge;
@end
/// 群组内的本人信息
@interface TIMGroupSelfInfo : NSObject
///加入群组时间
@property(nonatomic,assign) uint32_t joinTime;
///群组中的角色
@property(nonatomic,assign) TIMGroupMemberRole role;
///群组消息接收选项
@property(nonatomic,assign) TIMGroupReceiveMessageOpt recvOpt;
///群组中的未读消息数
@property(nonatomic,assign) uint32_t unReadMessageNum;
@end
/// 群资料信息
@interface TIMGroupInfo : TIMCodingModel
///群组 Id
@property(nonatomic,strong) NSString* group;
///群名
@property(nonatomic,strong) NSString* groupName;
///群创建人/管理员
@property(nonatomic,strong) NSString * owner;
///群类型:Private,Public,ChatRoom
@property(nonatomic,strong) NSString* groupType;
///群创建时间
@property(nonatomic,assign) uint32_t createTime;
///最近一次群资料修改时间
@property(nonatomic,assign) uint32_t lastInfoTime;
///最近一次发消息时间
@property(nonatomic,assign) uint32_t lastMsgTime;
///最大成员数
@property(nonatomic,assign) uint32_t maxMemberNum;
///群成员数量
@property(nonatomic,assign) uint32_t memberNum;
///入群类型
@property(nonatomic,assign) TIMGroupAddOpt addOpt;
///群公告
@property(nonatomic,strong) NSString* notification;
///群简介
@property(nonatomic,strong) NSString* introduction;
///群头像
@property(nonatomic,strong) NSString* faceURL;
///最后一条消息
@property(nonatomic,strong) TIMMessage* lastMsg;
///在线成员数量
@property(nonatomic,assign) uint32_t onlineMemberNum;
///群组是否被搜索类型
@property(nonatomic,assign) TIMGroupSearchableType isSearchable;
///群组成员可见类型
@property(nonatomic,assign) TIMGroupMemberVisibleType isMemberVisible;
///是否全员禁言
@property(nonatomic,assign) BOOL allShutup;
///群组中的本人信息
@property(nonatomic,strong) TIMGroupSelfInfo* selfInfo;
///自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
@property(nonatomic,strong) NSDictionary* customInfo;
@end
/// 事件上报信息
@interface TIMEventReportItem : NSObject
///事件 id
@property(nonatomic,assign) uint32_t event;
///错误码
@property(nonatomic,assign) uint32_t code;
///错误描述
@property(nonatomic,strong) NSString * desc;
///事件延迟(单位 ms)
@property(nonatomic,assign) uint32_t delay;
@end
/// 获取某个群组资料
@interface TIMGroupInfoOption : NSObject
///需要获取的群组信息标志(TIMGetGroupBaseInfoFlag),默认为0xffffff
@property(nonatomic,assign) uint64_t groupFlags;
///需要获取群组资料的自定义信息(NSString*)列表
@property(nonatomic,strong) NSArray * groupCustom;
@end
/// 需要某个群成员资料
@interface TIMGroupMemberInfoOption : NSObject
///需要获取的群成员标志(TIMGetGroupMemInfoFlag),默认为0xffffff
@property(nonatomic,assign) uint64_t memberFlags;
///需要获取群成员资料的自定义信息(NSString*)列表
@property(nonatomic,strong) NSArray * memberCustom;
@end
/// 群成员资料
@interface TIMGroupMemberInfo : TIMCodingModel
///成员
@property(nonatomic,strong) NSString* member;
///群名片
@property(nonatomic,strong) NSString* nameCard;
///加入群组时间
@property(nonatomic,assign) time_t joinTime;
///成员类型
@property(nonatomic,assign) TIMGroupMemberRole role;
///禁言结束时间(时间戳)
@property(nonatomic,assign) uint32_t silentUntil;
///自定义字段集合,key 是 NSString*类型,value 是 NSData*类型
@property(nonatomic,strong) NSDictionary* customInfo;
@end
///资料与关系链
@interface TIMFriendProfileOption : NSObject
///关系链最大缓存时间(默认缓存一天;获取资料和关系链超过缓存时间,将自动向服务器发起请求)
@property NSInteger expiredSeconds;
@end
///用户资料
@interface TIMUserProfile : TIMCodingModel
///用户 identifier
@property(nonatomic,strong) NSString* identifier;
///用户昵称
@property(nonatomic,strong) NSString* nickname;
///好友验证方式
@property(nonatomic,assign) TIMFriendAllowType allowType;
///用户头像
@property(nonatomic,strong) NSString* faceURL;
///用户签名
@property(nonatomic,strong) NSData* selfSignature;
///用户性别
@property(nonatomic,assign) TIMGender gender;
///用户生日
@property(nonatomic,assign) uint32_t birthday;
///用户区域
@property(nonatomic,strong) NSData* location;
///用户语言
@property(nonatomic,assign) uint32_t language;
///等级
@property(nonatomic,assign) uint32_t level;
///角色
@property(nonatomic,assign) uint32_t role;
///自定义字段集合,key 是 NSString 类型,value 是 NSData 类型或者 NSNumber 类型(key 值按照后台配置的字符串传入)
@property(nonatomic,strong) NSDictionary* customInfo;
@end
/**
* 好友
*/
@interface TIMFriend : TIMCodingModel
/**
* 好友identifier
*/
@property(nonatomic,strong) NSString *identifier;
/**
* 好友备注(最大96字节,获取自己资料时,该字段为空)
*/
@property(nonatomic,strong) NSString *remark;
/**
* 分组名称 NSString* 列表
*/
@property(nonatomic,strong) NSArray *groups;
/**
* 申请时的添加理由
*/
@property(nonatomic,strong) NSString *addWording;
/**
* 申请时的添加来源
*/
@property(nonatomic,strong) NSString *addSource;
/**
* 添加时间
*/
@property(nonatomic,assign) uint64_t addTime;
///自定义字段集合,key 是 NSString 类型,value 是 NSData 类型或者 NSNumber 类型(key 值按照后台配置的字符串传入)
@property(nonatomic,strong) NSDictionary* customInfo;
///好友资料
@property(nonatomic,strong) TIMUserProfile *profile;
@end
#endif
//
// TIMConversation+MsgExt.h
// IMMessageExt
//
// Created by tomzhu on 2016/12/27.
//
//
#ifndef TIMConversation_h
#define TIMConversation_h
#import "TIMConversation.h"
#import "TIMMessage+MsgExt.h"
@interface TIMConversation (MsgExt)
/**
* 保存会话消息
*
* 保存消息到消息列表,这里只保存在本地。
*
* @param msg 消息体
* @param sender 发送方
* @param isReaded 是否已读,如果发送方是自己,默认已读
*
* @return 0:成功;1:失败
*/
- (int)saveMessage:(TIMMessage*)msg sender:(NSString*)sender isReaded:(BOOL)isReaded;
/**
* 获取会话漫游消息
*
* 1. 登录后可以获取漫游消息,单聊和群聊消息免费漫游7天,用户有额外消息漫游需求时,可前往 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 消息 ->消息漫游时长 购买,具体资费请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673)。
* 2. 如果本地消息全部都是连续的,则不会通过网络获取,如果本地消息不连续,会通过网络获取断层消息。
* 3. 对于图片、语音等资源类消息,消息体只会包含描述信息,需要通过额外的接口下载数据,详情请参考 [消息收发](https://cloud.tencent.com/document/product/269/9150)中的 "消息解析" 部分文档。
*
* @param count 获取数量
* @param last 上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)getMessage:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
/**
* 向前获取会话漫游消息
*
* 调用方式和 getMessage 一样,区别是 getMessage 获取的是时间更老的消息,主要用于下拉 Tableview 刷新消息数据,getMessageForward 获取的是时间更新的消息,主要用于上拉 Tableview 刷新消息数据。
*
* @param count 获取数量
* @param last 上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)getMessageForward:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
/**
* 获取本地会话消息
*
* 1. 对于单聊,登录后可以获取本地缓存消息
* 2. 对于群组,开启最近联系人漫游(登录之后 SDK 默认开启,可以通过 TIMUserConfig 里面的 disableRecnetContact 关闭)的情况下,登录后只能获取最近一条消息,可通过 getMessage 获取漫游消息
*
* @param count 获取数量
* @param last 上次最后一条消息
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)getLocalMessage:(int)count last:(TIMMessage*)last succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
/**
* 获取指定会话消息
*
* @param locators 消息定位符(TIMMessageLocator)数组
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)findMessages:(NSArray*)locators succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
/**
* 撤回消息
*
* 1. 仅 C2C 和 GROUP 会话有效、onlineMessage 无效、AVChatRoom 和 BChatRoom 无效。
* 2. 可以在 TIMUserConfig 设置的 TIMMessageRevokeListener 监听 onRevokeMessage 消息撤回回调。
* 3. 遍历本地消息列表,如果消息的 respondsToLocator 函数返回 YES,则是对应的消息,您可以在 UI 上执行删除操作,具体可以参考 TMessageController.h 里面的 onRevokeMessage 回调的实现。
*
* @param msg 被撤回的消息
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)revokeMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 同步群的消息撤回通知
*
* 针对群组,断线重连后,如果用户处于群组聊天界面,需要业务端主动同步该群组会话的消息撤回通知。其他场景不需要主动同步消息撤回通知。
*
* @param succ 成功时回调,同步的通知会通过 TIMMessageRevokeListener 抛出
* @param fail 失败时回调
*
* @return 0 本次操作成功
*/
- (int)syncRevokeNotify:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 删除本地会话消息
*
* 可以在保留会话同时删除本地的会话消息。
*
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0 本次操作成功
*/
- (int)deleteLocalMessage:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 设置已读消息
*
* 1. 如果在 TIMUserConfig 关闭了自动已读上报(设置 disableAutoReport 为 YES),这里需要显示调用 setReadMessage ,消息的已读状态才会改变。
* 2. 如果在 TIMUserConfig 开启了消息回执(设置 enableReadReceipt 为 YES),收消息的用户需要显示调用 setReadMessage ,发消息的用户才能通过 TIMMessageReceiptListener 监听到消息的已读回执。
* 3. 如果您需要设置单条消息的已读状态,请使用 TIMMessage+MsgExt.h 中的 setCustomInt 自定义字段接口设置,通过 customInt 获取,需要注意的是,这个接口设置的字段只在本地保存,如果切换了终端,或则 APP 被卸载,这个值都会失效。
*
* @param readed 会话内最近一条已读的消息,nil 表示上报最新消息
*
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0 表示成功
*/
- (int)setReadMessage:(TIMMessage*)readed succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取会话的未读计数
*
* 1. 单终端,未卸载 APP 的情况下,您可以通过当前接口获取准确的未读计数。
* 2. 如果需要在多终端或则程序 APP 卸载重装后未读计数依然准确,请设置 TIMUserConfig 的 disableAutoReport 为 YES,然后显示调用 setReadMessage。详情请参考 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)
*
* @return 返回未读计数
*/
- (int)getUnReadMessageNum;
/**
* 获取最后一条消息
*
* @return 最后一条消息
*/
- (TIMMessage*)getLastMsg;
/**
* 将消息导入本地数据库
*
* @param msgs 消息(TIMMessage*)列表
*
* @return 0:成功;1:失败
*/
- (int)importMessages:(NSArray*)msgs;
/**
* 设置会话草稿
*
* UI 展示最近联系人列表时,时常会展示用户的草稿内容,ImSDK 提供了设置和获取草稿的接口,用户可以通过此接口设置会话的草稿信息。草稿信息会存本地数据库,重新登录后依然可以获取。
*
* @param draft 草稿内容,详情请参考 TIMMessage+MsgExt.h 里面的 TIMMessageDraft 定义
*
* @return 0:成功;1:失败
*/
- (int)setDraft:(TIMMessageDraft*)draft;
/**
* 获取会话草稿
*
* @return 草稿内容,没有草稿返回 nil
*/
- (TIMMessageDraft*)getDraft;
/**
* 禁用本会话的存储(暂未实现)
*
* 1. 需要 initSdk 之后调用
* 2. 只对当前初始化有效,重启后需要重新设置
*/
- (void)disableStorage;
@end
#endif /* TIMConversation_h */
//
// TIMConversation.h
// ImSDK
//
// Created by bodeng on 28/1/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_TIMConversation_h
#define ImSDK_TIMConversation_h
#import "TIMComm.h"
#import "TIMCallback.h"
@class TIMMessage;
/**
* 会话
*/
@interface TIMConversation : NSObject
/**
* 发送消息
*
* TIMMessage 由多个 TIMElem 组成,每个 TIMElem 可以是文本和图片,也就是说每一条消息可包含多个文本和多张图片。详情请参考官网文档 [消息收发](https://cloud.tencent.com/document/product/269/9150)
*
* @param msg 消息体
* @param succ 发送成功时回调
* @param fail 发送失败时回调
*
* @return 0:操作成功;1:操作失败
*/
- (int)sendMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 发送在线消息(服务器不保存消息)
*
* 1. 对于某些场景,需要发送在线消息,即用户在线时收到消息,如果用户不在线,下次登录也不会看到消息,可用于通知类消息,这种消息不会进行存储,也不会计入未读计数。发送接口与 sendMessage 类似。
* 2. 暂不支持 AVChatRoom 和 BChatRoom 类型。
*
* @param msg 消息体
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:操作成功;1:操作失败
*/
- (int)sendOnlineMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取会话人
*
* C2C:对方账号;Group:群组Id。
*
* 对同一个 C2C 会话或则群聊会话,getReceiver 获取的会话人都是固定的,C2C 获取的是对方账号,Group 获取的是群组 Id。
*
* @return 会话人
*/
- (NSString*)getReceiver;
/**
* 获取群名称
*
* 获取群名称,只有群会话有效。
*
* @return 群名称
*/
- (NSString*)getGroupName;
/**
* 获取会话类型
*
* @return 会话类型
*/
- (TIMConversationType)getType;
/**
* 获取自己的 id
*
* @return 用户 id
*/
- (NSString*)getSelfIdentifier;
@end
#endif
//
// TIMErrorCode.h
// ImSDK
//
// Created by jameskhdeng on 2018/11/23.
// Copyright © 2018 tencent. All rights reserved.
//
#ifndef TIMErrorCode_h
#define TIMErrorCode_h
enum ERROR_CODE {
ERR_SUCC = 0,
ERR_PARSE_RESPONSE_FAILED = 6001, //解析响应失败
ERR_SERIALIZE_REQ_FAILED = 6002, //序列化请求失败
ERR_NO_SUCC_RESULT = 6003, //批量操作无成功结果
ERR_INVALID_CONVERSATION = 6004, //IM: 无效会话
ERR_LOADMSG_FAILED = 6005, //IM: 加载本地消息存储失败
ERR_FILE_TRANS_AUTH_FAILED = 6006, //IM: 文件传输 - 鉴权失败
ERR_FILE_TRANS_NO_SERVER = 6007, //IM: 文件传输 - 获取svr失败
ERR_FILE_TRANS_UPLOAD_FAILED = 6008, //IM: 文件传输 - 上传失败
ERR_FILE_TRANS_DOWNLOAD_FAILED = 6009, //IM: 文件传输 - 下载失败
ERR_HTTP_REQ_FAILED = 6010, //HTTP请求失败
ERR_TO_USER_INVALID = 6011, //IM: 无效接收方
ERR_REQUEST_TIMEOUT = 6012, //请求超时
ERR_SDK_NOT_INITIALIZED = 6013, //SDK未初始化
ERR_SDK_NOT_LOGGED_IN = 6014, //SDK未登录
ERR_IN_PROGESS = 6015, //执行中
ERR_INVALID_MSG_ELEM = 6016, //IM: 无效消息elem
ERR_INVALID_PARAMETERS = 6017, //API参数无效
ERR_INIT_CORE_FAIL = 6018, //INIT CORE模块失败
ERR_DATABASE_OPERATE_FAILED = 6019, //本地数据库操作失败
ERR_EXPIRED_SESSION_NODE = 6020, //SessionNode为null
ERR_INVALID_SDK_OBJECT = 6021, //无效的imsdk对象,例如用户自己生成TIMImage,或内部赋值错误导致的sdk对象无效
ERR_IO_OPERATION_FAILED = 6022, //本地IO操作失败
ERR_LOGGED_OUT_BEFORE_LOGIN_FINISHED = 6023, //在登录完成前进行了登出(在登录时返回)
ERR_TLSSDK_NOT_INITIALIZED = 6024, //tlssdk未初始化
ERR_TLSSDK_USER_NOT_FOUND = 6025, //TLSSDK没有找到相应的用户信息
ERR_NO_PREVIOUS_LOGIN = 6026, //自动登陆时并没有登陆过该用户
ERR_BIND_FAIL_UNKNOWN = 6100, //QALSDK未知原因BIND失败
ERR_BIND_FAIL_NO_SSOTICKET = 6101, //缺少SSO票据
ERR_BIND_FAIL_REPEATD_BIND = 6102, //重复BIND
ERR_BIND_FAIL_TINYID_NULL = 6103, //tiny为空
ERR_BIND_FAIL_GUID_NULL = 6104, //guid为空
ERR_BIND_FAIL_UNPACK_REGPACK_FAILED = 6105, //解注册包失败
ERR_BIND_FAIL_REG_TIMEOUT = 6106, //注册超时
ERR_BIND_FAIL_ISBINDING = 6107, //正在bind操作中
ERR_PACKET_FAIL_UNKNOWN = 6120, //发包未知错误
ERR_PACKET_FAIL_REQ_NO_NET = 6121, //发送请求包时没有网络,处理时转换成ERR_REQ_NO_NET_ON_REQ
ERR_PACKET_FAIL_RESP_NO_NET = 6122, //发送回复包时没有网络,处理时转换成ERR_REQ_NO_NET_ON_RSP
ERR_PACKET_FAIL_REQ_NO_AUTH = 6123, //发送请求包时没有权限
ERR_PACKET_FAIL_SSO_ERR = 6124, //SSO错误
ERR_PACKET_FAIL_REQ_TIMEOUT = 6125, //请求超时,处理时转化成ERR_REQUEST_TIMEOUT
ERR_PACKET_FAIL_RESP_TIMEOUT = 6126, //回复超时,处理时转化成ERR_REQUEST_TIMEOUT
ERR_PACKET_FAIL_REQ_ON_RESEND = 6127, //
ERR_PACKET_FAIL_RESP_NO_RESEND = 6128, //
ERR_PACKET_FAIL_FLOW_SAVE_FILTERED = 6129, //
ERR_PACKET_FAIL_REQ_OVER_LOAD = 6130, //
ERR_PACKET_FAIL_LOGIC_ERR = 6131,
ERR_FRIENDSHIP_PROXY_NOT_SYNCED = 6150, // proxy_manager没有完成svr数据同步
ERR_FRIENDSHIP_PROXY_SYNCING = 6151, // proxy_manager正在进行svr数据同步
ERR_FRIENDSHIP_PROXY_SYNCED_FAIL = 6152, // proxy_manager同步失败
ERR_FRIENDSHIP_PROXY_LOCAL_CHECK_ERR = 6153, // proxy_manager请求参数,在本地检查不合法
ERR_GROUP_INVALID_FIELD = 6160, // group assistant请求字段中包含非预设字段
ERR_GROUP_STORAGE_DISABLED = 6161, // group assistant群资料本地存储没有开启
ERR_LOADGRPINFO_FAILED = 6162, // failed to load groupinfo from storage
ERR_REQ_NO_NET_ON_REQ = 6200, // 请求的时候没有网络
ERR_REQ_NO_NET_ON_RSP = 6201, // 响应的时候没有网络
ERR_SERIVCE_NOT_READY = 6205, // QALSDK服务未就绪
ERR_USER_SIG_EXPIRED = 6206, // 票据过期
ERR_LOGIN_AUTH_FAILED = 6207, // 账号认证失败(tinyid转换失败)
ERR_LOGIN_KICKED_OFF_BY_OTHER = 6208, // 账号被踢
ERR_NEVER_CONNECT_AFTER_LAUNCH = 6209, // 在应用启动后没有尝试联网
ERR_REQ_FAILED = 6210, // QAL执行失败
ERR_REQ_INVALID_REQ = 6211, // 请求非法,toMsgService非法
ERR_REQ_OVERLOADED = 6212, // 请求队列満
ERR_REQ_KICK_OFF = 6213, // 已经被其他终端踢了
ERR_REQ_SERVICE_SUSPEND = 6214, // 服务被暂停
ERR_REQ_INVALID_SIGN = 6215, // SSO签名错误
ERR_REQ_INVALID_COOKIE = 6216, // SSO cookie无效
ERR_LOGIN_TLS_RSP_PARSE_FAILED = 6217, // 登录时TLS回包校验,包体长度错误
ERR_LOGIN_OPENMSG_TIMEOUT = 6218, // 登录时OPENSTATSVC向OPENMSG上报状态超时
ERR_LOGIN_OPENMSG_RSP_PARSE_FAILED = 6219, // 登录时OPENSTATSVC向OPENMSG上报状态时解析回包失败
ERR_LOGIN_TLS_DECRYPT_FAILED = 6220, // 登录时TLS解密失败
ERR_WIFI_NEED_AUTH = 6221, // wifi需要认证
ERR_USER_CANCELED = 6222, // 用户已取消
ERR_REVOKE_TIME_LIMIT_EXCEED = 6223, //消息撤回超过了时间限制(默认2分钟)
ERR_LACK_UGC_EXT = 6224, // 缺少UGC扩展包
ERR_AUTOLOGIN_NEED_USERSIG = 6226, //自动登录,本地票据过期,需要userSig手动登录
ERR_REQ_CONTENT_ATTACK = 80001, // 消息内容安全打击
ERR_LOGIN_SIG_EXPIRE = 70001, // 登陆返回,票据过期
ERR_SDK_HAD_INITIALIZED = 90001, // SDK 已经初始化无需重复初始化
ERR_OPENBDH_BASE = 115000, // openbdh 错误码基
};
#endif /* TIMErrorCode_h */
//
// TIMFriendshipDefine.h
// imsdk
//
// Created by annidyfeng on 2019/3/7.
// Copyright © 2019年 Tencent. All rights reserved.
//
#ifndef TIMFriendshipDefine_h
#define TIMFriendshipDefine_h
#import "ImSDK.h"
@class TIMFriendMetaInfo;
@class TIMFriendPendencyResponse;
@class TIMFriendPendencyItem;
@class TIMFriendFutureMeta;
@class TIMFriendGroup;
#pragma mark - 枚举类型
/**
* 好友操作状态
*/
typedef NS_ENUM(NSInteger, TIMFriendStatus) {
/**
* 操作成功
*/
TIM_FRIEND_STATUS_SUCC = 0,
/**
* 加好友、响应好友时有效:自己的好友数已达系统上限
*/
TIM_ADD_FRIEND_STATUS_SELF_FRIEND_FULL = 30010,
/**
* 更新好友分组时有效:分组已达系统上限
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_MAX_GROUPS_EXCEED = 30011,
/**
* 加好友、响应好友时有效:对方的好友数已达系统上限
*/
TIM_ADD_FRIEND_STATUS_THEIR_FRIEND_FULL = 30014,
/**
* 加好友时有效:被加好友在自己的黑名单中
*/
TIM_ADD_FRIEND_STATUS_IN_SELF_BLACK_LIST = 30515,
/**
* 加好友时有效:被加好友设置为禁止加好友
*/
TIM_ADD_FRIEND_STATUS_FRIEND_SIDE_FORBID_ADD = 30516,
/**
* 加好友时有效:已被被添加好友设置为黑名单
*/
TIM_ADD_FRIEND_STATUS_IN_OTHER_SIDE_BLACK_LIST = 30525,
/**
* 加好友时有效:对方好友列表已满
*/
TIM_ADD_FRIEND_STATUS_OTHER_SIDE_FRIEND_LIST_FULL = 30535,
/**
* 加好友时有效:等待好友审核同意
*/
TIM_ADD_FRIEND_STATUS_PENDING = 30539,
/**
* 删除好友时有效:删除好友时对方不是好友
*/
TIM_DEL_FRIEND_STATUS_NO_FRIEND = 31704,
/**
* 响应好友申请时有效:对方没有申请过好友
*/
TIM_RESPONSE_FRIEND_STATUS_NO_REQ = 30614,
/**
* 添加黑名单有效:已经在黑名单了
*/
TIM_ADD_BLACKLIST_FRIEND_STATUS_IN_BLACK_LIST = 31307,
/**
* 删除黑名单有效:用户不在黑名单里
*/
TIM_DEL_BLACKLIST_FRIEND_STATUS_NOT_IN_BLACK_LIST = 31503,
/**
* 创建好友分组时有效:没有拉到SDKAppId
*/
TIM_ADD_FRIEND_GROUP_STATUS_GET_SDKAPPID_FAILED = 32207,
/**
* 创建好友分组时有效:要加入到好友分组中的用户不是好友
*/
TIM_ADD_FRIEND_GROUP_STATUS_NOT_FRIEND = 32216,
/**
* 更新好友分组时有效:没有拉到SDKAppId
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_GET_SDKAPPID_FAILED = 32511,
/**
* 更新好友分组时有效:要加入到好友分组中的用户不是好友
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_ADD_NOT_FRIEND = 32518,
/**
* 更新好友分组时有效:要加入到好友分组中的好友已经在分组中
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_ADD_ALREADY_IN_GROUP = 32519,
/**
* 更新好友分组时有效:要从好友分组中删除的好友不在好友分组中
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_DEL_NOT_IN_GROUP = 32520,
};
typedef NS_ENUM(NSInteger, TIMDelFriendType) {
/**
* 删除单向好友
*/
TIM_FRIEND_DEL_SINGLE = 1,
/**
* 删除双向好友
*/
TIM_FRIEND_DEL_BOTH = 2,
};
typedef NS_ENUM(NSInteger, TIMPendencyType) {
/**
* 别人发给我的
*/
TIM_PENDENCY_COME_IN = 1,
/**
* 我发给别人的
*/
TIM_PENDENCY_SEND_OUT = 2,
/**
* 别人发给我的 和 我发给别人的。仅拉取时有效
*/
TIM_PENDENCY_BOTH = 3,
};
/**
* 推荐好友类型
*/
typedef NS_ENUM(NSInteger, TIMFutureFriendType) {
/**
* 收到的未决请求
*/
TIM_FUTURE_FRIEND_PENDENCY_IN_TYPE = 0x1,
/**
* 发出去的未决请求
*/
TIM_FUTURE_FRIEND_PENDENCY_OUT_TYPE = 0x2,
/**
* 推荐好友
*/
TIM_FUTURE_FRIEND_RECOMMEND_TYPE = 0x4,
/**
* 已决好友
*/
TIM_FUTURE_FRIEND_DECIDE_TYPE = 0x8,
};
/**
* 翻页选项
*/
typedef NS_ENUM(NSInteger, TIMPageDirectionType) {
/**
* 向上翻页
*/
TIM_PAGE_DIRECTION_UP_TYPE = 1,
/**
* 向下翻页
*/
TIM_PAGE_DIRECTION_DOWN_TYPE = 2,
};
/**
* 好友检查类型
*/
typedef NS_ENUM(NSInteger,TIMFriendCheckType) {
/**
* 单向好友
*/
TIM_FRIEND_CHECK_TYPE_UNIDIRECTION = 0x1,
/**
* 互为好友
*/
TIM_FRIEND_CHECK_TYPE_BIDIRECTION = 0x2,
};
/**
* 好友关系类型
*/
typedef NS_ENUM(NSInteger,TIMFriendRelationType) {
/**
* 不是好友
*/
TIM_FRIEND_RELATION_TYPE_NONE = 0x0,
/**
* 对方在我的好友列表中
*/
TIM_FRIEND_RELATION_TYPE_MY_UNI = 0x1,
/**
* 我在对方的好友列表中
*/
TIM_FRIEND_RELATION_TYPE_OTHER_UNI = 0x2,
/**
* 互为好友
*/
TIM_FRIEND_RELATION_TYPE_BOTH = 0x3,
};
typedef NS_ENUM(NSInteger, TIMFriendResponseType) {
/**
* 同意加好友(建立单向好友)
*/
TIM_FRIEND_RESPONSE_AGREE = 0,
/**
* 同意加好友并加对方为好友(建立双向好友)
*/
TIM_FRIEND_RESPONSE_AGREE_AND_ADD = 1,
/**
* 拒绝对方好友请求
*/
TIM_FRIEND_RESPONSE_REJECT = 2,
};
#pragma mark - block回调
/**
* 获取好友列表回调
*
* @param meta 好友元信息
* @param friends 好友列表 TIMUserProfile* 数组,只包含需要的字段
*/
typedef void (^TIMGetFriendListByPageSucc)(TIMFriendMetaInfo * meta, NSArray * friends);
/**
* 获取未决请求列表成功
*
* @param pendencyResponse 未决请求元信息
*/
typedef void (^TIMGetFriendPendencyListSucc)(TIMFriendPendencyResponse *pendencyResponse);
/**
* 群搜索回调
*
* @param totalNum 搜索结果的总数
* @param users 请求的用户列表片段
*/
typedef void (^TIMUserSearchSucc)(uint64_t totalNum, NSArray * users);
/**
* 好友分组列表
*
* @param groups 好友分组(TIMFriendGroup*)列表
*/
typedef void (^TIMFriendGroupArraySucc)(NSArray<TIMFriendGroup *> * groups);
/**
* 好友关系检查回调
*
* @param results TIMCheckFriendResult列表
*/
typedef void (^TIMFriendCheckSucc)(NSArray* results);
#pragma mark - 基本类型
/**
* 加好友请求
*/
@interface TIMFriendRequest : TIMCodingModel
/**
* 用户identifier(必填)
*/
@property (nonatomic,strong) NSString* identifier;
/**
* 备注(备注最大96字节)
*/
@property (nonatomic,strong) NSString* remark;
/**
* 请求说明(最大120字节)
*/
@property (nonatomic,strong) NSString* addWording;
/**
* 添加来源
* 来源需要添加“AddSource_Type_”前缀
*/
@property (nonatomic,strong) NSString* addSource;
/**
* 分组
*/
@property (nonatomic,strong) NSString* group;
@end
/**
* 未决请求
*/
@interface TIMFriendPendencyItem : TIMCodingModel
/**
* 用户标识
*/
@property(nonatomic,strong) NSString* identifier;
/**
* 增加时间
*/
@property(nonatomic,assign) uint64_t addTime;
/**
* 来源
*/
@property(nonatomic,strong) NSString* addSource;
/**
* 加好友附言
*/
@property(nonatomic,strong) NSString* addWording;
/**
* 加好友昵称
*/
@property(nonatomic,strong) NSString* nickname;
/**
* 未决请求类型
*/
@property(nonatomic,assign) TIMPendencyType type;
@end
/**
* 未决推送
*/
@interface TIMFriendPendencyInfo : TIMCodingModel
/**
* 用户标识
*/
@property(nonatomic,strong) NSString* identifier;
/**
* 来源
*/
@property(nonatomic,strong) NSString* addSource;
/**
* 加好友附言
*/
@property(nonatomic,strong) NSString* addWording;
/**
* 加好友昵称
*/
@property(nonatomic,strong) NSString* nickname;
@end
/**
* 未决请求信息
*/
@interface TIMFriendPendencyRequest : TIMCodingModel
/**
* 序列号,未决列表序列号
* 建议客户端保存seq和未决列表,请求时填入server返回的seq
* 如果seq是server最新的,则不返回数据
*/
@property(nonatomic,assign) uint64_t seq;
/**
* 翻页时间戳,只用来翻页,server返回0时表示没有更多数据,第一次请求填0
* 特别注意的是,如果server返回的seq跟填入的seq不同,翻页过程中,需要使用客户端原始seq请求,直到数据请求完毕,才能更新本地seq
*/
@property(nonatomic,assign) uint64_t timestamp;
/**
* 每页的数量,即本次请求最多返回都个数据
*/
@property(nonatomic,assign) uint64_t numPerPage;
/**
* 未决请求拉取类型
*/
@property(nonatomic,assign) TIMPendencyType type;
@end
/**
* 未决返回信息
*/
@interface TIMFriendPendencyResponse : TIMCodingModel
/**
* 本次请求的未决列表序列号
*/
@property(nonatomic,assign) uint64_t seq;
/**
* 本次请求的翻页时间戳
*/
@property(nonatomic,assign) uint64_t timestamp;
/**
* 未决请求未读数量
*/
@property(nonatomic,assign) uint64_t unreadCnt;
/**
* 未决数据
*/
@property NSArray<TIMFriendPendencyItem *> * pendencies;
@end
/**
* 好友元信息
*/
@interface TIMFriendMetaInfo : TIMCodingModel
/**
* 时间戳,需要保存,下次拉取时传入,增量更新使用
*/
@property(nonatomic,assign) uint64_t timestamp;
/**
* 序列号,需要保存,下次拉取时传入,增量更新使用
*/
@property(nonatomic,assign) uint64_t infoSeq;
/**
* 分页信息,无需保存,返回为0时结束,非0时传入再次拉取,第一次拉取时传0
*/
@property(nonatomic,assign) uint64_t nextSeq;
/**
* 覆盖:为TRUE时需要重设timestamp, infoSeq, nextSeq为0,清除客户端存储,重新拉取资料
*/
@property(nonatomic,assign) BOOL recover;
@end
/**
* 好友分组信息
*/
@interface TIMFriendGroup : TIMCodingModel
/**
* 好友分组名称
*/
@property(nonatomic,strong) NSString* name;
/**
* 分组成员数量
*/
@property(nonatomic,assign) uint64_t userCnt;
/**
* 分组成员identifier列表
*/
@property(nonatomic,strong) NSArray* friends;
@end
/**
* 好友关系检查
*/
@interface TIMFriendCheckInfo : NSObject
/**
* 检查用户的id列表(NSString*)
*/
@property(nonatomic,strong) NSArray* users;
/**
* 检查类型
*/
@property(nonatomic,assign) TIMFriendCheckType checkType;
@end
@interface TIMCheckFriendResult : NSObject
/**
* 用户id
*/
@property(nonatomic,strong) NSString* identifier;
/**
* 返回状态
*/
@property(nonatomic,assign) TIMFriendStatus status;
/**
* 检查结果
*/
@property(nonatomic,assign) TIMFriendRelationType resultType;
@end
@interface TIMFriendResult : NSObject
/**
* 用户Id
*/
@property NSString* identifier;
/**
* 返回码
*/
@property NSInteger result_code;
/**
* 返回信息
*/
@property NSString *result_info;
@end
/**
* 响应好友请求
*/
@interface TIMFriendResponse : NSObject
/**
* 响应类型
*/
@property(nonatomic,assign) TIMFriendResponseType responseType;
/**
* 用户identifier
*/
@property(nonatomic,strong) NSString* identifier;
/**
* 备注好友(可选,如果要加对方为好友)。备注最大96字节
*/
@property(nonatomic,strong) NSString* remark;
@end
/**
* 好友分组信息扩展
*/
@interface TIMFriendGroupWithProfiles : TIMFriendGroup
/**
* 好友资料(TIMUserProfile*)列表
*/
@property(nonatomic,strong) NSArray* profiles;
@end
// 用户资料KEY
/**
* 昵称
* 值类型: NSString
*/
extern NSString *const TIMProfileTypeKey_Nick;
/**
* 头像
* 值类型: NSString
*/
extern NSString *const TIMProfileTypeKey_FaceUrl;
/**
* 好友申请
* 值类型: NSNumber [TIM_FRIEND_ALLOW_ANY,TIM_FRIEND_NEED_CONFIRM,TIM_FRIEND_DENY_ANY]
*/
extern NSString *const TIMProfileTypeKey_AllowType;
/**
* 性别
* 值类型: NSNumber [TIM_GENDER_UNKNOWN,TIM_GENDER_MALE,TIM_GENDER_FEMALE]
*/
extern NSString *const TIMProfileTypeKey_Gender;
/**
* 生日
* 值类型: NSNumber
*/
extern NSString *const TIMProfileTypeKey_Birthday;
/**
* 位置
* 值类型: NSString
*/
extern NSString *const TIMProfileTypeKey_Location;
/**
* 语言
* 值类型: NSNumber
*/
extern NSString *const TIMProfileTypeKey_Language;
/**
* 等级
* 值类型: NSNumber
*/
extern NSString *const TIMProfileTypeKey_Level;
/**
* 角色
* 值类型: NSNumber
*/
extern NSString *const TIMProfileTypeKey_Role;
/**
* 签名
* 值类型: NSString
*/
extern NSString *const TIMProfileTypeKey_SelfSignature;
/**
* 自定义字段前缀
* 值类型: [NSString,NSData|NSNumber]
* @note 当设置自定义字的值NSString对象时,后台会将其转为UTF8保存在数据库中。由于部分用户迁移资料时可能不是UTF8类型,所以在获取资料时,统一返回NSData类型。
*/
extern NSString *const TIMProfileTypeKey_Custom_Prefix;
// 好友资料KEY
/**
* 备注
* 值类型: NSString
*/
extern NSString *const TIMFriendTypeKey_Remark;
/**
* 分组
* 值类型: [NSArray]
*/
extern NSString *const TIMFriendTypeKey_Group;
/**
* 自定义字段前缀
* 值类型: [NSString,NSData|NSNumber]
*/
extern NSString *const TIMFriendTypeKey_Custom_Prefix;
#endif /* TIMFriendshipDefine_h */
//
// TIMFriendshipManager.h
// imsdk
//
// Created by annidyfeng on 2019/3/7.
// Copyright © 2019年 Tencent. All rights reserved.
//
#ifndef TIMFriendshipManager_h
#define TIMFriendshipManager_h
#import "TIMComm.h"
#import "TIMFriendshipDefine.h"
@interface TIMFriendshipManager : NSObject
/**
* 获取好友管理器实例
*
* @return 管理器实例
*/
+ (TIMFriendshipManager*)sharedInstance;
/**
* 设置自己的资料
*
* @param values 需要更新的属性,可一次更新多个字段. 参见 TIMFriendshipDefine.h 的 TIMProfileTypeKey_XXX
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)modifySelfProfile:(NSDictionary<NSString *, id> *)values succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取自己的资料
*
* @param succ 成功回调,返回 TIMUserProfile
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)getSelfProfile:(TIMGetProfileSucc)succ fail:(TIMFail)fail;
/**
* 获取指定用户资料
*
* @param identifiers 用户id,非好友的用户也可以
* @prarm forceUpdate 强制从后台拉取
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)getUsersProfile:(NSArray<NSString *> *)identifiers forceUpdate:(BOOL)forceUpdate succ:(TIMUserProfileArraySucc)succ fail:(TIMFail)fail;
/**
* 获取好友列表
*
* @param succ 成功回调,返回好友(TIMFriend)列表
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
-(int)getFriendList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;
/**
* 添加好友
*
* @param request 添加好友请求
* @param succ 成功回调(TIMFriendResult)
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)addFriend:(TIMFriendRequest *)request succ:(TIMFriendResultSucc)succ fail:(TIMFail)fail;
/**
* 响应对方好友邀请
*
* @param response 响应请求
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)doResponse:(TIMFriendResponse *)response succ:(TIMFriendResultSucc)succ fail:(TIMFail)fail;
/**
* 删除好友
*
* @param identifiers 好友id
* @param delType 删除类型(单向好友、双向好友)
* @param succ 成功回调([TIMFriendResult])
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)deleteFriends:(NSArray *)identifiers delType:(TIMDelFriendType)delType succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
/**
* 修改好友
*
* @param identifier 好友id
* @param values 需要更新的属性,可一次更新多个字段. 参见 TIMFriendshipDefine.h 的 TIMFriendTypeKey_XXX
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)modifyFriend:(NSString *)identifier values:(NSDictionary<NSString *, id> *)values succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 未决列表请求
*
* @param pendencyRequest 请求信息,详细参考TIMFriendPendencyRequest
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)getPendencyList:(TIMFriendPendencyRequest *)pendencyRequest succ:(TIMGetFriendPendencyListSucc)succ fail:(TIMFail)fail;
/**
* 未决删除
*
* @param type 未决好友类型
* @param identifiers 要删除的未决列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)deletePendency:(TIMPendencyType)type users:(NSArray *)identifiers succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 未决已读上报
*
* @param timestamp 已读时间戳,此时间戳以前的消息都将置为已读
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)pendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取黑名单列表
*
* @param succ 成功回调,返回NSString*列表
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)getBlackList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;
/**
* 添加用户到黑名单
*
* @param identifiers 用户列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)addBlackList:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
/**
* 把用户从黑名单中删除
*
* @param identifiers 用户列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)deleteBlackList:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
/**
* 新建好友分组
*
* @param groupNames 分组名称列表,必须是当前不存在的分组
* @param identifiers 要添加到分组中的好友
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)createFriendGroup:(NSArray *)groupNames users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
/**
* 获取指定的好友分组信息
*
* @param groupNames 要获取信息的好友分组名称列表,传入nil获得所有分组信息
* @param succ 成功回调,返回 TIMFriendGroup* 列表
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)getFriendGroups:(NSArray *)groupNames succ:(TIMFriendGroupArraySucc)succ fail:(TIMFail)fail;
/**
* 删除好友分组
*
* @param groupNames 要删除的好友分组名称列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)deleteFriendGroup:(NSArray *)groupNames succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改好友分组的名称
*
* @param oldName 原来的分组名称
* @param newName 新的分组名称
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)renameFriendGroup:(NSString*)oldName newName:(NSString*)newName succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 添加好友到一个好友分组
*
* @param groupName 好友分组名称
* @param identifiers 要添加到分组中的好友
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)addFriendsToFriendGroup:(NSString *)groupName users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
/**
* 从好友分组中删除好友
*
* @param groupName 好友分组名称
* @param identifiers 要移出分组的好友
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
- (int)deleteFriendsFromFriendGroup:(NSString *)groupName users:(NSArray *)identifiers succ:(TIMFriendResultArraySucc)succ fail:(TIMFail)fail;
@end
#endif /* TIMFriendshipManager_h */
//
// TIMGroupManager+Ext.h
// IMGroupExt
//
// Created by tomzhu on 2017/2/9.
//
//
#ifndef TIMGroupManager_Ext_h
#define TIMGroupManager_Ext_h
#import "TIMGroupManager.h"
#import "TIMComm+Group.h"
@interface TIMGroupManager (Ext)
/**
* 创建私有群
*
* 创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
*
* @param members 群成员,NSString* 数组
* @param groupName 群名
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createPrivateGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 创建公开群
*
* 创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
*get
* @param members 群成员,NSString* 数组
* @param groupName 群名
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createPublicGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 创建聊天室
*
* 创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
*
* @param members 群成员,NSString* 数组
* @param groupName 群名
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createChatRoomGroup:(NSArray*)members groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 创建音视频聊天室(可支持超大群,详情可参考wiki文档)
*
* 创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](https://cloud.tencent.com/document/product/269/1502#.E7.BE.A4.E7.BB.84.E5.BD.A2.E6.80.81.E4.BB.8B.E7.BB.8D)
*
* @param groupName 群名
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createAVChatRoomGroup:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 创建自定义群组
*
* 在创建群组时,除了设置默认的成员以及群名外,还可以设置如群公告、群简介等字段。
*
* @param groupInfo 群组信息,详情请参考 TIMComm+Group.h 里面的 TIMCreateGroupInfo 定义
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createGroup:(TIMCreateGroupInfo*)groupInfo succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 邀请好友入群
*
* 1. 只有私有群可以拉用户入群。
* 2. 直播大群:不能邀请用户入群。
* 3. 不允许群成员邀请他人入群,但创建群时可以直接拉人入群。
*
* @param group 群组Id
* @param members 要加入的成员列表(NSString* 类型数组)
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)inviteGroupMember:(NSString*)group members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
/**
* 删除群成员
*
* 1. 私有群:只有创建者可删除群组成员。
* 2. 公开群、聊天室:只有管理员和群主可以踢人。
* 3. 对于直播大群:不能踢人。
*
* @param group 群组Id
* @param reason 删除原因
* @param members 要删除的成员列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)deleteGroupMemberWithReason:(NSString*)group reason:(NSString*)reason members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
/**
* 获取群公开信息(暂未实现)
*
* 任意用户可以获取群公开资料,只能获取公开信息。
*
* @param groups 群组Id
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupPublicInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取群列表
*
* 1. 可以获取自己所加入的群列表。
* 2. 只能获得加入的部分直播大群的列表。
*
* @param succ 成功回调,NSArray 列表为 TIMGroupInfo,结构体只包含 group\groupName\groupType\faceUrl\allShutup\selfInfo 信息
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupList:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取群信息
*
* 1. 获取群组资料接口只能由群成员调用,非群成员无法通过此方法获取资料,需要调用 getGroupPublicInfo 获取资料。
* 2. 默认拉取基本资料,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后在 initSDK 的时候把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段 value 做了赋值或则修改,才能拉取到自定义字段。
*
* @param succ 成功回调,不包含 selfInfo信息
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取本人在群组内的成员信息
*
* 默认拉取基本资料,如果想要拉取自定义字段,请参考 getGroupInfo
*
* @param group 群组Id
* @param succ 成功回调,返回信息
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupSelfInfo:(NSString*)group succ:(TIMGroupSelfSucc)succ fail:(TIMFail)fail;
/**
* 获取接受消息选项
*
* @param group 群组Id
* @param succ 成功回调, TIMGroupReceiveMessageOpt 0:接收消息;1:不接收消息,服务器不进行转发;2:接受消息,不进行 iOS APNs 推送
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getReciveMessageOpt:(NSString*)group succ:(TIMGroupReciveMessageOptSucc)succ fail:(TIMFail)fail;
/**
* 获取群成员列表
*
* 1. 获取群内成员列表,默认拉取内置字段,但不拉取自定义字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后在 initSDK 的时候把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
* 2. 任何群组类型:都可以获取成员列表。
* 3. 直播大群:只能拉取部分成员(包括群主、管理员和部分成员)。
*
* @param group 群组Id
* @param succ 成功回调(TIMGroupMemberInfo列表)
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupMembers:(NSString*)group succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
/**
* 获取群组指定成员的信息
*
* 获取群组指定成员的信息,需要设置群成员 members,其他限制参考 getGroupMembers
*
* @param group 群组Id
* @param members 成员Id(NSString*)列表
* @param succ 成功回调(TIMGroupMemberInfo列表)
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getGroupMembersInfo:(NSString*)group members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
/**
* 获取指定类型的成员列表(支持按字段拉取,分页)
*
* @param group 群组Id:(NSString*) 列表
* @param filter 群成员角色过滤方式
* @param flags 拉取资料标志
* @param custom 要获取的自定义key(NSString*)列表
* @param nextSeq 分页拉取标志,第一次拉取填0,回调成功如果 nextSeq 不为零,需要分页,传入再次拉取,直至为0
* @param succ 成功回调
* @param fail 失败回调
* @return 0:成功;1:失败
*/
- (int)getGroupMembers:(NSString*)group ByFilter:(TIMGroupMemberFilter)filter flags:(TIMGetGroupMemInfoFlag)flags custom:(NSArray*)custom nextSeq:(uint64_t)nextSeq succ:(TIMGroupMemberSuccV2)succ fail:(TIMFail)fail;
/**
* 修改群名
*
* 1. 公开群、聊天室和直播大群:只有群主或者管理员可以修改群名。
* 2. 私有群:任何人可修改群名。
*
* @param group 群组Id
* @param groupName 新群名
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupName:(NSString*)group groupName:(NSString*)groupName succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群简介
*
* 1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群简介。
* 2. 私有群:任何人可修改群简介。
*
* @param group 群组Id
* @param introduction 群简介(最长120字节)
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupIntroduction:(NSString*)group introduction:(NSString*)introduction succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群公告
*
* 1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群公告。
* 2. 私有群:任何人可修改群公告。
*
* @param group 群组Id
* @param notification 群公告(最长150字节)
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupNotification:(NSString*)group notification:(NSString*)notification succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群头像
*
* 1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改群头像。
* 2. 私有群:任何人可修改群头像。
*
* @param group 群组Id
* @param url 群头像地址(最长100字节)
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupFaceUrl:(NSString*)group url:(NSString*)url succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改加群选项
*
* 1. 公开群、聊天室、直播大群:只有群主或者管理员可以修改加群选项。
* 2. 私有群:只能通过邀请加入群组,不能主动申请加入某个群组。
*
* @param group 群组Id
* @param opt 加群选项,详见 TIMGroupAddOpt
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupAddOpt:(NSString*)group opt:(TIMGroupAddOpt)opt succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群自定义字段集合
*
* 通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限。
*
* @param group 群组Id
* @param customInfo 自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupCustomInfo:(NSString*)group customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 转让群给新群主
*
* 1. 只有群主才有权限进行群转让操作。
* 2. 直播大群不能进行群转让操作。
*
* @param group 群组Id
* @param identifier 新的群主Id
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupOwner:(NSString*)group user:(NSString*)identifier succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改接受消息选项
*
* 默认情况下,公开群和私有群是接收并离线推送群消息,聊天室和直播大群是接收但不离线推送群消息。
*
* @param group 群组Id
* @param opt 接受消息选项,详见 TIMGroupReceiveMessageOpt
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyReciveMessageOpt:(NSString*)group opt:(TIMGroupReceiveMessageOpt)opt succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群成员角色
*
* 1. 群主、管理员:可以进行对群成员的身份进行修改。
* 2. 直播大群:不支持修改用户群内身份。
*
* @param group 群组Id
* @param identifier 被修改角色的用户identifier
* @param role 角色(注意:不能修改为群主),详见 TIMGroupMemberRole
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetRole:(NSString*)group user:(NSString*)identifier role:(TIMGroupMemberRole)role succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 禁言用户
*
* 只有管理员或群主能够调用
*
* @param group 群组Id
* @param identifier 被禁言的用户identifier
* @param stime 禁言时间
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetSilence:(NSString*)group user:(NSString*)identifier stime:(uint32_t)stime succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群名片
*
* 只有本人、管理员或群主能够调用
*
* @param group 群组Id
* @param identifier 被操作用户identifier
* @param nameCard 群名片
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetNameCard:(NSString*)group user:(NSString*)identifier nameCard:(NSString*)nameCard succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群成员自定义字段集合
*
* 通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群成员维度自定义字段 配置相关的 key 和权限。
*
* @param group 群组 Id
* @param identifier 被操作用户 identifier
* @param customInfo 自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetCustomInfo:(NSString*)group user:(NSString*)identifier customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群组是否可被搜索属性
*
* @param group 群组Id
* @param searchable 是否能被搜索
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupSearchable:(NSString*)group searchable:(BOOL)searchable succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群组成员是否可见属性
*
* @param group 群组Id
* @param visible 是否可见
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberVisible:(NSString*)group visible:(BOOL)visible succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群组全员禁言属性
*
* 1. 群主、管理员:有权限进行全员禁言的操作。
* 2. 所有群组类型:都支持全员禁言的操作。
*
* @param group 群组Id
* @param shutup 是否禁言
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)modifyGroupAllShutup:(NSString*)group shutup:(BOOL)shutup succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取群组未决列表
*
* 1. 群未决消息泛指所有需要审批的群相关的操作(例如:加群待审批,拉人入群待审批等等)。即便审核通过或者拒绝后,该条信息也可通过此接口拉回,拉回的信息中有已决标志
* 2. 审批人:有权限拉取相关信息,如果 UserA 申请加入群 GroupA,则群管理员可获取此未决相关信息,UserA 因为没有审批权限,不需要拉取未决信息。如果 AdminA 拉 UserA 进去 GroupA,则 UserA 可以拉取此未决相关信息,因为该未决信息待 UserA 审批。
*
* @param option 未决参数配置
* @param succ 成功回调,返回未决列表
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)getPendencyFromServer:(TIMGroupPendencyOption*)option succ:(TIMGetGroupPendencyListSucc)succ fail:(TIMFail)fail;
/**
* 群未决已读上报
*
* 对于未决信息,SDK 可对其和之前的所有未决信息上报已读。上报已读后,仍然可以拉取到这些未决信息,但可通过对已读时戳的判断判定未决信息是否已读。
*
* @param timestamp 上报已读时间戳
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)pendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取用户所在群组信息(暂未实现)
*
* 开启本地缓存后有效
*
* @param groups 群组id(NSString*)列表,nil时返回群组列表
*
* @return 群组信息(TIMGroupInfo*)列表,assistant未同步时返回nil
*/
- (NSArray*)getGroupInfo:(NSArray*)groups;
@end
#endif /* TIMGroupManager_Ext_h */
//
// TIMGroupManager.h
// ImSDK
//
// Created by bodeng on 17/3/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_TIMGroupManager_h
#define ImSDK_TIMGroupManager_h
#import "TIMComm.h"
@interface TIMGroupManager : NSObject
/**
* 获取群管理器实例
*
* @return 管理器实例
*/
+ (TIMGroupManager*)sharedInstance;
/**
* 创建群组
*
* 1. 默认创建群组时,IM 通讯云服务器会生成一个唯一的 ID,该 ID 将以 @TGS# 开头,且保证在 App 中唯一,以便后续操作。
* 2. 如果用户需要自定义群组 ID,在创建时可指定 ID,自定义群组 ID 必须为可打印 ASCII 字符(0x20-0x7e),最长 48 个字节,且前缀不能为 @TGS#(避免与默认分配的群组 ID 混淆)
*
* @param type 群类型,Private,Public,ChatRoom,AVChatRoom
* @param groupId 自定义群组 ID,为空时系统自动分配
* @param groupName 群组名称
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)createGroup:(NSString*)type groupId:(NSString*)groupId groupName:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 解散群组
*
* 1. 私有群:任何人都无法解散群组
* 2. 公开群、聊天室、直播大群:群主可以解散群组。
*
* @param group 群组Id
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)deleteGroup:(NSString*)group succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 申请加群
*
* 1. 私有群:不能由用户主动申请入群。
* 2. 公开群、聊天室:可以主动申请进入。
* 3. 直播大群:可以任意加入群组。
* 4. 如果群组设置为需要审核,申请入群后管理员和群主会收到申请入群系统消息 TIMGroupSystemElem,判断 TIMGroupSystemElem 的 Type 类型如果是 TIM_GROUP_SYSTEM_ADD_GROUP_REQUEST_TYPE ,调用消息的 accept 接口同意入群,申请人会收到同意入群的消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_ADD_GROUP_ACCEPT_TYPE),调用 refuse 接口拒绝入群,申请人会收到拒绝入群的消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_ADD_GROUP_REFUSE_TYPE)。
* 5. 如果群主设置为任何人可加入,则直接入群成功。
*
* @param group 申请加入的群组Id
* @param msg 申请消息
* @param succ 成功回调(申请成功等待审批)
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)joinGroup:(NSString*)group msg:(NSString*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 主动退出群组
*
* 1. 私有群:全员可退出群组。
* 2. 公开群、聊天室、直播大群:群主不能退出。
* 3. 当用户主动退出群组时,该用户会收到退群消息 TIMGroupSystemElem(Type:TIM_GROUP_SYSTEM_QUIT_GROUP_TYPE),只有退群的用户自己可以收到。当用户调用 QuitGroup 时成功回调返回,表示已退出成功,此消息主要为了多终端同步,其他终端可以作为更新群列表的时机,本终端可以选择忽略。
*
* @param group 群组Id
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0:成功;1:失败
*/
- (int)quitGroup:(NSString*)group succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
#endif
//
// TIMManager+MsgExt.h
// IMMessageExt
//
// Created by tomzhu on 2017/1/11.
//
//
#ifndef TIMManager_MsgExt_h
#define TIMManager_MsgExt_h
#import "TIMManager.h"
#import "TIMComm+MsgExt.h"
@class TIMMessage;
@interface TIMManager (MsgExt)
/**
* 发送消息给多个用户
*
* @param msg 发送的消息
* @param users 目标用户的id列表
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 发送成功
*/
- (int)sendMessage:(TIMMessage*)msg toUsers:(NSArray*)users succ:(TIMSucc)succ fail:(TIMSendToUsersFail)fail;
/**
* 获取会话(TIMConversation*)列表
*
* @return 会话列表
*/
- (NSArray*)getConversationList;
/**
* 删除会话
*
* @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
* @param receiver 用户 identifier 或者群组 Id
*
* @return TRUE:删除成功;FALSE:删除失败
*/
- (BOOL)deleteConversation:(TIMConversationType)type receiver:(NSString*)receiver;
/**
* 删除会话和消息
*
* 这里只是删除本地消息,通过 getMessage 会拉取到漫游消息,所以存在删除消息成功,但是拉取到消息的情况,取决于是否重新从漫游拉回到本地。如果不需要拉取漫游,可以通过 getLocalMessage 获取本地消息,或者只通过 getMessage 拉取指定条数(如未读条数数量)的消息。
*
* @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
* @param receiver 用户identifier 或者 群组 Id
*
* @return TRUE:删除成功;FALSE:删除失败
*/
- (BOOL)deleteConversationAndMessages:(TIMConversationType)type receiver:(NSString*)receiver;
/**
* 获取会话数量
*
* @return 会话数量
*/
- (int)conversationCount;
/**
* 初始化存储(暂未实现)
*
* 仅查看历史消息时使用,如果要收发消息等操作,如login成功,不需要调用此函数
*
* @param param 登陆参数(userSig 不用填写)
* @param succ 成功回调,收到回调时,可以获取会话列表和消息
* @param fail 失败回调
*
* @return 0:请求成功;1:失败
*/
- (int)initStorage:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
@end
#endif /* TIMManager_MsgExt_h */
//
// TIMManager.h
// ImSDK
//
// Created by bodeng on 28/1/15.
// Copyright (c) 2015 tencent. All rights reserved.
//
#ifndef ImSDK_TIMManager_h
#define ImSDK_TIMManager_h
#import "TIMComm.h"
#import "TIMCallback.h"
@class TIMGroupManager;
@class TIMFriendshipManager;
/////////////////////////////////////////////////////////
/// Tencent 开放 SDK API
/////////////////////////////////////////////////////////
/**
* 通讯管理
*/
@interface TIMManager : NSObject
/////////////////////////////////////////////////////////////////////////////////
//
// (一)初始化相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 初始化相关接口
/// @{
/**
* 1.1 获取管理器实例 TIMManager
*
* @return 管理器实例
*/
+ (TIMManager*)sharedInstance;
/**
* 1.2 初始化 SDK,设置全局配置信息
*
* 初始化 SDK 需要设置 TIMSdkConfig 信息,TIMSdkConfig 主要包含 sdkAppId 和 accountType 设置、Log 相关逻辑设置、数据库存储路径设置、网络监听设置等,其中 sdkAppId 和 accountType 的获取请参考官网文档 [跑通Demo(iOS与Mac)](https://cloud.tencent.com/document/product/269/32674)。
*
* @param config 配置信息,全局有效,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
*
* @return 0:成功;1:失败,config 为 nil
*/
- (int)initSdk:(TIMSdkConfig*)config;
/**
* 1.3 获取全局配置信息
*
* 获取初始化 SDK 时候设置的 TIMSdkConfig,方便客户在上层做相关业务逻辑。
*
* @return 全局配置,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
*/
- (TIMSdkConfig*)getGlobalConfig;
/**
* 1.4 设置用户配置信息
*
* 1. setUserConfig 要在 initSdk 之后,login 之前,主要用来开启/关闭自动已读上报和已读回执,设置默认拉取的群组资料,群成员资料字段,监听用户登录状态、会话刷新、消息已读回执、文件上传进度、群组事件通知。
* 2. 自动已读上报默认是开启的,当客户端收到一条未读消息后,Server 默认会删除这条未读消息,切换终端以后无法看到之前终端已经拉回的未读消息,如果需要多终端情况下仍然会有未读,请设置 TIMUserConfig 中的 disableAutoReport 为 YES,一旦禁用自动上报,开发者需要显式调用 setReadMessage,详情请参考官方文档 [未读消息计数](https://cloud.tencent.com/document/product/269/9151)。
* 3. C2C 已读回执默认是关闭的,如果需要开启,请设置 TIMUserConfig 中的 enableReadReceipt 为 YES,收到消息的用户需要显式调用 setReadMessage,发消息的用户才能通过 TIMMessageReceiptListener 监听到消息的已读回执。
* 4. 当您获取群资料的时候,默认只能拉取内置字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段 value 做了赋值或则修改,才能拉取到自定义字段。
* 5. 当您获取群成员资料的时候,默认只能拉取内置字段,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群成员维度自定义字段配置相关的 key 和权限,然后把生成的 key 设置在 TIMGroupMemberInfoOption 里面的 memberCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
*
* @param config 配置信息,对当前 TIMManager 有效,详情请参考 TIMComm.h 中的 TIMUserConfig 定义
*
* @return 0:成功;1:失败,config 为 nil
*/
- (int)setUserConfig:(TIMUserConfig*)config;
/**
* 1.5 获取用户配置信息
*
* 获取设置的用户配置信息 TIMSdkConfig,方便客户在上层做相关业务逻辑。
*
* @return 当前 manager 绑定用户的配置,详情请参考 TIMComm.h 中的 TIMUserConfig 定义
*/
- (TIMUserConfig*)getUserConfig;
/**
* 1.6 添加消息监听(重复添加无效)
*
* 添加消息监听后,会在 TIMMessageListener 的 onNewMessage 收到回调消息,消息内容通过参数 TIMMessage 传递,通过 TIMMessage 可以获取消息和相关会话的详细信息,如消息文本,语音数据,图片等。详细可参阅 [消息解析](https://cloud.tencent.com/document/product/269/9150#.E6.B6.88.E6.81.AF.E8.A7.A3.E6.9E.90) 部分。
*
* @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
*
* @return 0:成功;1:失败,listener 为 nil
*/
- (int)addMessageListener:(id<TIMMessageListener>)listener;
/**
* 1.7 移除消息监听
*
* @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
*
* @return 0:成功;1:失败,listener 为 nil
*/
- (int)removeMessageListener:(id<TIMMessageListener>)listener;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)登录相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 登录相关接口
/// @{
/**
* 2.1 登录
*
* 1. 登录需要设置用户名 identifier 和用户签名 userSig,userSig 的生成请参考官网文档 [UserSig 后台 API](https://cloud.tencent.com/document/product/269/32688)。
* 2. 如果 userSig 过期,登录会返回 ERR_USER_SIG_EXPIRED:6206 错误码,收到错误码后请生成新的 userSig 重新登录。
* 3. 用户在线情况下被踢,会在 TIMUserConfig 里面配置的 TIMUserStatusListener 监听器获取 onForceOffline 回调,收到回调后可以选择重新登录。
* 4. 用户离线状态下被踢,由于此时用户不在线,无法感知此事件,为了显式提醒用户,用户重新登录时,会返回 ERR_IMSDK_KICKED_BY_OTHERS:6208 错误码,表明之前被踢,如果需要把对方踢下线,再次调用 login 强制上线,更多详情请参考 [用户状态变更](https://cloud.tencent.com/document/product/269/9148#5.-.E7.94.A8.E6.88.B7.E7.8A.B6.E6.80.81.E5.8F.98.E6.9B.B4)。
*
* @param param 登陆参数,详情请参考 TIMComm.h 中的 TIMLoginParam 定义
* @param succ 成功回调,详情请参考 TIMComm.h 中的 TIMLoginSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败,请检查 param 参数是否正常
*/
- (int)login: (TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
/**
* 2.2 自动登录
*
* 1. 首次登陆之后,SDK 会把登陆信息存在在本地,下次登陆即可调用自动登录
* 2. 如果用户之前没有登录过,或则 APP 被卸载过,自动登录会报 ERR_NO_PREVIOUS_LOGIN:6026 错误,这个时候请调用 login 接口重新登录。
*
* @param param 登陆参数( userSig 不用填),详情请参考 TIMComm.h 中的 TIMLoginParam 定义
* @param succ 成功回调,详情请参考 TIMComm.h 中的 TIMLoginSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败,请检查 param 参数是否正常
*/
- (int)autoLogin:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
/**
* 2.3 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login,否则 login 可能会失败。
*
* @param succ 成功回调,登出成功
* @param fail 失败回调,返回错误吗和错误信息
*
* @return 0:发送登出包成功,等待回调;1:失败
*/
- (int)logout:(TIMLoginSucc)succ fail:(TIMFail)fail;
/**
* 2.4 获取当前登陆的用户
*
* @return 如果登陆返回用户的 identifier,如果未登录返回 nil
*/
- (NSString*)getLoginUser;
/**
* 2.5 获取当前登录状态
*
* @return 登录状态,详情请参考 TIMComm.h 中的 TIMLoginStatus 定义
*/
- (TIMLoginStatus)getLoginStatus;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)获取会话管理器
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 获取会话管理器
/// @{
/**
* 获取会话管理器
*
* TIMConversation 负责会话相关操作,包含发送消息、获取会话消息缓存、获取未读计数等。
*
* @param type 会话类型,TIM_C2C:单聊;TIM_GROUP:群聊;TIM_SYSTEM:系统会话
* @param receiver 会话接收者,C2C:为对方用户;identifier;GROUP:群组 Id;SYSTEM:@""
*
* @return 会话对象,详情请参考 TIMConversation.h 里面的 TIMConversation 定义
*/
- (TIMConversation*)getConversation:(TIMConversationType)type receiver:(NSString*)receiver;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (四)获取群管理器
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 获取群管理器
/// @{
/**
* 获取群管理器
*
* TIMGroupManager 负责创建群、增删成员、以及修改群资料等
*
* @return 群管理器,详情请参考 TIMGroupManager.h 中的 TIMGroupManager 定义
*/
- (TIMGroupManager*)groupManager;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (五)获取好友管理器
//
/////////////////////////////////////////////////////////////////////////////////
///@name 获取好友管理器
/// @{
/**
* 获取好友管理器
*
* TIMFriendshipManager 负责加好友,删除好友,查询好友列表等
*
* @return 好友管理器,详情请参考 TIMFriendshipManager.h 中的 TIMFriendshipManager 定义
*/
- (TIMFriendshipManager*)friendshipManager;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (六)设置 APNs 推送
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 设置 APNs 推送
/// @{
/**
* 6.1. 设置客户端 Token 和证书 busiId
*
* 1. token 是向苹果后台请求 DeviceToken,具体实现请参考 appdelegate.h 里面的 registNotification。
* 2. busiId 是向 IM 控制台上传 iOS 证书(p.12)生成的,具体步骤请参考 [离线推送](https://cloud.tencent.com/document/product/269/9154)。
*
* @param token 详情请参考 TIMComm.h 中的 TIMTokenParam 定义
* @param succ 成功回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败,token 参数异常
*/
- (int)setToken:(TIMTokenParam*)token succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 6.2. 设置推送声音
*
* 不同用户可能想使用不同的推送声音,TIMAPNSConfig 提供了设置用户声音的字段,可实现单聊声音、群组声音的设置,也可在用户级别设置是否开启推送。
*
* @param config APNS 配置,详情请参考 TIMComm.h 中的 TIMAPNSConfig 定义
* @param succ 成功回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败,config 参数异常
*/
- (int)setAPNS:(TIMAPNSConfig*)config succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 6.3. 获取推送声音设置
*
* @param succ 成功回调,返回配置信息,详情请参考 TIMComm.h 中的 TIMAPNSConfigSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败
*/
- (int)getAPNSConfig:(TIMAPNSConfigSucc)succ fail:(TIMFail)fail;
/**
* 6.4. APP 进后台
*
* APP 进后台的时候需要主动调用 doBackground ,这个时候后台知道 APP 的状态,之后的消息会下发推送通知。
*
* @param param 上报参数,详情请参考 TIMComm.h 中的 TIMBackgroundParam 定义
* @param succ 成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败
*/
- (int)doBackground:(TIMBackgroundParam*)param succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 6.5. APP 进后台
*
* APP 进前台的时候需要主动调用 doForeground。
*
* @param succ 成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败
*/
- (int)doForeground:(TIMSucc)succ fail:(TIMFail)fail;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (七)多账号登录接口
//
/////////////////////////////////////////////////////////////////////////////////
///@name 多账号登录接口
/// @{
/**
* 创建新的管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @return 管理器实例
*/
+ (TIMManager*)newManager;
/**
* 获取管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @param identifier 用户 identifier
*
* @return 对应管理器类型,如果没有创建过,返回 nil
*/
+ (TIMManager*)getManager:(NSString*)identifier;
/**
* 销毁管理器(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @param manager 需要销毁的管理器
*/
+ (void)deleteManager:(TIMManager*)manager;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (八)调试相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 调试相关接口
/// @{
/**
* 获取网络状态
*
* @return 网络状态,详情请参考 TIMComm.h 中的 TIMNetworkStatus 定义
*/
- (TIMNetworkStatus)networkStatus;
/**
* 设置环境(暂未实现)
*
* 在 InitSdk 之前调用,注意:除非是 IM 工作人员指定要求设置,否则不需要调用此接口
*
* @param env 0:正式环境(默认);1:测试环境
*
*/
- (void)setEnv:(int)env;
/**
* 获取环境类型(暂未实现)
*
* @return env 0:正式环境(默认);1:测试环境
*
*/
- (int)getEnv;
/**
* 获取版本号
*
* @return 返回版本号,字符串表示,例如 v1.1.1
*/
- (NSString*)GetVersion;
/**
* 打印日志,通过 ImSDK 提供的日志功能打印日志
*
* @param level 日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
* @param tag 模块 tag
* @param msg 要输出的日志内容
*/
- (void)log:(TIMLogLevel)level tag:(NSString*)tag msg:(NSString*)msg;
/**
* 获取日志文件路径
*/
- (NSString*)getLogPath;
/**
* 是否开启 sdk 日志打印
*
* @return YES:允许 log 打印;NO:不允许 log 打印
*/
- (BOOL)getIsLogPrintEnabled;
/**
* 获取日志级别
*
* @return 返回日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
*/
-(TIMLogLevel) getLogLevel;
///@}
/////////////////////////////////////////////////////////////////////////////////
//
// (九)废弃接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 废弃接口
/// @{
/**
* 获取联网SDK的版本号 (方法已废弃, SDK 不再依赖 QAL 库)
*
* @return 返回版本号
*/
- (NSString*)GetQALVersion;
///@}
@end
#endif
//
// TIMMessage+MsgExt.h
// IMMessageExt
//
// Created by tomzhu on 2016/12/27.
//
//
#ifndef TIMMessage_h
#define TIMMessage_h
#import "TIMMessage.h"
#import "TIMComm+MsgExt.h"
#pragma mark - Elem类型
/////////////////////////////////////////////////////////////////////////////////
//
// (一)关系链变更消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 关系链变更消息
/// @{
@interface TIMSNSSystemElem : TIMElem
/**
* 操作类型
*/
@property(nonatomic,assign) TIM_SNS_SYSTEM_TYPE type;
/**
* 被操作用户列表:TIMSNSChangeInfo 列表
*/
@property(nonatomic,strong) NSArray * users;
/**
* 未决已读上报时间戳 type = TIM_SNS_SYSTEM_PENDENCY_REPORT 有效
*/
@property(nonatomic,assign) uint64_t pendencyReportTimestamp;
/**
* 推荐已读上报时间戳 type = TIM_SNS_SYSTEM_RECOMMEND_REPORT 有效
*/
@property(nonatomic,assign) uint64_t recommendReportTimestamp;
/**
* 已决已读上报时间戳 type = TIM_SNS_SYSTEM_DECIDE_REPORT 有效
*/
@property(nonatomic,assign) uint64_t decideReportTimestamp;
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)资料变更消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 资料变更消息
/// @{
@interface TIMProfileSystemElem : TIMElem
/**
* 变更类型
*/
@property(nonatomic,assign) TIM_PROFILE_SYSTEM_TYPE type;
/**
* 资料变更的用户
*/
@property(nonatomic,strong) NSString * fromUser;
/**
* 资料变更的昵称(如果昵称没有变更,该值为 nil)
*/
@property(nonatomic,strong) NSString * nickName;
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)消息扩展接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 消息扩展接口
/// @{
@interface TIMMessage (MsgExt)
/**
* 自己是否已读
*
* @return TRUE:已读;FALSE:未读
*/
- (BOOL)isReaded;
/**
* 对方是否已读(仅 C2C 消息有效)
*
* @return TRUE:已读;FALSE:未读
*/
- (BOOL)isPeerReaded;
/**
* 删除消息
*
* 目前暂不支持 Server 消息删除,只能在本地删除。删除后使用 getMessage 拉取本地消息,不会返回被删除的消息。
*
* @return TRUE:成功;FALSE:失败
*/
- (BOOL)remove;
/**
* 消息是否有断层
*
* OnNewMessage 回调收到消息,如果有断层,需要重新 getMessage 补全(有C2C漫游的情况下使用)
*
* @return TRUE:有断层;FALSE:无断层
*/
- (BOOL)hasGap;
/**
* 设置自定义整数,默认为 0
*
* 1.此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
* 2.可以根据这个字段设置语音消息是否已经播放,如 customInt 的值 0 表示未播放,1 表示播放,当用户单击播放后可设置 customInt 的值为 1。
*
* @param param 设置参数
*
* @return TRUE:设置成功;FALSE:设置失败
*/
- (BOOL)setCustomInt:(int32_t)param;
/**
* 设置自定义数据,默认为""
*
* 此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
*
* @param data 设置参数
*
* @return TRUE:设置成功;FALSE:设置失败
*/
- (BOOL)setCustomData:(NSData*)data;
/**
* 获取 CustomInt
*
* @return CustomInt
*/
- (int32_t)customInt;
/**
* 获取 CustomData
*
* @return CustomData
*/
- (NSData*)customData;
/**
* 获取消息定位符
*
* @return locator,详情请参考 TIMComm.h 里面的 TIMMessageLocator 定义
*/
- (TIMMessageLocator*)locator;
/**
* 是否为 locator 对应的消息
*
* @param locator 消息定位符
*
* @return YES 是对应的消息
*/
- (BOOL)respondsToLocator:(TIMMessageLocator*)locator;
/**
* 设置消息时间戳
*
* 需要先将消息到导入到本地,调用 convertToImportedMsg 方法
*
* @param time 时间戳
*
* @return 0:成功;1:失败
*/
- (int)setTime:(time_t)time;
/**
* 设置消息发送方
*
* 需要先将消息到导入到本地,调用 convertToImportedMsg 方法
*
* @param sender 发送方Id
*
* @return 0:成功;1:失败
*/
- (int)setSender:(NSString*)sender;
/**
* 将消息导入到本地
*
* 只有调用这个接口,才能去修改消息的时间戳和发送方
*
* @return 0:成功;1:失败
*/
- (int)convertToImportedMsg;
/// @}
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (四)草稿箱
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 草稿箱
/// @{
@interface TIMMessageDraft : NSObject
/**
* 设置自定义数据
*
* @param userData 自定义数据
*
* @return 0:成功;1:失败
*/
- (int)setUserData:(NSData*)userData;
/**
* 获取自定义数据
*
* @return 自定义数据
*/
- (NSData*)getUserData;
/**
* 增加Elem
*
* @param elem elem结构
*
* @return 0:表示成功;1:禁止添加Elem(文件或语音多于两个Elem);2:未知Elem
*
*/
- (int)addElem:(TIMElem*)elem;
/**
* 获取对应索引的 Elem
*
* @param index 对应索引
*
* @return 返回对应 Elem
*/
- (TIMElem*)getElem:(int)index;
/**
* 获取Elem数量
*
* @return elem数量
*/
- (int)elemCount;
/**
* 草稿生成对应的消息
*
* @return 消息,详情请参考 TIMMessage.h 里面的 TIMMessage 定义
*/
- (TIMMessage*)transformToMessage;
/**
* 当前消息的时间戳
*
* @return 时间戳
*/
- (NSDate*)timestamp;
/// @}
@end
#endif /* TIMMessage_h */