• 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;
          }
      
          // 同步成功
      }];

    初始化

    当前用户对象初始化时会做以下工作:

    1. 创建用户会话管理对象:userConversations
    2. 创建联系人管理对象:contacts
    3. 创建群组管理对象:userSessions
    4. 创建会话管理对象:sessions
    5. 使用数据库中的数据创建/填充以下对象:
      • 当前用户
      • 当前用户所有相关的用户列表(联系人,群成员包含的用户信息)
      • 用户会话列表
      • 联系人列表
      • 群组列表
      • 会话及会话成员列表

    用户会话

    用户会话由服务端管理,客户端不能主动创建,只需通过同步获取最新的用户会话信息,用户会话包含如下对象:

    • 用户会话管理对象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) {
    
                                // 获取失败
                           }];

    重要

    1. 此方法先在本地搜索,如果本地不存在将去服务器获取,此方法必定会返回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属性,存放多个会话成员信息
    • 更新会话操作只有在以下两种情况下调用
      1. 推送服务器不存在此会话,此时需要将当前会话所有成员更新到推送服务器
      2. 推送服务器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
    };

    y2wIM用户使用手册

    用户使用手册

     

  • 相关阅读:
    【Henu ACM Round#20 B】Contest
    【Henu ACM Round#20 A】 Fancy Fence
    【Henu ACM Round#19 F】Dispute
    【Henu ACM Round#19 E】 Om Nom and Candies
    【Henu ACM Round#19 D】 Points on Line
    【Henu ACM Round#19 C】 Developing Skills
    【Henu ACM Round#19 B】 Luxurious Houses
    【Henu ACM Round#19 A】 Vasya the Hipster
    【Codeforces Round #460 (Div. 2) D】Substring
    JQuery中attr ,html,text,val,的一些用法
  • 原文地址:https://www.cnblogs.com/yun2win/p/5761811.html
Copyright © 2020-2023  润新知