yun2win-iOS端IM SDK使用方法
yun2win-iOS IM SDK下载地址:https://github.com/yun2win/yun2win-sdk-iOS
yun2win官网:www.yun2win.com
开发准备
从以下网址下载SDK:
https://github.com/yun2win/yun2win-sdk-server
iOS目录结构如下:
- Common:通用模块
- Util:常用工具
- Config:全局配置
- Category:类别扩展
- Classes:demo结构
- ConversationList:用户会话列表
- Conversation:用户会话界面
- Contact:联系人
- Setting:设置
- Setting:登陆注册
- Model:demo业务逻辑及实体
- Yun2Win:SDK模块
注册
调用以下代码进行用户注册:
[[Y2WUsers getInstance].remote registerWithAccount:@"account"
password:@"password"
name:@"name"
success:^{
// 注册成功
} failure:^(NSError *error) {
// 注册失败
}];
登录
调用以下代码进行登录:
[[Y2WUsers getInstance].remote loginWithAccount:@"account"
password:@"password"
success:^(Y2WCurrentUser *currentUser) {
// 登陆成功
// currentUser为本次登陆用户的对象
} failure:^(NSError *error) {
// 登陆失败
}];
提醒
登录成功后可使用[Y2WUsers getInstance].getCurrentUser全局调用。
当前用户
登陆后可调用以下代码获取当前用户
Y2WCurrentUser *currentUser = [Y2WUsers getInstance].getCurrentUser;
属性
当前用户对象包含以下属性:
@property (nonatomic, strong) NSString *appKey;
@property (nonatomic, strong) NSString *secret;
@property (nonatomic, strong) NSString *token;
@property (nonatomic, strong) NSString *imToken;
@property (nonatomic, strong) Y2WContacts *contact
@property (nonatomic, strong) Y2WSessions *session
@property (nonatomic, strong) Y2WUserSessions *use
@property (nonatomic, strong) Y2WUserConversations
@property (nonatomic, strong) Y2WCurrentUserRemote
@property (nonatomic, strong) Y2WBridge *bridge;
远程方法
当前用户对象包含以下远程方法:
- 同步获取用于连接y2wIM消息推送服务器的凭证
复制
[currentUser.remote syncIMTokenDidCompletion:^(NSError *error) { if (error) { // 同步失败 return; } // 同步成功 }];
初始化
当前用户对象初始化时会做以下工作:
- 创建用户会话管理对象:userConversations
- 创建联系人管理对象:contacts
- 创建群组管理对象:userSessions
- 创建会话管理对象:sessions
- 使用数据库中的数据创建/填充以下对象:
- 当前用户
- 当前用户所有相关的用户列表(联系人,群成员包含的用户信息)
- 用户会话列表
- 联系人列表
- 群组列表
- 会话及会话成员列表
用户会话
用户会话由服务端管理,客户端不能主动创建,只需通过同步获取最新的用户会话信息,用户会话包含如下对象:
- 用户会话管理对象UserConversations:包含同步时间戳,并负责管理用户会话列表
- 用户会话对象UserConversation:包含用户会话信息
UserConversations
用户会话管理对象,管理列表,查询与同步等工作
属性
UserConversations包含以下属性:
/**
* 当前生命周期所维持的当前登录用户
*/
@property (nonatomic, weak) Y2WCurrentUser *user;
/**
* 用户回话同步时间戳
*/
@property (nonatomic, strong) NSString *updatedAt;
/**
* 远程方法封装对象
*/
@property (nonatomic, strong) Y2WUserConversationsRemote *remote;
方法
UserConversations包含以下本地方法
- 添加和移除委托对象
复制
/** * 添加委托对象(此对象需要实现Y2WUserConversationsDelegate协议) * * @param delegate 委托对象 */ [userConversations addDelegate:delegate]; /** * 移除委托对象 * * @param delegate 委托对象 */ [userConversations removeDelegate:delegate];
- 获取用户会话
复制
/** * 通过目标ID和会话类型获取一个会话对象 * * @param targetId 会话目标ID(目标是个人为对方用户ID,否则为sessionId) * @param type 会话类型(@"p2p",@"group") * type == @"p2p":targetId = user.userId(对方); * type == @"group":targetId = session.sessionId(会话ID) * @return userConversation */ Y2WUserConversation *userConversation = [userConversations getUserConversationWithTargetId:targetId type:type];
- 获取用户会话列表
复制
/** * 获取用户会话列表 * @returns @[userConversation1,userConversation2]; */ NSArray *userConversationArray = [userConversations getUserConversations];
UserConversations包含以下远程方法
- 同步用户会话
复制
/** * 激活用户会话同步 * 同步完成后userConversations会通过协议方法通知实现了Y2WUserConversationsDelegate协议的对象 */ [userConversations.remote sync];
- 删除用户会话
复制
/** * 删除一个用户会话 * @param userConversation: 要删除的用户会话对象 */ [userConversations.remote deleteUserConversation:userConversation success:^{ // 删除成功 } failure:^(NSError *error) { // 删除失败 }];
UserConversation
用户会话对象,包含用户会话信息
属性
UserConversation包含以下属性:
// 用户会话从属于用户会话管理对象,此处保存对其的引用
@property (nonatomic, weak) Y2WUserConversations *userConversations;
// 用户会话ID
@property (nonatomic, copy) NSString *userConversationId;
// 名字
@property (nonatomic, copy) NSString *name;
// 头像地址
@property (nonatomic, copy) NSString *avatarUrl;
// 会话类型@[@"p2p",@"group"]
@property (nonatomic, copy) NSString *type;
// 会话目标ID
@property (nonatomic, copy) NSString *targetId;
// 创建时间
@property (nonatomic, copy) NSString *createdAt;
// 更新时间
@property (nonatomic, copy) NSString *updatedAt;
// 未读消息数
@property (nonatomic, assign) NSUInteger unRead;
// 最新一条消息
@property (nonatomic, retain) Y2WMessage *lastMessage;
// 如果为YES, 表示服务器已删除了此实体,同步时请在客户端也删除
@property (nonatomic, assign) BOOL isDelete;
// 是否显示
@property (nonatomic, assign) BOOL visiable;
// 置顶标志
@property (nonatomic, assign) BOOL top;
方法
UserConversation包含以下方法
- 获取名称
复制
/** * 获取此用户会话名 */ NSString *name = [userConversation getName];
- 获取头像
复制
/** * 获取此用户会话的头像地址 */ NSString *avatarUrl = [userConversation getAvatarUrl];
- 获取目标会话
复制
/** * 获取此用户会话的session */ [userConversation getSessionDidCompletion:^(Y2WSession *session, NSError *error) { if (error) { // 获取失败 return; } // 获取成功 }];
联系人
联系人包含如下对象:
- 联系人管理对象Contacts:包含同步时间戳,并负责管理联系人列表
- 联系人对象Contact:包含联系人信息
Contacts
联系人管理对象,管理列表,查询与同步等工作
属性
Contacts包含以下属性:
// 联系人管理对象从属于某一用户,此处保存对用户的引用,通常为当前用户
@property (nonatomic,weak) Y2WCurrentUser *user;
// 同步时间戳,同步时使用此时间戳获取之后的数据
@property (nonatomic, copy) NSString *updatedAt;
// 远程方法封装对象
@property (nonatomic, strong) Y2WContactsRemote *remote;
方法
Contacts包含以下本地方法
- 添加和移除委托对象
复制
/** * 添加委托对象(此对象需要实现Y2WContactsDelegate协议) * * @param delegate 委托对象 */ [contacts addDelegate:delegate]; /** * 移除委托对象 * * @param delegate 委托对象 */ [contacts removeDelegate:delegate];
- 获取联系人
复制
/** * 获取联系人 * @param userId:用户id * @returns contact */ Y2WContact *contact = [contacts getContactWithUID:userId];
- 获取联系人列表
复制
/** * 获取联系人列表 * @returns @[contact1,contact2] */ NSArray *contactArray = [contacts getContacts];
Contacts包含以下远程方法
- 同步联系人
复制
/** * 激活用户会话同步 * 同步完成后contacts会通过协议方法通知实现了Y2WContactsDelegate协议的对象 */ [contacts.remote sync];
- 添加联系人
复制
// 根据名字和ID创建一个联系人对象 Y2WContact *contact = [[Y2WContact alloc] init]; contact.userId = userId; contact.name = name; /** * 添加联系人 * @param contact: 联系人对象 */ [contacts.remote addContact:contact success:^{ // 添加成功 } failure:^(NSError *error) { // 添加失败 }];
- 删除联系人
复制
/** * 删除联系人 * @param contact: 联系人对象 */ [contacts.remote deleteContact:contact success:^{ // 删除成功 } failure:^(NSError *error) { // 删除失败 }];
提醒
添加或删除联系人后使用同步方法更新联系人
Contact
联系人对象
属性
Contact包含以下属性:
/**
* 联系人从属于联系人管理对象,此处保存对其的引用
*/
@property (nonatomic, weak) Y2WContacts *contacts;
/**
* 联系人ID
*/
@property (nonatomic, copy) NSString *contactId;
/**
* 联系人的用户ID
*/
@property (nonatomic, copy) NSString *userId;
/**
* 联系人名字
*/
@property (nonatomic, copy) NSString *name;
/**
* 联系人用户姓名的拼音(格式为每个字的拼音为一个元素组成的数)
* 示例:
* 姓名:张三
* 拼音:@[@"zhang",@"san"];
*/
@property (nonatomic, strong) NSArray *pinyin;
/**
* 当前登录用户对联系人的备注
*/
@property (nonatomic, copy) NSString *title;
/**
* 当前登录用户对联系人的备注拼音
*/
@property (nonatomic, copy) NSString *titlePinyin;
/**
*
*/
@property (nonatomic, copy) NSString *remark;
/**
* 联系人创建时间
*/
@property (nonatomic, copy) NSString *createdAt;
/**
* 联系人更新时间
*/
@property (nonatomic, copy) NSString *updatedAt;
/**
* 联系人头像URl
*/
@property (nonatomic, copy) NSString *avatarUrl;
/**
* 如果为YES, 表示服务器已删除了此实体,同步时请在客户端也删除
*/
@property (nonatomic, assign) BOOL isDelete;
/**
* 联系人的本身用户对象
*/
@property (nonatomic, strong) Y2WUser *user;
方法
Contact包含以下方法
- 获取用户会话
复制
/** * 获取此联系人的用户会话 */ Y2WUserConversation *userConversation = [contact getUserConversation];
- 获取session
复制
/** * 获取当前用户与此联系人的session对象 */ [contact getSessionDidCompletion:^(Y2WSession *session, NSError *error) { if (error) { // 获取失败 return; } // 获取成功 }];
群组
群组在项目中定义为"收藏到群组列表的多人会话",群组包含如下对象:
- 群组管理对象UserSessions:包含同步时间戳,并负责管理群组列表
- 群组对象UserSession:包含群组信息
UserSessions
群组管理对象,管理列表,查询与同步等工作
属性
UserSessions包含以下属性:
/**
* 群组管理对象从属于某一用户,此处保存对用户的引用,通常为当前用户
*/
@property (nonatomic, weak) Y2WCurrentUser *user;
/**
* 远程方法封装对象
*/
@property (nonatomic, strong) Y2WUserSessionsRemote *remote;
/**
* 同步时间戳,同步时使用此时间戳获取之后的数据
*/
@property (nonatomic, copy) NSString *updatedAt;
方法
UserSessions包含以下本地方法
- 初始化
复制
/** * 创建一个用户群组管理对象,初始化并添加依赖 */ Y2WUserSessions *userSessions = [[Y2WUserSessions alloc] initWithCurrentUser:currentUser];
- 添加和移除委托对象
复制
/** * 添加委托对象(此对象需要实现Y2WUserSessionsDelegate协议) * * @param delegate 委托对象 */ [userSessions addDelegate:delegate]; /** * 移除委托对象 * * @param delegate 委托对象 */ [userSessions removeDelegate:delegate];
- 获取群组列表
复制
/** * 获取群组列表 * * @return @[userSession1,userSession2]; */ NSArray *userSessionArray = [userSessions getUserSessions];
UserSessions包含以下远程方法
- 同步群组
复制
/** * 激活用户会话同步 * 同步完成后userSessions会通过协议方法通知实现了Y2WUserSessionsDelegate协议的对象 */ [userSessions.remote sync];
- 收藏群组
复制
/** * 收藏群组 * @param sessionId:会话Id * @param name:群组名称 * @param avatarUrl:群组头像 * @param cb */ userSessions.remote.add(sessionId, name, avatarUrl, function(err){ if(err){ alert("收藏群组失败:" + err); return; } alert("收藏群组成功"); })
- 取消收藏群组
复制
/** * 取消收藏群组 * * @param userSession: 要移除的群组对象 */ [userSessions.remote deleteUserSession:userSession success:^{ // 删除成功 } failure:^(NSError *error) { // 删除失败 }];
UserSession
群组对象,包含群组信息
属性
UserSession包含以下属性:
/**
* 会话从属于会话管理对象,此处保存对其的引用
*/
@property (nonatomic, weak) Y2WUserSessions *userSessions;
/**
* 群组ID
*/
@property (nonatomic, copy) NSString *userSessionId;
/**
* 会话ID
*/
@property (nonatomic, copy) NSString *sessionId;
/**
* 群组名
*/
@property (nonatomic, copy) NSString *name;
/**
* 头像地址
*/
@property (nonatomic, copy) NSString *avatarUrl;
/**
* 会话创建时间
*/
@property (nonatomic, copy) NSString *createdAt;
/**
* 会话更新时间
*/
@property (nonatomic, copy) NSString *updatedAt;
/**
* 删除标志
*/
@property (nonatomic, assign) BOOL isDelete;
方法
UserSession包含以下本地方法
- 获取用户会话
复制
/** * 获取此用户群组的用户会话 */ Y2WUserConversation *userConversation = [userSession getUserConversation];
- 获取session
复制
/** * 获取此用户群组的session对象 */ [userSession getSessionDidCompletion:^(Y2WSession *session, NSError *error) { if (error) { // 获取失败 return; } // 获取成功 }];
Session
Session:会话
- 会话管理对象Sessions:负责管理会话集合
- 会话对象Session:包含会话信息,并负责管理该会话的成员与消息
Sessions
会话管理对象,管理会话集合
属性
Sessions包含以下属性:
/**
* 群组管理对象从属于某一用户,此处保存对用户的引用,通常为当前用户
*/
@property (nonatomic, weak)Y2WCurrentUser *user;
/**
* 远程方法封装对象
*/
@property (nonatomic, retain) Y2WSessionsRemote *remote;
方法
获取会话
/**
* 获取会话
* @param targetId 会话目标ID
* type: @"p2p",targetId=user.userId(对方用户);
* type: @"group",targetId=session.sessionId(会话ID)
* @param type @[@"p2p",@"group"] 会话场景类型
*/
[sessions getSessionWithTargetId:targetId
type:type
success:^(Y2WSession *session) {
// 获取成功,返回session对象
} failure:^(NSError *error) {
// 获取失败
}];
重要
- 此方法先在本地搜索,如果本地不存在将去服务器获取,此方法必定会返回session
Sessions包含以下远程方法
- 添加会话
复制
/** * 添加会话 * @param type:@[@"p2p",@"group"]:会话场景类型 * @param name:名称 * @param secureType:@[@"public",@"private"]:安全类型,通常使用private * @param avatarUrl:头像地址 */ [sessions.remote addWithName:name type:type secureType:secureType avatarUrl:avatarUrl success:^(Y2WSession *session) { // 创建成功,返回session对象 } failure:^(NSError *error) { // 创建失败 }];
Session
会话对象,包含会话信息,并负责管理该会话的成员与消息
属性
Session包含以下属性:
/**
* 会话从属于会话管理对象,此处保存对其的引用
*/
@property (nonatomic, weak) Y2WSessions *sessions;
/**
* 用于本地查找
*/
@property (nonatomic, copy) NSString *targetID;
/**
* 会话唯一标识码
*/
@property (nonatomic, copy) NSString *sessionId;
/**
* 会话名称
*/
@property (nonatomic, copy) NSString *name;
/**
* 会话类型
*/
@property (nonatomic, copy) NSString *type;
/**
* 会话的头像地址
*/
@property (nonatomic, copy) NSString *avatarUrl;
/**
* 会话中会话成员创建时间
*/
@property (nonatomic, copy) NSString *createMTS;
/**
* 会话中会话成员更新时间
*/
@property (nonatomic, copy) NSString *updateMTS;
/**
* 会话创建时间
*/
@property (nonatomic, copy) NSString *createdAt;
/**
* 会话更新时间
*/
@property (nonatomic, copy) NSString *updatedAt;
/**
* 消息管理对象
*/
@property (nonatomic, strong) Y2WMessages *messages;
/**
* 会话成员管理对象
*/
@property (nonatomic, strong) Y2WSessionMembers *members;
SessionMember
SessionMember:会话成员
- 会话成员管理对象SessionMembers:负责管理会话成员同步,增删等操作
- 会话成员对象SessionMember:包含会话成员信息
SessionMembers
会话成员管理对象,负责管理会话成员同步,增删改查等操作
属性
SessionMembers包含以下属性:
/**
* 会话成员管理对象从属于某一会话,此处保存对会话的引用
*/
@property (nonatomic, weak) Y2WSession *session;
/**
* 远程方法封装对象
*/
@property (nonatomic, strong) Y2WSessionMembersRemote *remote;
/**
* 会话成员创建时间,用于推送消息
*/
@property (nonatomic, strong) NSString *createdAt;
/**
* 同步时间戳,同步时使用此时间戳获取之后的数据
*/
@property (nonatomic, strong) NSString *updatedAt;
方法
SessionMembers包含以下本地方法
- 获取会话成员
复制
/** * 获取会话成员 * @param userId:用户ID * @returns sessionMember */ Y2WSessionMember *sessionMember = [sessionMembers getMemberWithUserId:userId];
- 获取会话成员列表
复制
/** * 获取会话成员列表 * @returns @[sessionMember1,sessionMember2]; */ NSArray *sessionMemberArray = [sessionMembers getMembers];
SessionMembers包含以下远程方法
- 同步会话成员
复制
/** * 激活用户会话同步 * 同步完成后sessionMembers会通过协议方法通知实现了Y2WSessionMembersDelegate协议的对象 */ [sessionMembers.remote sync];
- 添加会话成员
复制
/** * 构建成员对象 * @param userId:用户id * @param name:用户名称 * @param role:会话成员角色,master:群主;admin:管理员;user:一般成员 * @param avatarUrl:头像地址 * @param status:用户状态,active:有效;inactive:封禁 */ Y2WSessionMember *sessionMember = [[Y2WSessionMember alloc] init]; sessionMember.name = name; sessionMember.userId = userId; sessionMember.avatarUrl = avatarUrl; sessionMember.role = role; sessionMember.status = status; /** * 添加会话成员 */ [sessionMembers.remote addSessionMember:sessionMember success:^{ // 添加成功 } failure:^(NSError *error) { // 添加失败 }];
- 删除会话成员
复制
/** * 删除会话成员 */ [sessionMembers.remote deleteSessionMember:sessionMember success:^{ // 删除成功 } failure:^(NSError *error) { // 删除失败 }];
SessionMember
会话成员对象,包含会话成员信息
属性
SessionMember包含以下属性:
/**
* 会话成员从属于会话成员管理对象,此处保存对其的引用
*/
@property (nonatomic, weak) Y2WSessionMembers *sessionMembers;
/**
* 会话成员唯一标识码
*/
@property (nonatomic, copy) NSString *sessionMemberId;
/**
* 用户唯一标识码
*/
@property (nonatomic, copy) NSString *userId;
/**
* 会话成员名称
*/
@property (nonatomic, copy) NSString *name;
/**
* 成员头像
*/
@property (nonatomic, copy) NSString *avatarUrl;
/**
* 联系人用户姓名的拼音(格式为每个字的拼音为一个元素组成的数)
* 示例:
* 姓名:张三
* 拼音:@[@"zhang",@"san"];
*/
@property (nonatomic, strong) NSArray *pinyin;
/**
* 创建时间
*/
@property (nonatomic, copy) NSString *createdAt;
/**
* 修改时间
*/
@property (nonatomic, copy) NSString *updatedAt;
/**
* 用户角色,"master", "admin", "user"
*/
@property (nonatomic, copy) NSString *role;
/**
* 用户状态,有效(active),封禁(inactive)
*/
@property (nonatomic, copy) NSString *status;
/**
* 如果为YES, 表示服务器已删除了此实体,同步时请在客户端也删除
*/
@property (nonatomic, assign) BOOL isDelete;
/**
* 获取会话成员的用户信息
*/
@property (nonatomic, strong) Y2WUser *user;
消息
消息包含如下对象:
- 消息管理对象Messages:包含同步时间戳,负责管理消息列表
- 消息对象Message:包含消息信息
Messages
消息管理对象,包含同步时间戳,负责管理消息列表
属性
Messages包含以下属性:
/**
* 消息管理对象从属于某一会话,此处保存对会话的引用
*/
@property (nonatomic, weak) Y2WSession *session;
/**
* 远程方法封装对象
*/
@property (nonatomic, retain) Y2WMessagesRemote *remote;
/**
* 同步时间戳,同步时使用此时间戳获取之后的数据
*/
@property (nonatomic, copy) NSString *updateAt;
/**
* 消息数量
*/
@property (nonatomic, assign, readonly) NSUInteger count;
方法
Messages包含以下本地方法
- 添加和移除委托对象
复制
/** * 添加委托对象(此对象需要实现Y2WMessagesDelegate协议) * * @param delegate 委托对象 */ [messages addDelegate:delegate]; /** * 移除委托对象 * * @param delegate 委托对象 */ [messages removeDelegate:delegate];
- 发送消息
复制
/** * 发送消息 */ [messages sendMessage:message]; /** * 重发消息 */ [messages resendMessage:message];
Messages包含以下远程方法
- 保存消息
复制
/** * 保存一条消息到session * * @param message 要保存的消息对象 */ [messages.remote storeMessages:message success:^(Y2WMessage *message) { // 保存成功,返回保存的消息 } failure:^(NSError *error) { // 保存失败 }];
- 同步消息
复制
/** * 激活用户会话同步 * 同步完成后messages会通过协议方法通知实现了Y2WMessagesDelegate协议的对象 */ [messages.remote sync];
- 获取历史消息
复制
/** * 获取历史消息 */ [messages.remote getLastMessageDidCompletionBlock:^(NSArray *messageList) { // 获取历史消息成功,返回消息数组 } failure:^(NSError *error) { // 获取历史消息失败 }];
提醒
方法待定
Message
消息对象,包含消息信息
属性
Message包含以下属性:
/**
* 消息对象从属于消息管理对象,此处保存对其的引用
*/
@property (nonatomic, weak) Y2WMessages *messages;
/**
* 消息内容
*/
@property (nonatomic, retain) NSDictionary *content;
/**
* 消息文字内容
*/
@property (nonatomic, copy) NSString *text;
/**
* 会话的唯一标识符
*/
@property (nonatomic, copy) NSString *sessionId;
/**
* 消息唯一的标示码
*/
@property (nonatomic, copy) NSString *messageId;
/**
* 消息的发送者
*/
@property (nonatomic, copy) NSString *sender;
/**
* 消息类型["text"|"image"|"video"|"audio"|"file"]
*/
@property (nonatomic, copy) NSString *type;
/**
* 消息状态["storing"|"stored"|"storefailed"]
*/
@property (nonatomic, copy) NSString *status;
/**
* 消息创建时间
*/
@property (nonatomic, copy) NSString *createdAt;
/**
* 消息更新时间
*/
@property (nonatomic, copy) NSString *updatedAt;
/**
* 删除标志
*/
@property (nonatomic, assign) BOOL isDelete;
y2wIM推送服务
Y2WIM推送服务
- SDK为核心的消息同步协议实现,完成与服务器之间的信息交换。
- Y2WIMSDK核心类IMCient:SDK是基于核心协议实现的完整的IM功能,实现了不同类型消息的收发,会话管理,群组,好友等功能。
IMClient
获取yun2winIMSDK的核心类
通过此方法,获取yun2winIMSDK,访问对象中的属性和方法。
/**
* 获取yun2winIMSDK的核心类
*
* @return 获取yun2winIMSDK
*/
+ (instancetype)shareY2WIMClient;
初始化yun2winIMSDK
初始化yun2winIMSDK,在初始化SDK所有功能之前,必须先初始化SDK.
/**
* 初始化TOKEN和UID
*
* @param token 从平台获取token
* @param uid 从平台获取appkey
*/
- (void)registerWithToken:(NSString *)token UID:(NSString *)uid;
与yun2win服务器建立连接
在App整个生命周期,您只需要调用一次此方法与yun2win服务器建立连接。 之后无论是网络出现异常或者App有前后台的切换等,SDK都会负责自动重连。
/**
* 与yun2win服务器建立连接
*/
- (void)connect;
与yun2win服务器断开连接
因为SDK在前后台切换或者网络出现异常都会自动重连,会保证连接的可靠性。 所以除非您的App逻辑需要登出,否则一般不需要调用此方法进行手动断开。
/**
* 与yun2win服务器断开连接
*/
- (void)disconnect;
向yun2win服务器推送消息
向yun2win服务器推送消息.
IMSession:推送目标
- 通过IMSessionProtocol协议建立IMSession
- 推送消息时,imSession只有两个属性,id和mts
- id表示将消息推送到哪个会话
- mts(membersTimeStamp)是会话成员时间戳,会话成员变更时,此时间戳会更新,当发送消息时,推送服务器根据mts判断推送服务器保存的成员与业务服务器会话成员是否一致
IMMessage:推送内容
- 通过IMMessageProtocol协议建立IMMessage
- 为保证业务数据的安全性,yun2win推送服务默认只推送同步通知,不推送任何实质内容
- message也可由用户自定义推送任何信息
/**
* 推送消息
*
* @param session 对象IMSession
* @param message 推送消息体
*/
- (void)sendMessageWithSession:(id)session Message:(id)message;
更新会话
更新会话成员,保存推送消息到位。
- 推送服务器不保存任何业务数据,不包含会话成员的个人信息,但必须同步业务服务器中会话成员的id,以便推送到位
- 更新会话时,imSession需要额外的members属性,存放多个会话成员信息
- 更新会话操作只有在以下两种情况下调用
- 推送服务器不存在此会话,此时需要将当前会话所有成员更新到推送服务器
- 推送服务器mts过期,此时推送服务器将返回服务端mts,客户端需要将此时间之后的成员变更(新增/删除)更新到推送服务器
/**
* 推送更新会话消息
*
* @param session 通过IMSessionProtocol协议建立IMSession
* @param message 通过IMMessageProtocol协议建立会话成员消息体
*/
- (void)updateSessionWithSession:(id)session Message:(id)message;
StatusDefine
各类状态码定义
网络连接状态码
/**
* 网络连接状态码
*/
typedef NS_ENUM(NSInteger,ConnectionStatus) {
/**
* 正在连接
*/
connecting = 0,
/**
* 已连接
*/
connected = 1,
/**
* 重连
*/
reconnecting = 2,
/**
* 网络断开
*/
networkDisconnected = 3,
/**
* 断开连接
*/
disconnected = 100
};
消息推送返回码
/**
* 消息推送返回码
*/
typedef NS_ENUM(NSInteger,ConnectionReturnCode) {
/**
* 协议错误
*/
unacceptableProtocolVersion = 3,
/**
* 用户ID无效
*/
uidIsInvalid = 4,
/**
* imToken无效
*/
tokenIsInvalid = 5,
/**
* imToken过期
*/
tokenHasExpired = 6,
/**
* appkey无效
*/
appKeyIsInvalid = 7,
/**
* 被踢出,同类型设备重复登录时,之前设备收到提出信息
*/
kicked = 10,
/**
* 服务器不可达
*/
serverUnavailable = 99,
/**
* 服务器内部错误
*/
serverInternalError = 100
};
发送消息的回执
/**
* 发送消息的回执
*/
typedef NS_ENUM(NSInteger,SendReturnCode) {
/**
* 推送成功
*/
success = 20,
/**
* 推送超时
*/
timeout_sendMessage = 21,
/**
* 推送命令无效
*/
cmdIsInvalid = 22,
/**
* 会话无效
*/
sessionIsInvalid = 23,
/**
* 会话ID无效
*/
sessionIdIsInvalid = 24,
/**
* 会话成员时间戳无效
*/
sessionMTSIsInvalid = 25,
/**
* 推送服务器不存在此会话
*/
sessionOnServerIsNotExist = 26,
/**
* 客户端会话成员时间戳过期
*/
sessionMTSOnClientHasExpired = 27,
/**
* 推送服务器会员时间戳过期
*/
sessionMTSOnServerHasExpired = 28,
/**
* 推送服务器会话成员无效
*/
sessionMembersIsInvalid = 29,
/**
* 推送内容是无效的JSON格式
*/
invalidFormatOfJSONContent = 30,
/**
* 会话成员不存在
*/
sessionMembersIsNull = 31
};