您的位置:首页 > 其它

leancloud快速即成即时通讯

2016-02-21 20:34 281 查看
本文将教你如何在iOS端快速即成即时通讯:步骤如下

1 集成leancloud即时通讯开发环境

2.使用官方demo所使用的UI框架,实现即时通讯

1使用leancloud所使用的IM框架

只需在podfile文件中添加

pod 'AVOSCloudIM'


2使用官方demo所使用的UI框架

以下都是参照https://github.com/leancloud/leanchat-ios

加入 LeanChatLib 的 pod 依赖,或拖动 LeanChatLib 的代码文件进项目,改 UI 和调整功能方便些

在podfile文件中添加

pod 'LeanChatLib'


依次在合适的地方加入以下代码:

应用启动后,初始化,以及配置 IM

[AVOSCloud setApplicationId:@"YourAppId" clientKey:@"YourAppKey"];
[CDChatManager manager].userDelegate = [[CDUserFactory alloc] init];


配置一个 UserFactory,遵守 CDUserDelegate协议即可。

#import "CDUserFactory.h"

#import <LeanChatLib/LeanChatLib.h>

@interface CDUserFactory ()<CDUserDelegate>

@end

@implementation CDUserFactory

#pragma mark - CDUserDelegate
- (void)cacheUserByIds:(NSSet *)userIds block:(AVIMArrayResultBlock)block{
block(nil,nil); // don't forget it
}
//这里的username avatarurl可以根据你项目的需求去改变
- (id<CDUserModelDelegate>)getUserById:(NSString *)userId {
CDUser *user = [[CDUser alloc] init];
user.userId = userId;
user.username = userId;
user.avatarUrl = @"http://image17-c.poco.cn/mypoco/myphoto/20151211/16/17338872420151211164742047.png";
return user;
}

@end


CDUser定义如下

@interface CDUser : NSObject <CDUserModelDelegate>

@property (nonatomic, strong) NSString *userId;

@property (nonatomic, strong) NSString *username;

@property (nonatomic, strong) NSString *avatarUrl;

@end


你也可以使用你的 User 对象,只要user对象实现 CDUserModelDelegate 协议即可。

CDUserModelDelegate 协议内容如下

@protocol CDUserModelDelegate <NSObject>

@required

- (NSString*)userId;

- (NSString*)avatarUrl;

- (NSString*)username;

@end


用户登录时(推荐在appdelegate中登陆)

[[CDChatManager manager] openWithClientId:selfId callback: ^(BOOL succeeded, NSError *error) {
if (error) {
DLog(@"%@", error);
}
else {
//登录成功
}
}];


获取对话列表(只要你的ViewController继承了CDChatListVC即可)

效果图



h文件

#import <LeanChatLib/LeanChatLib.h>
@interface ConversationListViewController : CDChatListVC  <CDChatListVCDelegate>
@end


m文件

#import "ConversationListViewController.h"

@implementation ConversationListViewController

- (instancetype)init {
self = [super init];
if (self) {
self.title = @"消息";
self.chatListDelegate = self;
}
return self;
}

//点击某个对话时
- (void)viewController:(UIViewController *)viewController didSelectConv:(AVIMConversation *)conv {
if (!conv) {
}
else {
CDChatRoomVC *detail = [[CDChatRoomVC alloc]initWithConversation:conv];
[self.navigationController pushViewController:detail animated:YES];
}
}
//为读消息数
- (void)setBadgeWithTotalUnreadCount:(NSInteger)totalUnreadCount {
UITabBarController *tabBar =(UITabBarController *) self.parentViewController.parentViewController;
//假如当前未读消息数大于0而且当前所在的页面不是聊天消息列表页面
if (totalUnreadCount > 0 && tabBar.selectedIndex != 1) {
//假如消息数大于99,则显示为99条
if (totalUnreadCount > 99) {
self.parentViewController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d", 99];
}else{
self.parentViewController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%ld", (long)totalUnreadCount];
}
}
else {
//提示消息为0
self.parentViewController.tabBarItem.badgeValue = nil;
}
}

@end


对话详情页面

效果图



直接使用UI框架中的CDChatRoomVC即可


发起和某人聊天时调用

//首先查看是否已经存在与对方的对话,如果存在的话,就获取到以前的对话,不存在的话则发起一个新的对话
[[CDChatManager manager]fetchConversationWithOtherId:self.user.userName callback:^(AVIMConversation *conversation, NSError *error) {
if (conversation) {
//这里的CDChatRoomVC 是聊天详情页面(这里可以使用自己的类,只要继承了CDChatRoomVC就可以了)
CDChatRoomVC *detail = [[CDChatRoomVC alloc]initWithConversation:conversation];
[self.navigationController pushViewController:detail animated:YES];
}else{
[ [AVIMClient defaultClient] createConversationWithName:@"当前对话的名称" clientIds:@[self.user.userName] callback:^(AVIMConversation *conversation, NSError *error) {
CDChatRoomVC *detail = [[CDChatRoomVC alloc]initWithConversation:conversation];
[self.navigationController pushViewController:detail animated:YES];

}];
}
chatButton.enabled = YES;
}];


注销时调用

[[CDChatManager manager] closeWithCallback: ^(BOOL succeeded, NSError *error) {

}];


以上代码基本上就可以实现一个即时通讯的功能了, 但是这样暂时还没法用 leancloud实现消息推送,以后 补上!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: