shmily

sdk upgrade

Too many changes to show.

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

... ... @@ -9,7 +9,6 @@
#ifndef IMGroupExt_h
#define IMGroupExt_h
#import "ImSDK.h"
#import "TIMComm+Group.h"
#import "TIMGroupManager+Ext.h"
... ...
... ... @@ -9,7 +9,6 @@
#ifndef ImSDK_h
#define ImSDK_h
#import "ImSDK.h"
#import "TIMConversation+MsgExt.h"
#import "TIMMessage+MsgExt.h"
#import "TIMComm+MsgExt.h"
... ...
... ... @@ -15,8 +15,10 @@
#import "TIMConversation.h"
#import "TIMGroupManager.h"
#import "TIMCallback.h"
//#import "TIMFriendshipManager.h"
//#import "IMSdkInt.h"
#import "TIMFriendshipManager.h"
#import "IMSdkComm.h"
#import "TIMErrorCode.h"
#import "IMGroupExt.h"
#import "IMMessageExt.h"
#endif
... ...
... ... @@ -14,6 +14,8 @@
@class TIMMessage;
@class TIMGroupTipsElem;
@class TIMGroupInfo;
@class TIMSNSChangeInfo;
@class TIMFriendPendencyInfo;
/**
* 连接通知回调
... ... @@ -167,90 +169,40 @@
- (void)onGroupTipsEvent:(TIMGroupTipsElem*)elem;
@end
///**
// * 好友代理事件回调
// */
//@protocol TIMFriendshipListener <NSObject>
//@optional
//
///**
// * 添加好友通知
// *
// * @param users 好友列表(TIMUserProfile*)
// */
//- (void)onAddFriends:(NSArray*)users;
//
///**
// * 删除好友通知
// *
// * @param identifiers 用户id列表(NSString*)
// */
//- (void)onDelFriends:(NSArray*)identifiers;
//
///**
// * 好友资料更新通知
// *
// * @param profiles 资料列表(TIMUserProfile*)
// */
//- (void)onFriendProfileUpdate:(NSArray*)profiles;
//
///**
// * 好友申请通知
// *
// * @param reqs 好友申请者id列表(TIMSNSChangeInfo*)
// */
//- (void)onAddFriendReqs:(NSArray*)reqs;
//
//@end
/**
* 好友代理事件回调
*/
@protocol TIMFriendshipListener <NSObject>
@optional
//@protocol TIMGroupListener <NSObject>
//@optional
//
///**
// * 有新用户加入群时的通知回调
// *
// * @param groupId 群ID
// * @param membersInfo 加群用户的群资料(TIMGroupMemberInfo*)列表
// */
//- (void)onMemberJoin:(NSString*)groupId membersInfo:(NSArray*)membersInfo;
//
///**
// * 有群成员退群时的通知回调
// *
// * @param groupId 群ID
// * @param members 退群成员的identifier(NSString*)列表
// */
//- (void)onMemberQuit:(NSString*)groupId members:(NSArray*)members;
//
///**
// * 群成员信息更新的通知回调
// *
// * @param groupId 群ID
// * @param membersInfo 更新后的群成员资料(TIMGroupMemberInfo*)列表
// */
//- (void)onMemberUpdate:(NSString*)groupId membersInfo:(NSArray*)membersInfo;
//
///**
// * 加入群的通知回调
// *
// * @param groupInfo 加入群的群组资料
// */
//- (void)onGroupAdd:(TIMGroupInfo*)groupInfo;
//
///**
// * 本地群组资料被删除的通知回调,包括主动退群,被踢,群被解散,群被回收
// *
// * @param groupId 对应的群ID
// */
//- (void)onGroupDelete:(NSString*)groupId;
//
///**
// * 群资料更新的通知回调
// *
// * @param groupInfo 更新后的群资料信息
// */
//- (void)onGroupUpdate:(TIMGroupInfo*)groupInfo;
//
//@end
/**
* 添加好友通知
*
* @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
... ...
... ... @@ -9,9 +9,10 @@
#ifndef TIMComm_Group_h
#define TIMComm_Group_h
#import "ImSDK.h"
#import "TIMComm.h"
@class TIMGroupPendencyMeta;
@class TIMCreateGroupMemberInfo;
#pragma mark - 枚举类型
... ... @@ -228,9 +229,9 @@ typedef void (^TIMGroupMemberSucc)(NSArray * members);
/**
* 群列表回调
*
* @param arr 群列表
* @param arr 群列表,成员类型 TIMGroupInfo
*/
typedef void (^TIMGroupListSucc)(NSArray * arr);
typedef void (^TIMGroupListSucc)(NSArray<TIMGroupInfo *> * arr);
/**
* 本人群组内成员信息回调
... ... @@ -329,7 +330,7 @@ typedef void (^TIMGetGroupPendencyListSucc)(TIMGroupPendencyMeta * meta, NSArray
/**
* 创建成员(TIMCreateGroupMemberInfo*)列表
*/
@property(nonatomic,strong) NSArray* membersInfo;
@property(nonatomic,strong) NSArray <TIMCreateGroupMemberInfo *>* membersInfo;
@end
... ...
... ... @@ -10,7 +10,7 @@
#define TIMComm_MsgExt_h
#import <Foundation/Foundation.h>
#import "ImSDK.h"
#import "TIMComm.h"
@class TIMSendToUsersDetailInfo;
... ...
... ... @@ -21,16 +21,19 @@
@protocol TIMMessageRevokeListener;
@protocol TIMUploadProgressListener;
@protocol TIMGroupEventListener;
//@protocol TIMFriendshipListener;
@protocol TIMFriendshipListener;
//@protocol TIMGroupListener;
@class TIMMessage;
@class TIMImageElem;
@class TIMConversation;
@class TIMAPNSConfig;
@class TIMUserProfile;
@class TIMFriend;
@class TIMGroupInfoOption;
@class TIMGroupMemberInfoOption;
@class TIMFriendProfileOption;
@class TIMFriendResult;
@class TIMCheckFriendResult;
#pragma mark - 枚举类型
... ... @@ -53,10 +56,25 @@ typedef NS_ENUM(NSInteger, TIMNetworkStatus) {
* 日志级别
*/
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,
};
... ... @@ -175,19 +193,19 @@ typedef NS_ENUM(NSInteger, TIM_IMAGE_TYPE){
*/
typedef NS_ENUM(NSInteger, TIM_IMAGE_FORMAT){
/**
* JPG格式
* JPG 格式
*/
TIM_IMAGE_FORMAT_JPG = 0x1,
/**
* GIF格式
* GIF 格式
*/
TIM_IMAGE_FORMAT_GIF = 0x2,
/**
* PNG格式
* PNG 格式
*/
TIM_IMAGE_FORMAT_PNG = 0x3,
/**
* BMP格式
* BMP 格式
*/
TIM_IMAGE_FORMAT_BMP = 0x4,
/**
... ... @@ -196,6 +214,9 @@ typedef NS_ENUM(NSInteger, TIM_IMAGE_FORMAT){
TIM_IMAGE_FORMAT_UNKNOWN = 0xff,
};
/**
* 登录状态
*/
typedef NS_ENUM(NSInteger, TIMLoginStatus) {
/**
* 已登陆
... ... @@ -213,6 +234,9 @@ typedef NS_ENUM(NSInteger, TIMLoginStatus) {
TIM_STATUS_LOGOUT = 3,
};
/**
* 群组成员是否可见
*/
typedef NS_ENUM(NSInteger, TIMGroupMemberVisibleType) {
/**
* 未知
... ... @@ -228,6 +252,9 @@ typedef NS_ENUM(NSInteger, TIMGroupMemberVisibleType) {
TIM_GROUP_MEMBER_VISIBLE_YES = 0x02,
};
/**
* 群组是否能被搜到
*/
typedef NS_ENUM(NSInteger, TIMGroupSearchableType) {
/**
* 未知
... ... @@ -302,13 +329,13 @@ typedef NS_ENUM(NSInteger, TIMGroupReceiveMessageOpt) {
*/
TIM_GROUP_NOT_RECEIVE_MESSAGE = 1,
/**
* 接受消息,不进行iOS APNs 推送
* 接受消息,不进行 iOS APNs 推送
*/
TIM_GROUP_RECEIVE_NOT_NOTIFY_MESSAGE = 2,
};
/**
* 群Tips类型
* 群 Tips 类型
*/
typedef NS_ENUM(NSInteger, TIM_GROUP_TIPS_TYPE){
/**
... ... @@ -342,7 +369,7 @@ typedef NS_ENUM(NSInteger, TIM_GROUP_TIPS_TYPE){
};
/**
* 群Tips类型
* 群变更信息 Tips 类型
*/
typedef NS_ENUM(NSInteger, TIM_GROUP_INFO_CHANGE_TYPE){
/**
... ... @@ -433,6 +460,9 @@ typedef NS_ENUM(NSInteger, TIM_GROUP_SYSTEM_TYPE){
TIM_GROUP_SYSTEM_CUSTOM_INFO = 0xff,
};
/**
* 推送规则
*/
typedef NS_ENUM(NSInteger, TIMOfflinePushFlag) {
/**
* 按照默认规则进行推送
... ... @@ -444,6 +474,9 @@ typedef NS_ENUM(NSInteger, TIMOfflinePushFlag) {
TIM_OFFLINE_PUSH_NO_PUSH = 1,
};
/**
* 安卓离线推送模式
*/
typedef NS_ENUM(NSInteger, TIMAndroidOfflinePushNotifyMode) {
/**
* 通知栏消息
... ... @@ -480,6 +513,9 @@ typedef NS_ENUM(NSInteger, TIMGroupMemberRole) {
TIM_GROUP_MEMBER_ROLE_SUPER = 400,
};
/**
* 好友验证方式
*/
typedef NS_ENUM(NSInteger, TIMFriendAllowType) {
/**
* 同意任何用户加好友
... ... @@ -497,6 +533,9 @@ typedef NS_ENUM(NSInteger, TIMFriendAllowType) {
TIM_FRIEND_DENY_ANY = 2,
};
/**
* 性别
*/
typedef NS_ENUM(NSInteger, TIMGender) {
/**
* 未知性别
... ... @@ -513,61 +552,8 @@ typedef NS_ENUM(NSInteger, TIMGender) {
};
/**
* 基本资料标志位
*/
typedef NS_ENUM(NSInteger, TIMProfileFlag) {
/**
* 昵称
*/
TIM_PROFILE_FLAG_NICK = 0x01,
/**
* 好友验证方式
*/
TIM_PROFILE_FLAG_ALLOW_TYPE = (0x01 << 1),
/**
* 头像
*/
TIM_PROFILE_FLAG_FACE_URL = (0x01 << 2),
/**
* 好友备注
*/
TIM_PROFILE_FLAG_REMARK = (0x01 << 3),
/**
* 好友分组
*/
TIM_PROFILE_FLAG_GROUP = (0x01 << 4),
/**
* 用户签名
*/
TIM_PROFILE_FLAG_SELFSIGNATURE = (0x01 << 5),
/**
* 用户性别
*/
TIM_PROFILE_FLAG_GENDER = (0x01 << 6),
/**
* 用户生日
*/
TIM_PROFILE_FLAG_BIRTHDAY = (0x01 << 7),
/**
* 用户区域
*/
TIM_PROFILE_FLAG_LOCATION = (0x01 << 8),
/**
* 用户语言
*/
TIM_PROFILE_FLAG_LANGUAGE = (0x01 << 9),
/**
* 用户等级
*/
TIM_PROFILE_FLAG_LEVEL = (0x01 << 10),
/**
* 用户角色
*/
TIM_PROFILE_FLAG_ROLE = (0x01 << 11),
};
#pragma mark - block回调
#pragma mark - block 回调
/**
* 获取消息回调
... ... @@ -620,12 +606,12 @@ typedef void (^TIMLogFunc)(TIMLogLevel lvl, NSString * msg);
/**
* 上传图片成功回调
*
* @param elem 上传图片成功后elem
* @param elem 上传图片成功后 elem
*/
typedef void (^TIMUploadImageSucc)(TIMImageElem * elem);
/**
* APNs推送配置更新成功回调
* APNs 推送配置更新成功回调
*
* @param config 配置
*/
... ... @@ -634,7 +620,7 @@ typedef void (^TIMAPNSConfigSucc)(TIMAPNSConfig* config);
/**
* 群创建成功
*
* @param groupId 群组Id
* @param groupId 群组 Id
*/
typedef void (^TIMCreateGroupSucc)(NSString * groupId);
... ... @@ -643,7 +629,7 @@ typedef void (^TIMCreateGroupSucc)(NSString * groupId);
*
* @param friends 好友列表
*/
typedef void (^TIMFriendSucc)(NSArray * friends);
typedef void (^TIMFriendArraySucc)(NSArray<TIMFriend *> *friends);
/**
* 获取资料回调
... ... @@ -652,566 +638,395 @@ typedef void (^TIMFriendSucc)(NSArray * friends);
*/
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);
/**
* 检查好友操作回调
*
* @param results 检查结果
*/
typedef void (^TIMCheckFriendResultArraySucc)(NSArray<TIMCheckFriendResult *> *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,必填
*/
///用户标识接入 SDK 的应用 ID,必填
@property(nonatomic,assign) int sdkAppId;
/**
* 用户的账号类型,必填
*/
@property(nonatomic,strong) NSString * accountType;
///用户的账号类型,新版本不需要再填写
//@property(nonatomic,strong) NSString * accountType;
/**
* 禁用crash上报,默认上报
*/
@property(nonatomic,assign) BOOL disableCrashReport;
/**
* 禁止在控制台打印log
*/
///禁止在控制台打印 log
@property(nonatomic,assign) BOOL disableLogPrint;
/**
* 本地写log文件的等级,默认DEBUG等级
*/
///本地写 log 文件的等级,默认 DEBUG 等级
@property(nonatomic,assign) TIMLogLevel logLevel;
/**
* log文件路径,不设置时为默认路径
*/
///log 文件路径,不设置时为默认路径
@property(nonatomic,strong) NSString * logPath;
/**
* 回调给log函数的log等级,默认DEBUG等级
*/
///回调给 log 函数的 log 等级,默认 DEBUG 等级
@property(nonatomic,assign) TIMLogLevel logFuncLevel;
/**
* log监听函数
*/
///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 已读回执,只针对 C2C 消息生效,用户开启已读回执功能后,对方调用 setReadMessage 时会同步已读信息到本客户端,您可以在 TIMMessageReceiptListener 监听消息已读回执
@property(nonatomic,assign) BOOL enableReadReceipt;
/**
* 不开启最近联系人(加载消息扩展包有效)
*/
@property(nonatomic,assign) BOOL disableRecnetContact;
/**
* 不通过onNewMessage:抛出最近联系人的最后一条消息(加载消息扩展包有效)
*/
@property(nonatomic,assign) BOOL disableRecentContactNotify;
///**
// * 开启关系链数据本地缓存功能(加载好友扩展包有效)
// */
//@property(nonatomic,assign) BOOL enableFriendshipProxy;
///**
// * 开启群组数据本地缓存功能(加载群组扩展包有效)
// */
//@property(nonatomic,assign) BOOL enableGroupAssistant;
/**
* 设置默认拉取的群组资料
*/
///设置默认拉取的群组资料
@property(nonatomic,strong) TIMGroupInfoOption * groupInfoOpt;
/**
* 设置默认拉取的群成员资料
*/
///设置默认拉取的群成员资料
@property(nonatomic,strong) TIMGroupMemberInfoOption * groupMemberInfoOpt;
/**
* 设置默认拉取的好友资料
*/
///关系链参数
@property(nonatomic,strong) TIMFriendProfileOption * friendProfileOpt;
/**
* 用户登录状态监听器
*/
@property(nonatomic,strong) id<TIMUserStatusListener> userStatusListener;
///用户登录状态监听器
@property(nonatomic,weak) id<TIMUserStatusListener> userStatusListener;
/**
* 会话刷新监听器(未读计数、已读同步)(加载消息扩展包有效)
*/
@property(nonatomic,strong) id<TIMRefreshListener> refreshListener;
///会话刷新监听器(未读计数、已读同步)
@property(nonatomic,weak) id<TIMRefreshListener> refreshListener;
/**
* 消息已读回执监听器(加载消息扩展包有效)
*/
@property(nonatomic,strong) id<TIMMessageReceiptListener> messageReceiptListener;
///消息已读回执监听器
@property(nonatomic,weak) id<TIMMessageReceiptListener> messageReceiptListener;
/**
* 消息svr重写监听器(加载消息扩展包有效)
*/
@property(nonatomic,strong) id<TIMMessageUpdateListener> messageUpdateListener;
///消息 svr 重写监听器
@property(nonatomic,weak) id<TIMMessageUpdateListener> messageUpdateListener;
/**
* 消息撤回监听器(加载消息扩展包有效)
*/
@property(nonatomic,strong) id<TIMMessageRevokeListener> messageRevokeListener;
/**
* 文件上传进度监听器
*/
@property(nonatomic,strong) id<TIMUploadProgressListener> uploadProgressListener;
///消息撤回监听器
@property(nonatomic,weak) id<TIMMessageRevokeListener> messageRevokeListener;
/**
* 群组事件通知监听器
*/
@property(nonatomic,strong) id<TIMGroupEventListener> groupEventListener;
///文件上传进度监听器
@property(nonatomic,weak) id<TIMUploadProgressListener> uploadProgressListener;
///**
// * 关系链数据本地缓存监听器(加载好友扩展包、enableFriendshipProxy有效)
// */
//@property(nonatomic,strong) id<TIMFriendshipListener> friendshipListener;
///群组事件通知监听器
@property(nonatomic,weak) id<TIMGroupEventListener> groupEventListener;
///**
// * 群组据本地缓存监听器(加载群组扩展包、enableGroupAssistant有效)
// */
//@property(nonatomic,strong) id<TIMGroupListener> groupListener;
///关系链数据本地缓存监听器
@property(nonatomic,weak) id<TIMFriendshipListener> friendshipListener;
@end
/**
* 登陆信息
*/
/// 登陆参数
@interface TIMLoginParam : NSObject
/**
* 用户名
*/
///用户名
@property(nonatomic,strong) NSString* identifier;
/**
* 鉴权Token
*/
///鉴权 Token
@property(nonatomic,strong) NSString* userSig;
/**
* App用户使用OAuth授权体系分配的Appid
*/
///App 用户使用 OAuth 授权体系分配的 Appid
@property(nonatomic,strong) NSString* appidAt3rd;
@end
/**
* APNs 配置
*/
/// APNs 配置
@interface TIMAPNSConfig : NSObject
/**
* 是否开启推送:0-不进行设置 1-开启推送 2-关闭推送
*/
///是否开启推送:0-不进行设置 1-开启推送 2-关闭推送
@property(nonatomic,assign) uint32_t openPush;
/**
* C2C消息声音,不设置传入nil
*/
///C2C 消息声音,不设置传入 nil
@property(nonatomic,strong) NSString * c2cSound;
/**
* Group消息声音,不设置传入nil
*/
///Group 消息声音,不设置传入 nil
@property(nonatomic,strong) NSString * groupSound;
/**
* Video声音,不设置传入nil
*/
///Video 音视频邀请声音,不设置传入 nil (暂不支持)
@property(nonatomic,strong) NSString * videoSound;
@end
/**
* SetToken 参数
*/
/// SetToken 参数
@interface TIMTokenParam : NSObject
/**
* 获取的客户端Token信息
*/
///获取的客户端 Token 信息
@property(nonatomic,strong) NSData* token;
/**
* 业务ID,传递证书时分配
*/
///业务 ID,传递证书时分配
@property(nonatomic,assign) uint32_t busiId;
@end
/**
* 切后台参数
*/
/// 切后台参数
@interface TIMBackgroundParam : NSObject
/**
* C2C 未读计数
*/
///C2C 未读计数
@property(nonatomic,assign) int c2cUnread;
/**
* 群 未读计数
*/
///群未读计数
@property(nonatomic,assign) int groupUnread;
@end
/// 消息定位
@interface TIMMessageLocator : NSObject
/**
* 所属会话的id
*/
///所属会话的 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会话)
*/
///已读回执对应的会话(目前只支持 C2C 会话)
@property(nonatomic,strong) TIMConversation * conversation;
/**
* 收到已读回执时,这个时间戳之前的消息都已读
*/
///收到已读回执时,这个时间戳之前的消息都已读
@property(nonatomic,assign) time_t timestamp;
@end
/// Android 离线推送配置
@interface TIMAndroidOfflinePushConfig : NSObject
/**
* 离线推送时展示标签
*/
///离线推送时展示标签
@property(nonatomic,strong) NSString * title;
/**
* Android离线Push时声音字段信息
*/
///Android 离线 Push 时声音字段信息
@property(nonatomic,strong) NSString * sound;
/**
* 离线推送时通知形式
*/
///离线推送时通知形式
@property(nonatomic,assign) TIMAndroidOfflinePushNotifyMode notifyMode;
@end
/// iOS 离线推送配置
@interface TIMIOSOfflinePushConfig : NSObject
/**
* 离线Push时声音字段信息
*/
///离线 Push 时声音字段信息
@property(nonatomic,strong) NSString * sound;
/**
* 忽略badge计数
*/
///忽略 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
*/
///群组 Id
@property(nonatomic,strong) NSString* group;
/**
* 群名
*/
///群名
@property(nonatomic,strong) NSString* groupName;
/**
* 群创建人/管理员
*/
///群创建人/管理员
@property(nonatomic,strong) NSString * owner;
/**
* 群类型:Private,Public,ChatRoom
*/
///群类型: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;
///自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
@property(nonatomic,strong) NSDictionary<NSString *,NSData *>* customInfo;
@end
/**
* 事件上报信息
*/
/// 事件上报信息
@interface TIMEventReportItem : NSObject
/**
* 事件id
*/
///事件 id
@property(nonatomic,assign) uint32_t event;
/**
* 错误码
*/
///错误码
@property(nonatomic,assign) uint32_t code;
/**
* 错误描述
*/
///错误描述
@property(nonatomic,strong) NSString * desc;
/**
* 事件延迟(单位ms)
*/
///事件延迟(单位 ms)
@property(nonatomic,assign) uint32_t delay;
@end
/// 获取某个群组资料
@interface TIMGroupInfoOption : NSObject
/**
* 需要获取的群组信息标志(TIMGetGroupBaseInfoFlag),默认为0xffffff
*/
///需要获取的群组信息标志(TIMGetGroupBaseInfoFlag),默认为0xffffff
@property(nonatomic,assign) uint64_t groupFlags;
/**
* 需要获取群组资料的自定义信息(NSString*)列表
*/
///需要获取群组资料的自定义信息(NSString*)列表
@property(nonatomic,strong) NSArray * groupCustom;
@end
/// 需要某个群成员资料
@interface TIMGroupMemberInfoOption : NSObject
/**
* 需要获取的群成员标志(TIMGetGroupMemInfoFlag),默认为0xffffff
*/
///需要获取的群成员标志(TIMGetGroupMemInfoFlag),默认为0xffffff
@property(nonatomic,assign) uint64_t memberFlags;
/**
* 需要获取群成员资料的自定义信息(NSString*)列表
*/
///需要获取群成员资料的自定义信息(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*类型
*/
///自定义字段集合,key 是 NSString*类型,value 是 NSData*类型
@property(nonatomic,strong) NSDictionary* customInfo;
@end
///资料与关系链
@interface TIMFriendProfileOption : NSObject
/**
* 需要获取的好友信息标志(TIMProfileFlag),默认为0xffffff
*/
@property(nonatomic,assign) uint64_t friendFlags;
/**
* 需要获取的好友自定义信息(NSString*)列表
*/
@property(nonatomic,strong) NSArray * friendCustom;
/**
* 需要获取的用户自定义信息(NSString*)列表
*/
@property(nonatomic,strong) NSArray * userCustom;
///关系链最大缓存时间(默认缓存一天;获取资料和关系链超过缓存时间,将自动向服务器发起请求)
@property NSInteger expiredSeconds;
@end
/**
* 好友资料
*/
///用户资料
@interface TIMUserProfile : TIMCodingModel
/**
* 用户identifier
* 用户 identifier
*/
@property(nonatomic,strong) NSString* identifier;
... ... @@ -1221,11 +1036,6 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
@property(nonatomic,strong) NSString* nickname;
/**
* 用户备注(最大96字节,获取自己资料时,该字段为空)
*/
@property(nonatomic,strong) NSString* remark;
/**
* 好友验证方式
*/
@property(nonatomic,assign) TIMFriendAllowType allowType;
... ... @@ -1241,22 +1051,22 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
@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;
... ... @@ -1271,16 +1081,61 @@ typedef void (^TIMGetProfileSucc)(TIMUserProfile * profile);
@property(nonatomic,assign) uint32_t role;
/**
* 好友分组名称 NSString* 列表
* 自定义字段集合,key是NSString类型,value是NSData类型或者NSNumber类型
* key值按照后台配置的字符串传入,不包括 TIMProfileTypeKey_Custom_Prefix 前缀
*/
@property(nonatomic,strong) NSDictionary* customInfo;
@end
typedef void(^ProfileCallBack) (TIMUserProfile * proflie);
/**
* 好友
*/
@property(nonatomic,strong) NSArray* friendGroups;
@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值按照后台配置的字符串传入)
* key值按照后台配置的字符串传入,不包括 TIMFriendTypeKey_Custom_Prefix 前缀
*/
@property(nonatomic,strong) NSDictionary* customInfo;
/**
* 好友资料
*/
@property(nonatomic,strong) TIMUserProfile *profile;
@end
#endif
... ...
... ... @@ -9,93 +9,100 @@
#ifndef TIMConversation_h
#define TIMConversation_h
#import "ImSDK.h"
#import "TIMConversation.h"
#import "TIMMessage+MsgExt.h"
@interface TIMConversation (MsgExt)
/**
* 保存消息到消息列表,这里只保存在本地
* 保存会话消息
*
* 保存消息到消息列表,这里只保存在本地。
*
* @param msg 消息体
* @param sender 发送方
* @param isReaded 是否已读,如果发送方是自己,默认已读
*
* @return 0 成功
* @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 上次最后一条消息
* @param last 上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0 本次操作成功
* @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 上次最后一条消息
* @param last 上次最后一条消息,如果 last 为 nil,从最新的消息开始读取
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0 本次操作成功
* @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 本次操作成功
* @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 本次操作成功
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)findMessages:(NSArray*)locators succ:(TIMGetMsgSucc)succ fail:(TIMFail)fail;
/**
* 撤回消息(仅C2C和GROUP会话有效、onlineMessage无效、AVChatRoom和BChatRoom无效)
* 撤回消息
*
* 1. 仅 C2C 和 GROUP 会话有效、onlineMessage 无效、AVChatRoom 和 BChatRoom 无效。
* 2. 可以在 TIMUserConfig 设置的 TIMMessageRevokeListener 监听 onRevokeMessage 消息撤回回调。
* 3. 遍历本地消息列表,如果消息的 respondsToLocator 函数返回 YES,则是对应的消息,您可以在 UI 上执行删除操作,具体可以参考 TUIMessageController.h 里面的 onRevokeMessage 回调的实现。
*
* @param msg 被撤回的消息
* @param succ 成功时回调
* @param fail 失败时回调
*
* @return 0 本次操作成功
* @return 0:本次操作成功;1:本次操作失败
*/
- (int)revokeMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 同步本会话的消息撤回通知(仅GROUP会话有效)
*
* @param succ 成功时回调,同步的通知会通过TIMMessageRevokeListener抛出
* @param fail 失败时回调
*
* @return 0 本次操作成功
*/
- (int)syncRevokeNotify:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 删除本地会话消息
*
* 可以在保留会话同时删除本地的会话消息。
*
* @param succ 成功时回调
* @param fail 失败时回调
*
... ... @@ -106,7 +113,11 @@
/**
* 设置已读消息
*
* @param readed 会话内最近一条已读的消息,nil表示上报最新消息
* 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 失败时回调
... ... @@ -116,7 +127,10 @@
- (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 返回未读计数
*/
... ... @@ -134,32 +148,28 @@
*
* @param msgs 消息(TIMMessage*)列表
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)importMessages:(NSArray*)msgs;
/**
* 设置会话草稿
*
* @param draft 草稿内容
* UI 展示最近联系人列表时,时常会展示用户的草稿内容,ImSDK 提供了设置和获取草稿的接口,用户可以通过此接口设置会话的草稿信息。草稿信息会存本地数据库,重新登录后依然可以获取。
*
* @param draft 草稿内容,详情请参考 TIMMessage+MsgExt.h 里面的 TIMMessageDraft 定义
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)setDraft:(TIMMessageDraft*)draft;
/**
* 获取会话草稿
*
* @return 草稿内容,没有草稿返回nil
* @return 草稿内容,没有草稿返回 nil
*/
- (TIMMessageDraft*)getDraft;
/**
* 禁用本会话的存储,只对当前初始化有效,重启后需要重新设置
* 需要 initSdk 之后调用
*/
- (void)disableStorage;
@end
#endif /* TIMConversation_h */
... ...
... ... @@ -22,34 +22,45 @@
/**
* 发送消息
*
* TIMMessage 由多个 TIMElem 组成,每个 TIMElem 可以是文本和图片,也就是说每一条消息可包含多个文本和多张图片。详情请参考官网文档 [消息收发](https://cloud.tencent.com/document/product/269/9150)
*
* @param msg 消息体
* @param succ 发送成功时回调
* @param fail 发送失败时回调
*
* @return 0 本次操作成功
* @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 成功
* @return 0:操作成功;1:操作失败
*/
- (int)sendOnlineMessage:(TIMMessage*)msg succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取会话人,单聊为对方账号,群聊为群组Id
* 获取会话人
*
* C2C:对方账号;Group:群组Id。
*
* 对同一个 C2C 会话或则群聊会话,getReceiver 获取的会话人都是固定的,C2C 获取的是对方账号,Group 获取的是群组 Id。
*
* @return 会话人
*/
- (NSString*)getReceiver;
/**
* 获取群名称(只有群会话有效)
* 获取群名称
*
* 获取群名称,只有群会话有效。
*
* @return 群名称
*/
... ... @@ -63,9 +74,9 @@
- (TIMConversationType)getType;
/**
* 获取该会话所属用户的id
* 获取自己的 id
*
* @return 用户id
* @return 用户 id
*/
- (NSString*)getSelfIdentifier;
... ...
//
// 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 - 枚举类型
/**
* 好友操作状态
*
* 详细错误码参见 https://cloud.tencent.com/document/product/269/1671#.E5.85.B3.E7.B3.BB.E9.93.BE.E9.94.99.E8.AF.AF.E7.A0.81
*/
typedef NS_ENUM(NSInteger, TIMFriendStatus) {
/**
* 操作成功
*/
TIM_FRIEND_STATUS_SUCC = 0,
/**
* 请求参数错误,请根据错误描述检查请求是否正确
*/
TIM_FRIEND_PARAM_INVALID = 30001,
/**
* 请求参数错误,SdkAppid 不匹配。
*/
TIM_FRIEND_SDK_APPID_INVALID = 30002,
/**
* 请求的用户帐号不存在
*/
TIM_FRIEND_ID_INVALID = 30003,
/**
* 请求需要 App 管理员权限
*/
TIM_FRIEND_NEED_ADMIN_PERMISSON = 30004,
/**
* 关系链字段中包含敏感词
*/
TIM_FRIEND_DIRTY_WORD = 30005,
/**
* 服务器内部错误,请重试
*/
TIM_FRIEND_SERVER_ERROR = 30006,
/**
* 网络超时,请稍后重试
*/
TIM_FRIEND_TIMEOUT = 30007,
/**
* 并发写导致写冲突,建议使用批量方式
*/
TIM_FRIEND_WRITE_ERROR = 30008,
/**
* 后台禁止该用户发起加好友请求
*/
TIM_ADD_FRIEND_FORBIDEN = 30009,
/**
* 自己的好友数已达系统上限
*/
TIM_ADD_FRIEND_STATUS_SELF_FRIEND_FULL = 30010,
/**
* 分组已达系统上限
*/
TIM_UPDATE_FRIEND_GROUP_STATUS_MAX_GROUPS_EXCEED = 30011,
/**
* 未决数已达系统上限。
*/
TIM_PENDENCY_STATUS_FULL = 30012,
/**
* 黑名单数已达系统上限
*/
TIM_ADD_BLACKLIST_STATUS_FULL = 30013,
/**
* 对方的好友数已达系统上限
*/
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_PENDING = 30539,
/**
* 添加好友请求被安全策略打击,请勿频繁发起添加好友请求
*/
TIM_ADD_FRIEND_STATUS_SENSITIVE = 30540,
/**
* 对方没有申请过好友
*/
TIM_RESPONSE_FRIEND_STATUS_NO_REQ = 30614,
/**
* 删除好友请求被安全策略打击,请勿频繁发起删除好友请求
*/
TIM_DELETE_FRIEND_STATUS_SENSITIVE = 31707,
};
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_BOTHWAY = 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 NSString* identifier;
/**
* 返回码
*/
@property NSInteger result_code;
/**
* 返回信息
*/
@property NSString *result_info;
/**
* 检查结果
*/
@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;
/**
* 在缓存中查询自己的资料
*
* @return 返回缓存的资料,未找到返回nil
*/
- (TIMUserProfile *)querySelfProfile;
/**
* 获取指定用户资料
*
* @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;
/**
* 在缓存中查询用户的资料
*
* @praram identifier 用户id,非好友的用户也可以
*
* @return 返回缓存的资料,未找到返回nil
*/
- (TIMUserProfile *)queryUserProfile:(NSString *)identifier;
/**
* 获取好友列表
*
* @param succ 成功回调,返回好友(TIMFriend)列表
* @param fail 失败回调
*
* @return 0 发送请求成功
*/
-(int)getFriendList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;
/**
* 在缓存中查询用户的关系链数据
*
* @praram identifier 用户id
*
* @return 返回缓存的关系链数据,未找到返回nil
* @note 缓存数据来自于上一次调用getFriendList,请确保已调用了获取好友列表方法
*/
- (TIMFriend *)queryFriend:(NSString *)identifier;
/**
* 获取缓存中的关系链列表
*
* @return 返回缓存的关系链数据
* @note 缓存数据来自于上一次调用getFriendList,请确保已调用了获取好友列表方法
*/
- (NSArray<TIMFriend *> *)queryFriendList;
/**
* 检查指定用户的好友关系
*
* @param checkInfo 好友检查信息
* @param succ 成功回调,返回检查结果
* @param fail 失败回调
*
* @return 0 发送成功
*/
- (int)checkFriends:(TIMFriendCheckInfo *)checkInfo succ:(TIMCheckFriendResultArraySucc)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 */
... ...
... ... @@ -9,7 +9,7 @@
#ifndef TIMGroupManager_Ext_h
#define TIMGroupManager_Ext_h
#import "ImSDK.h"
#import "TIMGroupManager.h"
#import "TIMComm+Group.h"
@interface TIMGroupManager (Ext)
... ... @@ -17,158 +17,194 @@
/**
* 创建私有群
*
* 创建者默认加入群组,无需显式指定,群组类型形态请参考官网文档 [群组形态介绍](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 成功回调
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0 成功
* @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 成功回调
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0 成功
* @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 成功回调
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0 成功
* @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 成功回调
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)createAVChatRoomGroup:(NSString*)groupName succ:(TIMCreateGroupSucc)succ fail:(TIMFail)fail;
/**
* 创建群组
* 创建自定义群组
*
* @param groupInfo 群组信息
* @param succ 成功回调
* 在创建群组时,除了设置默认的成员以及群名外,还可以设置如群公告、群简介等字段。
*
* @param groupInfo 群组信息,详情请参考 TIMComm+Group.h 里面的 TIMCreateGroupInfo 定义
* @param succ 成功回调 groupId
* @param fail 失败回调
*
* @return 0 成功
* @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 succ 成功回调 (TIMGroupMemberResult 列表)
* @param fail 失败回调
*
* @return 0 成功
* @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 succ 成功回调 (TIMGroupMemberResult 列表)
* @param fail 失败回调
*
* @return 0 成功
* @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 成功
*/
- (int)getGroupPublicInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取群列表
*
* @param succ 成功回调,NSArray列表为 TIMGroupInfo,结构体只包含 group\groupName\groupType\faceUrl\allShutup\selfInfo 信息
* 1. 可以获取自己所加入的群列表。
* 2. 只能获得加入的部分直播大群的列表。
*
* @param succ 成功回调,NSArray 列表为 TIMGroupInfo,结构体只包含 group\groupName\groupType\faceUrl\allShutup\selfInfo 信息
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)getGroupList:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取信息
* 获取服务器存储的群组信息
*
* @param succ 成功回调,不包含 selfInfo信息
* 1. 无论是公开群还是私有群,群成员均可以拉到群组信息。
* 2. 如果是公开群,非群组成员可以拉到 group\groupName\owner\groupType\createTime\maxMemberNum\memberNum\introduction\faceURL\addOpt\onlineMemberNum\customInfo 这些字段信息。如果是私有群,非群组成员拉取不到群组信息。
* 3. 群成员和非群成员这个接口都拉取不到 selfInfo 信息。
* 4. 默认拉取基本资料,如果想要拉取自定义字段,首先要通过 [IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 群维度自定义字段 配置相关的 key 和权限,然后在 initSDK 的时候把生成的 key 设置在 IMGroupInfoOption 里面的 groupCustom 字段。需要注意的是,只有对自定义字段的 value 做了赋值或则修改,才能拉取到自定义字段。
*
* @param succ 成功回调,不包含 selfInfo 信息
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)getGroupInfo:(NSArray*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;
/**
* 获取本地存储的群组信息
*
* 1. 无论是公开群还是私有群,群成员均可以拉到群组信息。
* 2. 如果是公开群,非群组成员可以拉到 group\groupName\owner\groupType\createTime\maxMemberNum\memberNum\introduction\faceURL\addOpt\onlineMemberNum\customInfo 这些字段信息。如果是私有群,非群组成员拉取不到群组信息。
* 3. 群成员和非群成员这个接口都拉取不到 selfInfo 信息。
*
* @return 群组信息
*/
- (TIMGroupInfo *)queryGroupInfo:(NSString *)group;
/**
* 获取本人在群组内的成员信息
*
* 默认拉取基本资料,如果想要拉取自定义字段,请参考 getGroupInfo
*
* @param group 群组Id
* @param succ 成功回调,返回信息
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)getGroupSelfInfo:(NSString*)group succ:(TIMGroupSelfSucc)succ fail:(TIMFail)fail;
/**
* 获取接受消息选项
*
* @param group 群组Id
* @param succ 成功回调
* @param fail 失败回调
* @param group 群组Id
* @param succ 成功回调, TIMGroupReceiveMessageOpt 0:接收消息;1:不接收消息,服务器不进行转发;2:接受消息,不进行 iOS APNs 推送
* @param fail 失败回调
*
* @return 0 成功
* @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 succ 成功回调 (TIMGroupMemberInfo 列表)
* @param fail 失败回调
*
* @return 0 成功
* @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 succ 成功回调 (TIMGroupMemberInfo 列表)
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)getGroupMembersInfo:(NSString*)group members:(NSArray*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;
... ... @@ -179,123 +215,151 @@
* @param filter 群成员角色过滤方式
* @param flags 拉取资料标志
* @param custom 要获取的自定义key(NSString*)列表
* @param nextSeq 分页拉取标志,第一次拉取填0,回调成功如果不为零,需要分页,传入再次拉取,直至为0
* @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 成功
* @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 成功
* @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 成功
* @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 成功
* @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 成功
* @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 customInfo 自定义字段集合,key 是 NSString* 类型,value 是 NSData* 类型
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)modifyGroupCustomInfo:(NSString*)group customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
- (int)modifyGroupCustomInfo:(NSString*)group customInfo:(NSDictionary<NSString *,NSData *>*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 转让群给新群主
*
* 1. 只有群主才有权限进行群转让操作。
* 2. 直播大群不能进行群转让操作。
*
* @param group 群组Id
* @param identifier 新的群主Id
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @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 成功
* @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 成功
* @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
... ... @@ -303,12 +367,14 @@
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @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
... ... @@ -316,22 +382,24 @@
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetNameCard:(NSString*)group user:(NSString*)identifier nameCard:(NSString*)nameCard succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群成员自定义字段集合
*
* @param group 群组Id
* @param identifier 被操作用户identifier
* @param customInfo 自定义字段集合,key是NSString*类型,value是NSData*类型
* 通过 [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 成功
* @return 0:成功;1:失败
*/
- (int)modifyGroupMemberInfoSetCustomInfo:(NSString*)group user:(NSString*)identifier customInfo:(NSDictionary*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
- (int)modifyGroupMemberInfoSetCustomInfo:(NSString*)group user:(NSString*)identifier customInfo:(NSDictionary<NSString*,NSData*> *)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 修改群组是否可被搜索属性
... ... @@ -341,7 +409,7 @@
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)modifyGroupSearchable:(NSString*)group searchable:(BOOL)searchable succ:(TIMSucc)succ fail:(TIMFail)fail;
... ... @@ -353,55 +421,52 @@
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @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 成功
* @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 成功
* @return 0:成功;1:失败
*/
- (int)getPendencyFromServer:(TIMGroupPendencyOption*)option succ:(TIMGetGroupPendencyListSucc)succ fail:(TIMFail)fail;
/**
* 群未决已读上报
*
* 对于未决信息,SDK 可对其和之前的所有未决信息上报已读。上报已读后,仍然可以拉取到这些未决信息,但可通过对已读时戳的判断判定未决信息是否已读。
*
* @param timestamp 上报已读时间戳
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)pendencyReport:(uint64_t)timestamp succ:(TIMSucc)succ fail:(TIMFail)fail;
#pragma mark - 开启本地缓存后有效
/**
* 获取用户所在群组信息
*
* @param groups 群组id(NSString*)列表,nil时返回群组列表
*
* @return 群组信息(TIMGroupInfo*)列表,assistant未同步时返回nil
*/
- (NSArray*)getGroupInfo:(NSArray*)groups;
@end
#endif /* TIMGroupManager_Ext_h */
... ...
... ... @@ -24,47 +24,63 @@
/**
* 创建群组
*
* 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 groupId 自定义群组 ID,为空时系统自动分配
* @param groupName 群组名称
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
* @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 成功
* @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 成功
* @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 成功
* @return 0:成功;1:失败
*/
- (int)quitGroup:(NSString*)group succ:(TIMSucc)succ fail:(TIMFail)fail;
... ...
... ... @@ -9,7 +9,7 @@
#ifndef TIMManager_MsgExt_h
#define TIMManager_MsgExt_h
#import "ImSDK.h"
#import "TIMManager.h"
#import "TIMComm+MsgExt.h"
@class TIMMessage;
... ... @@ -38,20 +38,22 @@
/**
* 删除会话
*
* @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
* @param receiver 用户identifier 或者 群组Id
* @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
* @param receiver 用户 identifier 或者群组 Id
*
* @return TRUE:删除成功 FALSE:删除失败
* @return TRUE:删除成功FALSE:删除失败
*/
- (BOOL)deleteConversation:(TIMConversationType)type receiver:(NSString*)receiver;
/**
* 删除会话和消息
*
* @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
* @param receiver 用户identifier 或者 群组Id
* 这里只是删除本地消息,通过 getMessage 会拉取到漫游消息,所以存在删除消息成功,但是拉取到消息的情况,取决于是否重新从漫游拉回到本地。如果不需要拉取漫游,可以通过 getLocalMessage 获取本地消息,或者只通过 getMessage 拉取指定条数(如未读条数数量)的消息。
*
* @return TRUE:删除成功 FALSE:删除失败
* @param type 会话类型,TIM_C2C:表示单聊;TIM_GROUP:表示群聊
* @param receiver 用户identifier 或者 群组 Id
*
* @return TRUE:删除成功;FALSE:删除失败
*/
- (BOOL)deleteConversationAndMessages:(TIMConversationType)type receiver:(NSString*)receiver;
... ... @@ -63,13 +65,15 @@
- (int)conversationCount;
/**
* 初始化存储,仅查看历史消息时使用,如果要收发消息等操作,如login成功,不需要调用此函数
* 初始化存储
*
* 仅查看历史消息时使用,如果要收发消息等操作,如login成功,不需要调用此函数
*
* @param param 登陆参数(userSig 不用填写)
* @param param 登陆参数(identifier 必须填写,userSig 不用填写)
* @param succ 成功回调,收到回调时,可以获取会话列表和消息
* @param fail 失败回调
*
* @return 0 请求成功
* @return 0:请求成功;1:请求失败,identifier 为 nil 或则用户已登录
*/
- (int)initStorage:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
... ...
... ... @@ -13,7 +13,7 @@
#import "TIMCallback.h"
@class TIMGroupManager;
//@class TIMFriendshipManager;
@class TIMFriendshipManager;
/////////////////////////////////////////////////////////
/// Tencent 开放 SDK API
... ... @@ -23,256 +23,337 @@
* 通讯管理
*/
@interface TIMManager : NSObject
/////////////////////////////////////////////////////////////////////////////////
//
// (一)初始化相关接口函数
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 初始化相关接口
/// @{
/**
* 获取管理器实例
* 1.1 获取管理器实例 TIMManager
*
* @return 管理器实例
*/
+ (TIMManager*)sharedInstance;
/**
* 初始化SDK
* 1.2 初始化 SDK,设置全局配置信息
*
* @param config 配置信息,全局有效
* 初始化 SDK 需要设置 TIMSdkConfig 信息,TIMSdkConfig 主要包含 sdkAppId 设置、Log 相关逻辑设置、数据库存储路径设置、网络监听设置等,其中 sdkAppId 的获取请参考官网文档 [跑通Demo(iOS与Mac)](https://cloud.tencent.com/document/product/269/32674)。
*
* @return 0 成功
* @param config 配置信息,全局有效,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
*
* @return 0:成功;1:失败,config 为 nil
*/
- (int)initSdk:(TIMSdkConfig*)config;
/**
* 获取全局配置
* 1.3 获取全局配置信息
*
* 获取初始化 SDK 时候设置的 TIMSdkConfig,方便客户在上层做相关业务逻辑。
*
* @return 全局配置
* @return 全局配置,详情请参考 TIMComm.h 中的 TIMSdkConfig 定义
*/
- (TIMSdkConfig*)getGlobalConfig;
/**
* 初始化当前manager,在initSdk:后调用,login:前调用
* 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有效
* @param config 配置信息,对当前 TIMManager 有效,详情请参考 TIMComm.h 中的 TIMUserConfig 定义
*
* @return 0 成功
* @return 0:成功;1:失败,config 为 nil
*/
- (int)setUserConfig:(TIMUserConfig*)config;
/**
* 获取当前manager绑定用户的配置
* 1.5 获取用户配置信息
*
* @return 当前manager绑定用户的配置
* 获取设置的用户配置信息 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 回调
* @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
*
* @return 成功
* @return 0:成功;1:失败,listener 为 nil
*/
- (int)addMessageListener:(id<TIMMessageListener>)listener;
/**
* 移除消息回调
* 1.7 移除消息监听
*
* @param listener 回调
* @param listener 回调,详情请参考 TIMCallback.h 中的 TIMMessageListener 定义
*
* @return 成功
* @return 0:成功;1:失败,listener 为 nil
*/
- (int)removeMessageListener:(id<TIMMessageListener>)listener;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)登录相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 登录相关接口
/// @{
/**
* 登陆
* 2.1 登录
*
* @param param 登陆参数
* @param succ 成功回调
* @param fail 失败回调
* 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)。
*
* @return 0 请求成功
* @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 自动登录
*
* @return 如果登陆返回用户的identifier,如果未登录返回nil
*/
- (NSString*)getLoginUser;
/**
* 获取当前登录状态
* 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 登录状态
* @return 0:成功;1:失败,请检查 param 参数是否正常
*/
- (TIMLoginStatus)getLoginStatus;
- (int)autoLogin:(TIMLoginParam*)param succ:(TIMLoginSucc)succ fail:(TIMFail)fail;
/**
* 登出
* 2.3 登出
*
* 退出登录,如果切换账号,需要 logout 回调成功或者失败后才能再次 login,否则 login 可能会失败。
*
* @param succ 成功回调,登出成功
* @param fail 失败回调,返回错误吗和错误信息
*
* @return 0 发送登出包成功,等待回调
* @return 0:发送登出包成功,等待回调;1:失败
*/
- (int)logout:(TIMLoginSucc)succ fail:(TIMFail)fail;
#pragma mark - 消息会话操作
/**
* 获取会话
* 2.4 获取当前登陆的用户
*
* @param type 会话类型,TIM_C2C 表示单聊 TIM_GROUP 表示群聊
* TIM_SYSTEM 表示系统会话
* @param receiver C2C 为对方用户 identifier,GROUP 为群组Id,SYSTEM为@""
*
* @return 会话对象
* @return 如果登陆返回用户的 identifier,如果未登录返回 nil
*/
- (TIMConversation*)getConversation:(TIMConversationType)type receiver:(NSString*)receiver;
#pragma mark - APNs推送
- (NSString*)getLoginUser;
/**
* 设置Token,需要登录后调用
*
* @param token token信息
* @param succ 成功回调
* @param fail 失败回调
* 2.5 获取当前登录状态
*
* @return 0 成功
* @return 登录状态,详情请参考 TIMComm.h 中的 TIMLoginStatus 定义
*/
- (int)setToken:(TIMTokenParam*)token succ:(TIMSucc)succ fail:(TIMFail)fail;
- (TIMLoginStatus)getLoginStatus;
/**
* 设置APNS配置
*
* @param config APNS配置
* @param succ 成功回调
* @param fail 失败回调
*
* @return 0 成功
*/
- (int)setAPNS:(TIMAPNSConfig*)config succ:(TIMSucc)succ fail:(TIMFail)fail;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)获取会话管理器
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 获取会话管理器
/// @{
/**
* 获取APNS配置
* 获取会话管理器
*
* @param succ 成功回调,返回配置信息
* @param fail 失败回调
* TIMConversation 负责会话相关操作,包含发送消息、获取会话消息缓存、获取未读计数等。
*
* @return 0 成功
* @param type 会话类型,TIM_C2C:单聊;TIM_GROUP:群聊;TIM_SYSTEM:系统会话
* @param receiver 会话接收者,C2C:为对方用户;identifier;GROUP:群组 Id;SYSTEM:@""
*
* @return 会话对象,详情请参考 TIMConversation.h 里面的 TIMConversation 定义
*/
- (int)getAPNSConfig:(TIMAPNSConfigSucc)succ fail:(TIMFail)fail;
- (TIMConversation*)getConversation:(TIMConversationType)type receiver:(NSString*)receiver;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (四)获取群管理器
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 获取群管理器
/// @{
/**
* app 切后台时调用
* 获取群管理器
*
* @param param 上报参数
* @param succ 成功时回调
* @param fail 失败时回调
* TIMGroupManager 负责创建群、增删成员、以及修改群资料等
*
* @return 0 表示成功
* @return 群管理器,详情请参考 TIMGroupManager.h 中的 TIMGroupManager 定义
*/
- (int)doBackground:(TIMBackgroundParam*)param succ:(TIMSucc)succ fail:(TIMFail)fail;
- (TIMGroupManager*)groupManager;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (五)获取好友管理器
//
/////////////////////////////////////////////////////////////////////////////////
///@name 获取好友管理器
/// @{
/**
* 切前台
* 获取好友管理器
*
* @param succ 成功时回调
* @param fail 失败时回调
* TIMFriendshipManager 负责加好友,删除好友,查询好友列表等
*
* @return 0 表示成功
* @return 好友管理器,详情请参考 TIMFriendshipManager.h 中的 TIMFriendshipManager 定义
*/
- (int)doForeground:(TIMSucc)succ fail:(TIMFail)fail;
#pragma mark - 调试使用
- (TIMFriendshipManager*)friendshipManager;
/**
* 获取网络状态
*/
- (TIMNetworkStatus)networkStatus;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (六)设置 APNs 推送
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 设置 APNs 推送
/// @{
/**
* 设置环境(在InitSdk之前调用,注意:除非是IM工作人员指定要求设置,否则不需要调用此接口)
* 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 定义
*
* @param env 0 正式环境(默认)
* 1 测试环境
* @return 0:成功;1:失败,token 参数异常
*/
- (void)setEnv:(int)env;
- (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 env 0 正式环境(默认)
* 1 测试环境
* 2 beta 环境
* @return 0:成功;1:失败,config 参数异常
*/
- (int)getEnv;
- (int)setAPNS:(TIMAPNSConfig*)config succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取版本号
* 6.3. 获取推送声音设置
*
* @param succ 成功回调,返回配置信息,详情请参考 TIMComm.h 中的 TIMAPNSConfigSucc 定义
* @param fail 失败回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 返回版本号,字符串表示,例如v1.1.1
* @return 0:成功;1:失败
*/
- (NSString*)GetVersion;
- (int)getAPNSConfig:(TIMAPNSConfigSucc)succ fail:(TIMFail)fail;
/**
* 获取联网SDK的版本号
* 6.4. APP 进后台
*
* APP 进后台的时候需要主动调用 doBackground ,这个时候后台知道 APP 的状态,之后的消息会下发推送通知。
*
* @return 返回版本号
* @param param 上报参数,详情请参考 TIMComm.h 中的 TIMBackgroundParam 定义
* @param succ 成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败
*/
- (NSString*)GetQALVersion;
- (int)doBackground:(TIMBackgroundParam*)param succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 打印日志,通过ImSDK提供的日志功能打印日志
* 6.5. APP 进后台
*
* @param level 日志级别
* @param tag 模块tag
* @param msg 要输出的日志内容
* APP 进前台的时候需要主动调用 doForeground。
*
* @param succ 成功时回调,详情请参考 TIMComm.h 中的 TIMSucc 定义
* @param fail 失败时回调,详情请参考 TIMComm.h 中的 TIMFail 定义
*
* @return 0:成功;1:失败
*/
- (void)log:(TIMLogLevel)level tag:(NSString*)tag msg:(NSString*)msg;
- (int)doForeground:(TIMSucc)succ fail:(TIMFail)fail;
#pragma mark - 登录多账号
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (七)多账号登录接口
//
/////////////////////////////////////////////////////////////////////////////////
///@name 多账号登录接口
/// @{
/**
* 创建新的管理器类型(多用户登陆时使用,否则可直接调用sharedInstance)
* 创建新的管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @return 管理器实例
*/
+ (TIMManager*)newManager;
/**
* 获取管理器类型(多用户登陆时使用,否则可直接调用sharedInstance)
* 获取管理器类型(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @param identifier 用户identifier
* @param identifier 用户 identifier
*
* @return 对应管理器类型,如果没有创建过,返回nil
* @return 对应管理器类型,如果没有创建过,返回 nil
*/
+ (TIMManager*)getManager:(NSString*)identifier;
/**
* 销毁管理器(多用户登陆时使用,否则可直接调用sharedInstance)
* 销毁管理器(多用户登陆时使用,否则可直接调用 sharedInstance)
*
* @param manager 需要销毁的管理器
*/
+ (void)deleteManager:(TIMManager*)manager;
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (八)调试相关接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 调试相关接口
/// @{
/**
* 获取好友管理器
* 获取版本号
*
* @return 好友管理器
* @return 返回版本号,字符串表示,例如 v1.1.1
*/
//- (TIMFriendshipManager*)friendshipManager;
- (NSString*)GetVersion;
/**
* 获取群管理器
* 打印日志,通过 ImSDK 提供的日志功能打印日志
*
* @return 群管理器
* @param level 日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
* @param tag 模块 tag
* @param msg 要输出的日志内容
*/
- (TIMGroupManager*)groupManager;
#pragma mark - 内部使用的方法
- (void)log:(TIMLogLevel)level tag:(NSString*)tag msg:(NSString*)msg;
/**
* 获取日志文件路径
... ... @@ -280,15 +361,25 @@
- (NSString*)getLogPath;
/**
* 是否开启sdk日志打印
* 是否开启 sdk 日志打印
*
* @return YES:允许 log 打印;NO:不允许 log 打印
*/
- (BOOL)getIsLogPrintEnabled;
/**
* 获取日志级别
*
* @return 返回日志级别
* @return 返回日志级别,详情请参考 TIMComm.h 中的 TIMLogLevel 定义
*/
-(TIMLogLevel) getLogLevel;
/**
* 重置ImSDK配置信息,内部自动化测试使用
*/
- (void)unInit;
///@}
@end
#endif
... ...
... ... @@ -9,14 +9,18 @@
#ifndef TIMMessage_h
#define TIMMessage_h
#import "ImSDK.h"
#import "TIMMessage.h"
#import "TIMComm+MsgExt.h"
#pragma mark - Elem类型
/**
* 关系链变更消息
*/
/////////////////////////////////////////////////////////////////////////////////
//
// (一)关系链变更消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 关系链变更消息
/// @{
@interface TIMSNSSystemElem : TIMElem
/**
... ... @@ -30,25 +34,31 @@
@property(nonatomic,strong) NSArray * users;
/**
* 未决已读上报时间戳 type=TIM_SNS_SYSTEM_PENDENCY_REPORT 有效
* 未决已读上报时间戳 type = TIM_SNS_SYSTEM_PENDENCY_REPORT 有效
*/
@property(nonatomic,assign) uint64_t pendencyReportTimestamp;
/**
* 推荐已读上报时间戳 type=TIM_SNS_SYSTEM_RECOMMEND_REPORT 有效
* 推荐已读上报时间戳 type = TIM_SNS_SYSTEM_RECOMMEND_REPORT 有效
*/
@property(nonatomic,assign) uint64_t recommendReportTimestamp;
/**
* 已决已读上报时间戳 type=TIM_SNS_SYSTEM_DECIDE_REPORT 有效
* 已决已读上报时间戳 type = TIM_SNS_SYSTEM_DECIDE_REPORT 有效
*/
@property(nonatomic,assign) uint64_t decideReportTimestamp;
@end
/**
* 资料变更系统消息
*/
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)资料变更消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 资料变更消息
/// @{
@interface TIMProfileSystemElem : TIMElem
/**
... ... @@ -62,72 +72,78 @@
@property(nonatomic,strong) NSString * fromUser;
/**
* 资料变更的昵称(如果昵称没有变更,该值为nil
* 资料变更的昵称(暂未实现
*/
@property(nonatomic,strong) NSString * nickName;
@end
#pragma mark - 消息扩展
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (三)消息扩展接口
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 消息扩展接口
/// @{
@interface TIMMessage (MsgExt)
/**
* 是否已读
* 自己是否已读
*
* @return TRUE 已读 FALSE 未读
* @return TRUE:已读;FALSE:未读
*/
- (BOOL)isReaded;
/**
* 对方是否已读(仅C2C消息有效)
* 对方是否已读(仅 C2C 消息有效)
*
* @return TRUE 已读 FALSE 未读
* @return TRUE:已读;FALSE:未读
*/
- (BOOL)isPeerReaded;
/**
* 删除消息
*
* @return TRUE 成功
* 目前暂不支持 Server 消息删除,只能在本地删除。删除后使用 getMessage 拉取本地消息,不会返回被删除的消息。
*
* @return TRUE:成功;FALSE:失败
*/
- (BOOL)remove;
/**
* 消息有断层,OnNewMessage回调收到消息,如果有断层,需要重新GetMessage补全(有C2C漫游的情况下使用)
* 设置自定义整数,默认为 0
*
* @return TRUE 有断层
* FALSE 无断层
*/
- (BOOL)hasGap;
/**
* 设置自定义整数,默认为0
* 1.此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
* 2.可以根据这个字段设置语音消息是否已经播放,如 customInt 的值 0 表示未播放,1 表示播放,当用户单击播放后可设置 customInt 的值为 1。
*
* @param param 设置参数
*
* @return TRUE 设置成功
* @return TRUE:设置成功;FALSE:设置失败
*/
- (BOOL)setCustomInt:(int32_t)param;
/**
* 设置自定义数据,默认为""
*
* 此自定义字段仅存储于本地,不会同步到 Server,用户卸载应用或则更换终端后无法获取。
*
* @param data 设置参数
*
* @return TRUE 设置成功
* @return TRUE:设置成功;FALSE:设置失败
*/
- (BOOL)setCustomData:(NSData*)data;
/**
* 获取CustomInt
* 获取 CustomInt
*
* @return CustomInt
*/
- (int32_t)customInt;
/**
* 获取CustomData
* 获取 CustomData
*
* @return CustomData
*/
... ... @@ -136,12 +152,14 @@
/**
* 获取消息定位符
*
* @return locator
* 如果是自己创建的 TIMMessage,需要等到消息发送成功后才能获取到 TIMMessageLocator 里面的具体信息
*
* @return locator,详情请参考 TIMComm.h 里面的 TIMMessageLocator 定义
*/
- (TIMMessageLocator*)locator;
/**
* 是否为locator对应的消息
* 是否为 locator 对应的消息
*
* @param locator 消息定位符
*
... ... @@ -150,35 +168,47 @@
- (BOOL)respondsToLocator:(TIMMessageLocator*)locator;
/**
* 设置消息时间戳,导入到本地时有效
* 设置消息时间戳
*
* 需要先将消息到导入到本地,调用 convertToImportedMsg 方法
*
* @param time 时间戳
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)setTime:(time_t)time;
/**
* 设置消息发送方(需要先将消息到导入到本地,调用 convertToImportedMsg 方法)
* 设置消息发送方
*
* 需要先将消息到导入到本地,调用 convertToImportedMsg 方法
*
* @param sender 发送方Id
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)setSender:(NSString*)sender;
/**
* 将消息导入到本地
*
* @return 0 成功
* 只有调用这个接口,才能去修改消息的时间戳和发送方
*
* @return 0:成功;1:失败
*/
- (int)convertToImportedMsg;
@end
/// @}
#pragma mark - 消息草稿
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (四)草稿箱
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 草稿箱
/// @{
@interface TIMMessageDraft : NSObject
/**
... ... @@ -186,7 +216,7 @@
*
* @param userData 自定义数据
*
* @return 0 成功
* @return 0:成功;1:失败
*/
- (int)setUserData:(NSData*)userData;
... ... @@ -202,18 +232,17 @@
*
* @param elem elem结构
*
* @return 0 表示成功
* 1 禁止添加Elem(文件或语音多于两个Elem)
* 2 未知Elem
* @return 0:表示成功;1:禁止添加Elem(文件或语音多于两个Elem);2:未知Elem
*
*/
- (int)addElem:(TIMElem*)elem;
/**
* 获取对应索引的Elem
* 获取对应索引的 Elem
*
* @param index 对应索引
*
* @return 返回对应Elem
* @return 返回对应 Elem
*/
- (TIMElem*)getElem:(int)index;
... ... @@ -227,7 +256,7 @@
/**
* 草稿生成对应的消息
*
* @return 消息
* @return 消息,详情请参考 TIMMessage.h 里面的 TIMMessage 定义
*/
- (TIMMessage*)transformToMessage;
... ... @@ -238,6 +267,8 @@
*/
- (NSDate*)timestamp;
/// @}
@end
#endif /* TIMMessage_h */
... ...
... ... @@ -18,15 +18,29 @@
@class TIMUserProfile;
@class TIMGroupMemberInfo;
@class TIMConversation;
@class TIMSnapshot;
/////////////////////////////////////////////////////////////////////////////////
//
// (一)消息基类
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 消息基类
/**
* 消息Elem基类
* 消息 Elem 基类
*/
@interface TIMElem : NSObject
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (二)文本消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 文本消息
/**
* 文本消息Elem
* 文本消息 Elem
*/
@interface TIMTextElem : TIMElem
/**
... ... @@ -34,12 +48,20 @@
*/
@property(nonatomic,strong) NSString * text;
@end
/// @}
#pragma mark - 普通消息类型
/////////////////////////////////////////////////////////////////////////////////
//
// (三)图片消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 图片消息
/**
* 图片
*/
@interface TIMImage : NSObject
/**
* 图片ID,内部标识,可用于外部缓存key
* 图片 ID,内部标识,可用于外部缓存key
*/
@property(nonatomic,strong) NSString * uuid;
/**
... ... @@ -66,16 +88,28 @@
/**
* 获取图片
*
* 下载的数据需要由开发者缓存,IM SDK 每次调用 getImage 都会从服务端重新下载数据。建议通过图片的 uuid 作为 key 进行图片文件的存储。
*
* @param path 图片保存路径
* @param succ 成功回调,返回图片数据
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getImage:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取图片(有进度回调)
*
* 下载的数据需要由开发者缓存,IM SDK 每次调用 getImage 都会从服务端重新下载数据。建议通过图片的 uuid 作为 key 进行图片文件的存储。
*
* @param path 图片保存路径
* @param progress 图片下载进度
* @param succ 成功回调,返回图片数据
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/**
* 图片消息Elem
*/
... ... @@ -87,17 +121,17 @@
@property(nonatomic,strong) NSString * path;
/**
* 所有类型图片,只读
* 所有类型图片,只读,发送的时候不用关注,接收的时候这个字段会保存图片的所有规格,目前最多包含三种规格:原图、大图、缩略图,每种规格保存在一个 TIMImage 对象中
*/
@property(nonatomic,strong) NSArray * imageList;
/**
* 上传时任务Id,可用来查询上传进度
* 上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
*/
@property(nonatomic,assign) uint32_t taskId;
@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
/**
* 图片压缩等级,详见 TIM_IMAGE_COMPRESS_TYPE(仅对jpg格式有效)
* 图片压缩等级,详见 TIM_IMAGE_COMPRESS_TYPE(仅对 jpg 格式有效)
*/
@property(nonatomic,assign) TIM_IMAGE_COMPRESS_TYPE level;
... ... @@ -108,124 +142,224 @@
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (四)语音消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 语音消息
/**
* 文件消息Elem
* 语音消息Elem
*
* 1. 一条消息只能有一个语音 Elem,添加多条语音 Elem 时,AddElem 函数返回错误 1,添加不生效。
* 2. 语音和文件 Elem 不一定会按照添加时的顺序获取,建议逐个判断 Elem 类型展示,而且语音和文件 Elem 也不保证按照发送的 Elem 顺序排序。
*
*/
@interface TIMFileElem : TIMElem
@interface TIMSoundElem : TIMElem
/**
* 上传时任务Id,可用来查询上传进度
* 上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
*/
@property(nonatomic,assign) uint32_t taskId;
@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
/**
* 上传时,文件的路径(设置path时,优先上传文件)
* 上传时,语音文件的路径,接收时使用 getSound 获得数据
*/
@property(nonatomic,strong) NSString * path;
/**
* 文件内部ID
* 语音消息内部 ID
*/
@property(nonatomic,strong) NSString * uuid;
/**
* 文件大小
* 语音数据大小
*/
@property(nonatomic,assign) int fileSize;
@property(nonatomic,assign) int dataSize;
/**
* 文件显示名,发消息时设置
* 语音长度(秒),发送消息时设置
*/
@property(nonatomic,strong) NSString * filename;
@property(nonatomic,assign) int second;
/**
* 获取文件数据到指定路径的文件中
* 获取语音数据到指定路径的文件中
*
* @param path 文件保存路径
* @param succ 成功回调,返回数据
* getSound 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 语音保存路径
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getFile:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getFile:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getSound:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取语音数据到指定路径的文件中(有进度回调)
*
* getSound 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 语音保存路径
* @param progress 语音下载进度
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getSound:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (五)视频消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 视频消息
/**
* 语音消息Elem
* 视频
*/
@interface TIMSoundElem : TIMElem
@interface TIMVideo : NSObject
/**
* 上传时任务Id,可用来查询上传进度
* 视频消息内部 ID,不用设置
*/
@property(nonatomic,assign) uint32_t taskId;
@property(nonatomic,strong) NSString * uuid;
/**
* 上传时,语音文件的路径,接收时使用getSound获得数据
* 视频文件类型,发送消息时设置
*/
@property(nonatomic,strong) NSString * path;
@property(nonatomic,strong) NSString * type;
/**
* 语音消息内部ID
* 视频大小,不用设置
*/
@property(nonatomic,strong) NSString * uuid;
@property(nonatomic,assign) int size;
/**
* 语音数据大小
* 视频时长,发送消息时设置
*/
@property(nonatomic,assign) int dataSize;
@property(nonatomic,assign) int duration;
/**
* 语音长度(秒),发送消息时设置
* 获取视频
*
* getVideo 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 视频保存路径
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
@property(nonatomic,assign) int second;
- (void)getVideo:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取语音数据到指定路径的文件中
* 获取视频(有进度回调)
*
* @param path 语音保存路径
* getVideo 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 视频保存路径
* @param progress 视频下载进度
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getSound:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getSound:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getVideo:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/**
* 地理位置Elem
* 视频消息 Elem
*/
@interface TIMLocationElem : TIMElem
@interface TIMVideoElem : TIMElem
/**
* 地理位置描述信息,发送消息时设置
* 上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度)
*/
@property(nonatomic,strong) NSString * desc;
@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
/**
* 纬度,发送消息时设置
* 视频文件路径,发送消息时设置
*/
@property(nonatomic,assign) double latitude;
@property(nonatomic,strong) NSString * videoPath;
/**
* 经度,发送消息时设置
* 视频信息,发送消息时设置
*/
@property(nonatomic,assign) double longitude;
@end
@property(nonatomic,strong) TIMVideo * video;
/**
* 截图文件路径,发送消息时设置
*/
@property(nonatomic,strong) NSString * snapshotPath;
/**
* 自定义消息类型
* 视频截图,发送消息时设置
*/
@interface TIMCustomElem : TIMElem
@property(nonatomic,strong) TIMSnapshot * snapshot;
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (六)文件消息
//
/////////////////////////////////////////////////////////////////////////////////
/// @name 文件消息
/**
* 自定义消息二进制数据
* 文件消息Elem
*/
@property(nonatomic,strong) NSData * data;
@interface TIMFileElem : TIMElem
/**
* 自定义消息描述信息,做离线Push时文本展示(已废弃,请使用TIMMessage中offlinePushInfo进行配置
* 上传时任务 ID,可用来查询上传进度(已废弃,请在 TIMUploadProgressListener 监听上传进度
*/
@property(nonatomic,strong) NSString * desc DEPRECATED_ATTRIBUTE;
@property(nonatomic,assign) uint32_t taskId DEPRECATED_ATTRIBUTE;
/**
* 离线Push时扩展字段信息(已废弃,请使用TIMMessage中offlinePushInfo进行配置
* 上传时,文件的路径(设置 path 时,优先上传文件
*/
@property(nonatomic,strong) NSString * ext DEPRECATED_ATTRIBUTE;
@property(nonatomic,strong) NSString * path;
/**
* 离线Push时声音字段信息(已废弃,请使用TIMMessage中offlinePushInfo进行配置)
* 文件内部 ID
*/
@property(nonatomic,strong) NSString * sound DEPRECATED_ATTRIBUTE;
@property(nonatomic,strong) NSString * uuid;
/**
* 文件大小
*/
@property(nonatomic,assign) int fileSize;
/**
* 文件显示名,发消息时设置
*/
@property(nonatomic,strong) NSString * filename;
/**
* 获取文件数据到指定路径的文件中
*
* getFile 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 文件保存路径
* @param succ 成功回调,返回数据
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getFile:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
/**
* 获取文件数据到指定路径的文件中(有进度回调)
*
* getFile 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 文件保存路径
* @param progress 文件下载进度
* @param succ 成功回调,返回数据
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getFile:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/// @}
/////////////////////////////////////////////////////////////////////////////////
//
// (七)表情消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 表情消息类型
*
* 1. 表情消息由 TIMFaceElem 定义,SDK 并不提供表情包,如果开发者有表情包,可使用 index 存储表情在表情包中的索引,由用户自定义,或者直接使用 data 存储表情二进制信息以及字符串 key,都由用户自定义,SDK 内部只做透传。
* 2. index 和 data 只需要传入一个即可,ImSDK 只是透传这两个数据。
*
*/
@interface TIMFaceElem : TIMElem
... ... @@ -240,39 +374,40 @@
@end
@interface TIMVideo : NSObject
/////////////////////////////////////////////////////////////////////////////////
//
// (八)地理位置消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 视频ID,不用设置
* 地理位置Elem
*/
@property(nonatomic,strong) NSString * uuid;
@interface TIMLocationElem : TIMElem
/**
* 视频文件类型,发送消息时设置
* 地理位置描述信息,发送消息时设置
*/
@property(nonatomic,strong) NSString * type;
@property(nonatomic,strong) NSString * desc;
/**
* 视频大小,不用设置
* 纬度,发送消息时设置
*/
@property(nonatomic,assign) int size;
@property(nonatomic,assign) double latitude;
/**
* 视频时长,发送消息时设置
* 经度,发送消息时设置
*/
@property(nonatomic,assign) int duration;
@property(nonatomic,assign) double longitude;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (九)截图消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 获取视频
*
* @param path 视频保存路径
* @param succ 成功回调
* @param fail 失败回调,返回错误码和错误描述
* 截图消息 Elem
*/
- (void)getVideo:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getVideo:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
@interface TIMSnapshot : NSObject
/**
* 图片ID,不用设置
* 图片 ID,不用设置
*/
@property(nonatomic,strong) NSString * uuid;
/**
... ... @@ -295,48 +430,64 @@
/**
* 获取图片
*
* getImage 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 图片保存路径
* @param succ 成功回调,返回图片数据
* @param fail 失败回调,返回错误码和错误描述
*/
- (void)getImage:(NSString*)path succ:(TIMSucc)succ fail:(TIMFail)fail;
- (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/**
* 微视频消息
* 获取图片(有进度回调)
*
* getImage 接口每次都会从服务端下载,如需缓存或者存储,开发者可根据 uuid 作为 key 进行外部存储,ImSDK 并不会存储资源文件。
*
* @param path 图片保存路径
* @param progress 图片下载进度
* @param succ 成功回调,返回图片数据
* @param fail 失败回调,返回错误码和错误描述
*/
@interface TIMVideoElem : TIMElem
- (void)getImage:(NSString*)path progress:(TIMProgress)progress succ:(TIMSucc)succ fail:(TIMFail)fail;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (十)自定义消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 上传时任务Id,可用来查询上传进度
* 自定义消息类型
*
* 自定义消息是指当内置的消息类型无法满足特殊需求,开发者可以自定义消息格式,内容全部由开发者定义,IM SDK 只负责透传。自定义消息由 TIMCustomElem 定义,其中 data 存储消息的二进制数据,其数据格式由开发者定义,desc 存储描述文本。一条消息内可以有多个自定义 Elem,并且可以跟其他 Elem 混合排列,离线 Push 时叠加每个 Elem 的 desc 描述信息进行下发。
*
*/
@property(nonatomic,assign) uint32_t taskId;
@interface TIMCustomElem : TIMElem
/**
* 视频文件路径,发送消息时设置
* 自定义消息二进制数据
*/
@property(nonatomic,strong) NSString * videoPath;
@property(nonatomic,strong) NSData * data;
/**
* 视频信息,发送消息时设置
* 自定义消息描述信息,做离线Push时文本展示(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
*/
@property(nonatomic,strong) TIMVideo * video;
@property(nonatomic,strong) NSString * desc DEPRECATED_ATTRIBUTE;
/**
* 截图文件路径,发送消息时设置
* 离线Push时扩展字段信息(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
*/
@property(nonatomic,strong) NSString * snapshotPath;
@property(nonatomic,strong) NSString * ext DEPRECATED_ATTRIBUTE;
/**
* 视频截图,发送消息时设置
* 离线Push时声音字段信息(已废弃,请使用 TIMMessage 中 offlinePushInfo 进行配置)
*/
@property(nonatomic,strong) TIMSnapshot * snapshot;
@property(nonatomic,strong) NSString * sound DEPRECATED_ATTRIBUTE;
@end
#pragma mark - 群系统消息和tip消息
/////////////////////////////////////////////////////////////////////////////////
//
// (十一)群 Tips 消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 群tips,成员变更信息
... ... @@ -355,7 +506,7 @@
@end
/**
* 群tips,群变更信息
* 群 tips,群变更信息
*/
@interface TIMGroupTipsElemGroupInfo : NSObject
... ... @@ -371,12 +522,12 @@
@end
/**
* 群Tips
* 群 Tips
*/
@interface TIMGroupTipsElem : TIMElem
/**
* 群组Id
* 群组 ID
*/
@property(nonatomic,strong) NSString * group;
... ... @@ -442,7 +593,11 @@
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (十二)群系统消息
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 群系统消息
*/
... ... @@ -454,7 +609,7 @@
@property(nonatomic,assign) TIM_GROUP_SYSTEM_TYPE type;
/**
* 群组Id
* 群组 ID
*/
@property(nonatomic,strong) NSString * group;
... ... @@ -468,7 +623,6 @@
*/
@property(nonatomic,strong) NSString * msg;
/**
* 消息标识,客户端无需关心
*/
... ... @@ -480,7 +634,7 @@
@property(nonatomic,strong) NSData * authKey;
/**
* 用户自定义透传消息体(type=TIM_GROUP_SYSTEM_CUSTOM_INFO时有效)
* 用户自定义透传消息体(type = TIM_GROUP_SYSTEM_CUSTOM_INFO 时有效)
*/
@property(nonatomic,strong) NSData * userData;
... ... @@ -496,16 +650,20 @@
/**
* 操作方平台信息
* 取值: iOS Android Windows Mac Web RESTAPI Unknown
* 取值: iOS、Android、Windows、Mac、Web、RESTAPI、Unknown
*/
@property(nonatomic,strong) NSString * platform;
@end
#pragma mark - 消息体TIMMessage
/////////////////////////////////////////////////////////////////////////////////
//
// (十三)设置消息推送
//
/////////////////////////////////////////////////////////////////////////////////
/**
填入sound字段表示接收时不会播放声音
填入 sound 字段表示接收时不会播放声音
*/
extern NSString * const kIOSOfflinePushNoSound;
... ... @@ -515,7 +673,7 @@ extern NSString * const kIOSOfflinePushNoSound;
*/
@property(nonatomic,strong) NSString * desc;
/**
* 离线Push时扩展字段信息
* 离线 Push 时扩展字段信息
*/
@property(nonatomic,strong) NSString * ext;
/**
... ... @@ -533,33 +691,36 @@ extern NSString * const kIOSOfflinePushNoSound;
@end
/////////////////////////////////////////////////////////////////////////////////
//
// (十四)消息封装
//
/////////////////////////////////////////////////////////////////////////////////
/**
* 消息
*/
@interface TIMMessage : NSObject
/**
* 增加Elem
* 增加 Elem
*
* @param elem elem结构
* @param elem elem 结构
*
* @return 0 表示成功
* 1 禁止添加Elem(文件或语音多于两个Elem)
* 2 未知Elem
* @return 0:表示成功;1:禁止添加 Elem(文件或语音多于两个 Elem);2:未知 Elem
*/
- (int)addElem:(TIMElem*)elem;
/**
* 获取对应索引的Elem
* 获取对应索引的 Elem
*
* @param index 对应索引
*
* @return 返回对应Elem
* @return 返回对应 Elem
*/
- (TIMElem*)getElem:(int)index;
/**
* 获取Elem数量
* 获取 Elem 数量
*
* @return elem数量
*/
... ... @@ -577,7 +738,7 @@ extern NSString * const kIOSOfflinePushNoSound;
/**
* 获得本消息离线推送配置信息
*
* @return 配置信息,没设置返回nil
* @return 配置信息,没设置返回 nil
*/
- (TIMOfflinePushInfo*)getOfflinePushInfo;
... ... @@ -585,14 +746,14 @@ extern NSString * const kIOSOfflinePushNoSound;
* 设置业务命令字
*
* @param buzCmds 业务命令字列表
* @"im_open_busi_cmd.msg_robot" 表示发送给IM机器人
* @"im_open_busi_cmd.msg_nodb" 表示不存离线
* @"im_open_busi_cmd.msg_noramble" 表示不存漫游
* @"im_open_busi_cmd.msg_nopush" 表示不实时下发给用户
* @"im_open_busi_cmd.msg_robot":表示发送给IM机器人;
* @"im_open_busi_cmd.msg_nodb":表示不存离线;
* @"im_open_busi_cmd.msg_noramble":表示不存漫游;
* @"im_open_busi_cmd.msg_nopush":表示不实时下发给用户
*
* @return 0 成功
* @return 0:成功;1:buzCmds 为 nil
*/
-(int) setBusinessCmd:(NSArray*)buzCmds;
-(int)setBusinessCmd:(NSArray*)buzCmds;
/**
* 获取会话
... ... @@ -611,7 +772,7 @@ extern NSString * const kIOSOfflinePushNoSound;
/**
* 是否发送方
*
* @return TRUE 表示是发送消息 FALSE 表示是接收消息
* @return TRUE:表示是发送消息;FALSE:表示是接收消息
*/
- (BOOL)isSelf;
... ... @@ -623,12 +784,12 @@ extern NSString * const kIOSOfflinePushNoSound;
- (NSString*)sender;
/**
* 消息Id
* 消息 ID,当消息生成时,就已经固定,这种方式可能跟其他用户产生的消息冲突,需要再加一个时间约束,可以认为 10 分钟以内的消息可以使用 msgId 区分,需要在同一个会话内判断。
*/
- (NSString*)msgId;
/**
* 获取消息uniqueId
* 消息 uniqueId,当消息发送成功以后才能固定下来(uniqueId),这种方式能保证全局唯一,需要在同一个会话内判断。
*
* @return uniqueId
*/
... ... @@ -637,22 +798,25 @@ extern NSString * const kIOSOfflinePushNoSound;
/**
* 当前消息的时间戳
*
* @return 时间戳
* @return 时间戳,该时间是 Server 时间,而非本地时间。在创建消息时,此时间为根据 Server 时间校准过的时间,发送成功后会改为准确的 Server 时间。
*/
- (NSDate*)timestamp;
/**
* 获取发送者资料(发送者为自己时可能为空)
* 获取发送者资料
*
* @return 发送者资料,nil 表示没有获取资料,目前只有字段:identifier、nickname、faceURL、customInfo
* 如果本地有发送者资料,这里会直接通过 return 值 TIMUserProfile 返回发送者资料,如果本地没有发送者资料,这里会直接 return nil,SDK 内部会向服务器拉取发送者资料,并在 profileCallBack 回调里面返回发送者资料。
*
* @param profileCallBack 发送者资料回调
*
* @return 发送者资料,nil 表示本地没有获取到资料
*/
- (TIMUserProfile*)getSenderProfile;
- (TIMUserProfile*)getSenderProfile:(ProfileCallBack)profileCallBack;
/**
* 获取发送者群内资料(发送者为自己时可能为空)
*
* @return 发送者群内资料,nil 表示没有获取资料或者不是群消息,目前只有字段:member、nameCard、role、customInfo
* @return 发送者群内资料,nil 表示没有获取资料或者不是群消息,目前仅能获取字段:member,nameCard,其他的字段获取建议通过 TIMGroupManager+Ext.h -> getGroupMembers 获取
*/
- (TIMGroupMemberInfo*)getSenderGroupMemberProfile;
... ... @@ -666,20 +830,15 @@ extern NSString * const kIOSOfflinePushNoSound;
- (BOOL)setPriority:(TIMMessagePriority)priority;
/**
* 获取消息的优先级
* 获取消息的优先级(仅对群组消息有效)
*
* 对于直播场景,会有点赞和发红包功能,点赞相对优先级较低,红包消息优先级较高,具体消息内容可以使用 TIMCustomElem 进行定义,发送消息时,可设置消息优先级。
*
* @return 优先级
*/
- (TIMMessagePriority)getPriority;
/**
* 获取消息所属会话的接收消息选项(仅对群组消息有效)
*
* @return 接收消息选项
*/
- (TIMGroupReceiveMessageOpt)getRecvOpt;
/**
* 拷贝消息中的属性(ELem、priority、online、offlinePushInfo)
*
* @param srcMsg 源消息
... ...
This file is too large to display.
... ... @@ -14,21 +14,21 @@
/**
* 原始声音的回调
* @prarm data pcm数据
* @prarm timeStamp 时间戳
* @prarm sampleRate 采样率
* @prarm channels 声道数
* @prarm withBgm 回调的数据是否包含bgm,当不开启回声消除时,回调的raw pcm会包含bgm
* @param data pcm数据
* @param timeStamp 时间戳
* @param sampleRate 采样率
* @param channels 声道数
* @param withBgm 回调的数据是否包含bgm,当不开启回声消除时,回调的raw pcm会包含bgm
*/
@optional
- (void)onRecordRawPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels withBgm:(BOOL)withBgm;
/**
* 经过特效处理的声音回调
* @prarm data pcm数据
* @prarm timeStamp 时间戳
* @prarm sampleRate 采样率
* @prarm channels 声道数
* @param data pcm数据
* @param timeStamp 时间戳
* @param sampleRate 采样率
* @param channels 声道数
*/
@optional
- (void)onRecordPcmData:(NSData *)data timeStamp:(unsigned long long)timeStamp sampleRate:(int)sampleRate channels:(int)channels;
... ...
... ... @@ -11,9 +11,9 @@
/// HLS多码率信息
@interface TXBitrateItem : NSObject
@property (nonatomic, assign) NSInteger index; /// m3u8文件中的序号
@property (nonatomic, assign) NSInteger width; /// 此流的视频宽度
@property (nonatomic, assign) NSInteger height; /// 此流的视频高度
@property (nonatomic, assign) NSInteger bitrate; /// 此流的视频码率
@property (nonatomic, assign) NSInteger index; ///< m3u8 文件中的序号
@property (nonatomic, assign) NSInteger width; ///< 此流的视频宽度
@property (nonatomic, assign) NSInteger height; ///< 此流的视频高度
@property (nonatomic, assign) NSInteger bitrate; ///< 此流的视频码率
@end
#endif /* TXBitrateItem_h */
... ...