轻聊 iOS

Home PDF

这是从 github 项目 https://github.com/lzwjava/leanchat-ios 的 README.md。


许可证 MIT  CocoaPods  CocoaPods  支持

leanchat

应用商店

LeanChat 可在应用商店获得。您可以访问 https://itunes.apple.com/gb/app/leanchat/id943324553 或在应用商店中搜索 LeanChat。

引言

该示例项目全面展示了 LeanCloud 的实时通信功能的应用。然而,它包含大量的 UI 代码和其他功能,不适合快速学习。如果您是 LeanMessage 的新手,我们推荐 LeanMessage-Demo 项目。熟悉后,您可以访问 LeanCloud-Demos 选择您喜欢的 IM 外观进行集成。在集成过程中,如果遇到困难,可以参考 LeanChat 项目。

LeanChat 项目结构

有价值的反馈

如果有任何问题,请随时提交一个 issue,说明您不理解的内容,我们会尽快提供帮助。

下载

请直接点击 Github 上显示的 Download Zip 图标下载最新版本。如果使用 git clone,可能会非常慢,因为它包含了大量的提交历史。在测试中,差异为:1.5M:40M。

qq20150618-2 2x

运行

  // LeanChat (复杂示例)
  cd LeanChat
  pod install --verbose  // 如果本地有 AVOSCloud 依赖库,可以添加 --no-repo-update 选项以加速过程
  open LeanChat.workspace

  // LeanChatExample (简单示例)
  cd LeanChatExample
  pod install --verbose --no-repo-update
  open LeanChatExample.xcworkspace

  // LeanChatSwift (Swift 示例)
  cd LeanChatSwift
  pod install --verbose --no-repo-update
  open LeanChatSwift.xcworkspace

  // LeanChatLib (封装 LeanCloud 通信组件和 UI 的库)
  cd LeanChatLib
  pod install --verbose --no-repo-update
  open LeanChatLib.xcworkspace

如果遇到类似于 definition of 'AVUser' must be imported from module 'LeanChatLib.CDChatListVC' before it is required 的问题,可以按住 Option 键,在 Produce 菜单中点击 Clean Build Folder 清除所有构建文件,然后重新编译。这个问题似乎是 CocoaPods 在执行复杂编译时的一个错误。可以查看此 Gif 以获取更多详细信息。

请注意,由于默认使用生产证书,开发过程中离线消息不会有推送通知。然而,在线版本可以通过 App Store 下载,它提供推送通知。有关更多详细信息,可以参考此 issue

子项目介绍

LeanChatLib 介绍

它封装了最近会话页面和聊天页面。LeanChat 和 LeanChatExample 项目都依赖于它。可以按照以下方法安装,

    pod 'LeanChatLib'

大多数时候,您会通过将源代码拖入项目来集成 LeanChatLib。在这种情况下,您需要先安装 AVOSCloud.frameworkAVOSCloudIM.framework。如果没有使用 pod install 'AVOSCloud'pod install 'AVOSCloudIM' 进行安装,可以根据 LeanCloud 快速上手指南 配置所需的 Frameworks。还需要安装其他两个依赖库 JSBadgeViewDateTools。在运行 pod install 以安装此示例时,将生成一个 Pods 目录,其中可以找到这两个 Pods。或者,可以在 .podspec 文件 中进行配置,描述需要集成的源文件和需要引入的系统框架等。或者,请参考此 票据

如何在三步中添加 IM

  1. 创建一个 LeanCloud 应用。
  2. 添加 LeanChatLib pod 依赖,或者将 LeanChatLib 代码文件拖入您的项目中,以便更容易地进行 UI 定制和功能调整。
  3. 在适当的地方添加以下代码,

在应用启动时初始化和配置 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); // 不要忘记它
}

-(id<CDUserModel>)getUserById:(NSString *)userId{
    CDUser* user=[[CDUser alloc] init];
    user.userId=userId;
    user.username=userId;
    user.avatarUrl=@"http://ac-x3o016bx.clouddn.com/86O7RAPx2BtTW5zgZTPGNwH9RZD5vNDtPm1YbIcu";
    return user;
}

@end

这里,CDUser 是应用程序中的用户对象,并且您可以在用户对象中实现 CDUserModel 协议。

CDUserModel,

@protocol CDUserModel <NSObject>

@required

-(NSString*)userId;

-(NSString*)avatarUrl;

-(NSString*)username;

@end

在登录时调用,

        [[CDChatManager manager] openWithClientId:selfId callback: ^(BOOL succeeded, NSError *error) {
            if (error) {
                DLog(@"%@", error);
            }
            else {
               //go Main Controller
            }
        }];

与某人聊天,

        [[CDChatManager manager] fetchConvWithOtherId : otherId callback : ^(AVIMConversation *conversation, NSError *error) {
            if (error) {
                DLog(@"%@", error);
            }
            else {
                LCEChatRoomVC *chatRoomVC = [[LCEChatRoomVC alloc] initWithConv:conversation];
                [weakSelf.navigationController pushViewController:chatRoomVC animated:YES];
            }
        }];

进行群聊,

        NSMutableArray *memberIds = [NSMutableArray array];
        [memberIds addObject:groupId1];
        [memberIds addObject:groupId2];
        [memberIds addObject:[CDChatManager manager].selfId];
        [[CDChatManager manager] fetchConvWithMembers:memberIds callback: ^(AVIMConversation *conversation, NSError *error) {
            if (error) {
                DLog(@"%@", error);
            }
            else {
                LCEChatRoomVC *chatRoomVC = [[LCEChatRoomVC alloc] initWithConv:conversation];
                [weakSelf.navigationController pushViewController:chatRoomVC animated:YES];
            }
        }];

在注销时,

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

    }];

然后,您就可以像截图中所示那样聊天。请注意,我们目前不推荐使用 pod 方法直接导入 LeanChatLib,因为有些接口和功能需要您进行自定义。因此,我们建议将 LeanChatLib 代码复制到项目中,以便更容易进行定制。


Back 2025.02.22 Donate