环信3.x单聊集成

     有关环信的导入,官方文档说的已经很详细了,这里我就不去重复了,导入之后也许会报错,要检查自己是不是重复导入的三方或者少导入环信的系统库,像md,mj这些三方环信的官方demo都用了.最开始要一步一步来,别一下导入太多,到时候错误不好重现.

    首先,我的项目不需要修改聊天界面,就直接把环信的ChatUI拿来用了,聊天列表页不满意的可以自己写.首先要做的就是用户的头像和昵称要保存到自己的服务器

写个类通过环信的im_id去保存对应的信息

在pch文件中加入通知.pch中导入的类名要写在#ifdef __OBJC__      #endif中

/** IM通知*/

#define HMSortDidSelectNotification @"HMSortDidSelectNotification"

#define HMSelectedSort @"HMSelectedSort"

#define HMCityDidSelectNotification @"HMCityDidSelectNotification"

#define HMSelectedCity @"HMSelectedCity"

#define HMCategoryDidSelectNotification @"HMCategoryDidSelectNotification"

#define HMSelectedCategory @"HMSelectedCategory"

#define HMSelectedSubCategoryName @"HMSelectedSubCategoryName"

#define HMRegionDidSelectNotification @"HMRegionDidSelectNotification"

#define HMSelectedRegion @"HMSelectedRegion"

#define HMSelectedSubRegionName @"HMSelectedSubRegionName"

#define HMNotificationCenter [NSNotificationCenter defaultCenter]

#define HMAddObsver(methodName, noteName) [HMNotificationCenter addObserver:self selector:@selector(methodName) name:noteName object:nil];

#define HMRemoveObsver [HMNotificationCenter removeObserver:self];

@interfaceSCUserProfileEntity :NSObject

//通过环信ID去保存昵称和头像url到本地

+ (void)saveUserProfileWithUsername:(NSString*)username forNickName:(NSString*)nickName avatarURLPath:(NSString*)avatarURLPath;

//通过环信ID取本地的昵称

+ (NSString*)getNickNameWithUsername:(NSString*)username;

//通过环信ID取本地的头像url

+ (NSString*)getavatarURLPathWithUsername:(NSString*)username;

//移除本地的头像昵称,清缓存

+ (void)removeUserProfileWithUsername:(NSString*)username;

@implementationSCUserProfileEntity

+ (void)saveUserProfileWithUsername:(NSString*)username forNickName:(NSString*)nickName avatarURLPath:(NSString*)avatarURLPath{

NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];

//设置保存的头像和昵称的key,加上环信ID字段标识

NSString*nickNameKey = [NSStringstringWithFormat:@"username_%@",username];

NSString*avatarURLPathKey = [NSStringstringWithFormat:@"avatarURLPath_%@",username];

[defaultssetObject:nickNameforKey:nickNameKey];

[defaultssetObject:avatarURLPathforKey:avatarURLPathKey];

[defaultssynchronize];

}

+ (NSString*)getNickNameWithUsername:(NSString*)username{

NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];

NSString*nickNameKey = [NSStringstringWithFormat:@"username_%@",username];

return[defaultsobjectForKey:nickNameKey];

}

+ (NSString*)getavatarURLPathWithUsername:(NSString*)username{

NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];

NSString*avatarURLPathKey = [NSStringstringWithFormat:@"avatarURLPath_%@",username];

return[defaultsobjectForKey:avatarURLPathKey];

}

+ (void)removeUserProfileWithUsername:(NSString*)username{

NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];

NSString*nickNameKey = [NSStringstringWithFormat:@"username_%@",username];

NSString*avatarURLPathKey = [NSStringstringWithFormat:@"avatarURLPath_%@",username];

[defaultsremoveObjectForKey:nickNameKey];

[defaultsremoveObjectForKey:avatarURLPathKey];

[defaultssynchronize];

}

1.头像点击方法  messageModel.isSender来判断发送方和接收方

- (void)messageViewController:(EaseMessageViewController*)viewController

didSelectAvatarMessageModel:(id)messageModel

model.avatarURLPath= [SCUserProfileEntitygetavatarURLPathWithUsername:message.from];

用自己写的类去给对应的头像赋值,这里有个问题,如果用户换了头像之后,但是服务器的网址并没有更改,这时是调用缓存来赋值,不能达到实时更新的额效果,需要先清除对应的缓存.

2.设置头像的方法

- (id)messageViewController:(EaseMessageViewController*)viewController

modelForMessage:(EMMessage*)message

使用环信的UI有个主意的地方

chatViewController中[self tableViewDidTriggerHeaderRefresh];要注释掉,父类中已经调用过了.不注释会出现进入聊天的记录出现重复.

获取未读消息时

是需要在获取的页面判断环信的登陆状态的,

其他设备登陆时的回调方法

- (void)didLoginFromOtherDevice

你可能感兴趣的:(环信3.x单聊集成)