leancloud快速即成即时通讯
2016-02-21 20:34
281 查看
本文将教你如何在iOS端快速即成即时通讯:步骤如下
1 集成leancloud即时通讯开发环境
2.使用官方demo所使用的UI框架,实现即时通讯
加入 LeanChatLib 的 pod 依赖,或拖动 LeanChatLib 的代码文件进项目,改 UI 和调整功能方便些
在podfile文件中添加
依次在合适的地方加入以下代码:
应用启动后,初始化,以及配置 IM
配置一个 UserFactory,遵守 CDUserDelegate协议即可。
CDUser定义如下
你也可以使用你的 User 对象,只要user对象实现 CDUserModelDelegate 协议即可。
CDUserModelDelegate 协议内容如下
h文件
m文件
发起和某人聊天时调用
以上代码基本上就可以实现一个即时通讯的功能了, 但是这样暂时还没法用 leancloud实现消息推送,以后 补上!
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实现消息推送,以后 补上!
相关文章推荐
- CodeForces 624D Array GCD
- 面试
- C# Winform实现数据的导出为txt或者CSV或者excel格式
- #Android学习#onActivityResult直接回调问题
- MyEclipse配色字体等配置的解决方案
- Myeclipse破解
- 函数声明
- 调整Xcode源码编辑器字体大小
- 基础练习 高精度加法
- Jesen不等式
- 断言机制assert_param的使用
- Windows的背景图片目录
- linux下“tar”命令小结
- 不一样的大年初五
- 使用mapreduce计算环比的实例
- 统计Oracle数据库文件的大小
- 如何在Ubuntu下启动Apache的Rewrite功能
- Android中Activity启动模式全面解析
- <LeetCode><Medium> 120 Triangle #维特比译码变形
- 使用httpClient联网请求数据