由于最近项目的需求,正好要做一款涉及聊天的APP,所以优先考虑到了ChatKit这款强大的开源组件,同时它提供完全自由的授权协议,支持二次开发。但是通过看官方的文档,发现它在其中集成了很多的胶水函数,在我真正实现起来还是有很多不容易的地方。
所以在这里我把整个流程框架和一些基础点列出来,也算对项目过程的一个小总结。
可以在这里获取组件Demo:git clone –depth=1 https://github.com/leancloud/ChatKit-OC
页面效果:
大概步骤:
1.通过CocoaPods导入 ‘ChatKit’ (导入过程就不再涉及了,很简单)
2.胶水函数快速集成:
ChatKit 提供了一个快速集成的演示类 LCChatKitExample,其中集成了打量的胶水函数,使用 LCChatKitExample 提供的函数即可完成从程序启动到登录再到登出的完整流程。
<1>在 AppDeledate中调用下面这几个基础的入口胶水函数,可完成初步的集成:/*!
* 入口胶水函数:初始化入口函数
*
* 程序完成启动,在 appdelegate 中的 -[AppDelegate didFinishLaunchingWithOptions:]
一开始的地方调用.
*/
+ (void)invokeThisMethodInDidFinishLaunching;
/*!
* Invoke this method in -[AppDelegate appDelegate:didRegisterForRemoteNotificationsWithDeviceToken:]
.
*/
+ (void)invokeThisMethodInDidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
/*!
* invoke This Method In -[AppDelegate application:didReceiveRemoteNotification:]
*/
+ (void)invokeThisMethodInApplication:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo ;
/*!
* 入口胶水函数:登入入口函数
*
* 用户即将退出登录时调用
*/
+ (void)invokeThisMethodAfterLoginSuccessWithClientId:(NSString *)clientId success:(LCCKVoidBlock)success failed:(LCCKErrorBlock)failed;
/*!
* 入口胶水函数:登出入口函数
*
* 用户即将退出登录时调用
*/
+ (void)invokeThisMethodBeforeLogoutSuccess:(LCCKVoidBlock)success failed:(LCCKErrorBlock)failed;
+ (void)invokeThisMethodInApplicationWillResignActive:(UIApplication *)application;
+ (void)invokeThisMethodInApplicationWillTerminate:(UIApplication *)application;
3.最近联系人界面的初始化:LCCKConversationListViewController *firstViewController = [[LCCKConversationListViewController alloc] init];
4.由最近联系人进入聊天界面(示例代码如下):
[[LCChatKit sharedInstance] setDidSelectConversationsListCellBlock:^(NSIndexPath *indexPath, AVIMConversation *conversation, LCCKConversationListViewController *controller) {
NSLog(@”conversation selected”);
LCCKConversationViewController *conversationVC = [[LCCKConversationViewController alloc] initWithConversationId:conversation.conversationId];
[controller.navigationController pushViewController:conversationVC animated:YES];
}];
5.聊天界面初始化:
// 用于单聊,默认会创建一个只包含两个成员的 unique 对话(如果已经存在则直接进入,不会重复创建)
LCCKConversationViewController *conversationViewController = [[LCCKConversationViewController alloc] initWithPeerId:peerId];
6对话详情页面简单处理:
typedef void(^LCCKBarButtonItemActionBlock)(void);
typedef NS_ENUM(NSInteger, LCCKBarButtonItemStyle) {
LCCKBarButtonItemStyleSetting = 0,
LCCKBarButtonItemStyleMore,
LCCKBarButtonItemStyleAdd,
LCCKBarButtonItemStyleAddFriends,
LCCKBarButtonItemStyleShare,
LCCKBarButtonItemStyleSingleProfile,
LCCKBarButtonItemStyleGroupProfile,
};
- (void)configureBarButtonItemStyle:(LCCKBarButtonItemStyle)style action:(LCCKBarButtonItemActionBlock)action;
总结:整个流程虽然看起来很简单,但是当你真正去入手时就会发现并非如此;当然,以上的环节也难免有错误和不合理之处,希望大家多多指教。