跳到主要内容

贴纸消息

在 Global IM UIKit 会话页面的内容输入框中包含一个的贴纸按钮,用于展开贴纸面板。如果不需要贴纸功能,可隐藏该按钮。

用法

重要

Global IM UIKit 默认只提供贴纸展示的面板,贴纸资源需要由应用程序提供给 Global IM UIKit。

贴纸按钮由 RCChatViewControllerinputBar.stickerButton 控制,默认展示。

(width=250)

贴纸面板在 由 RCChatViewControllerinputBar.stickerBoardView 控制,点击贴纸按钮后会展示应用层提供的贴纸资源,用户可以点击发送贴纸消息。

(width=250)

添加贴纸包

应用程序可以使用以下两种方式在会话页面贴纸面板中添加添加自定义贴纸。

通过本地路径增加贴纸包

通过本地路径增加贴纸包 JSON 文件。

格式如下:

{
"stickerPackage": {
"packageId": "c60plBGwk2686yv4vmv4H9",
"icon": "base64Str"
},
"stickers": [
{
"stickerId": "d1PN1xTZ47p9nfMNWfGpyH",
"height": 240,
"width": 240,
"icon": "base64Str"
},
{
"stickerId": "euV-LiASA9Nax4eeRgVCbW",
"height": 240,
"width": 240,
"icon": "base64Str"
}
]
}
参数类型说明
packageId字符串贴纸包的唯一标识
stickerId字符串贴纸的唯一标识
icon字符串缩略图的 base64 字符串

RCInputBar 的属性 stickerBoardView 是贴纸面板,通过贴纸面板的方法 addPackagesWithJSONFilePaths: 加载贴纸包 json 文件,需要在会话页面 viewDidLoad 中调用

- (void)viewDidLoad {
[super viewDidLoad];

NSString *path = [[NSBundle mainBundle] pathForResource:@"rong_sticker" ofType:@".json"];
if (path) {
[self.inputBar.stickerBoardView addPackagesWithJSONFilePaths:@[path]];
}
}

通过代理提供贴纸包

设置贴纸代理

- (void)viewDidLoad {
[super viewDidLoad];

self.inputBar.stickerBoardView.dataSource = self;
}

实现贴纸代理方法:

#pragma mark - RCStickerDataSource -

- (void)willDisplayStickerPackageList:(void (^)(NSArray<RCStickerPackage *> * packages))completion {
/// 返回贴纸包列表
NSArray *packagelist;
completion(packagelist);
}

展示贴纸消息

贴纸消息是 RCStickerMessage,消息类型标识是 RC:StkMsg

@interface RCStickerMessage : RCMessageContent

/// 贴纸包 id
@property (nonatomic, strong) NSString *packageId;

/// 贴纸 id
@property (nonatomic, strong) NSString *stickerId;

/// 贴纸缩略图
@property (nonatomic, strong) UIImage *thumbnailImage;

/// 贴纸的宽
@property (nonatomic, assign) int width;

/// 贴纸的高
@property (nonatomic, assign) int height;

在展示贴纸消息时,优先展示贴纸缩略图 thumbnailImage,然后通过 RCStickerDataSource 代理向 Global IM UIKit 提供将要展示的贴纸原图的本地路径,Global IM UIKit 拿到贴纸原图的本地路径自动刷新展示。

#pragma mark - RCStickerDataSource -

- (void)willDisplayStickerWithPackageId:(NSString *)packageId stickerId:(NSString *)stickerId completion:(void (^)(NSString * localPath))completion {
[[TestDefaultStickerManager shareDownloader] downloadWithURLString:packageId stickerId:stickerId progress:nil success:completion error:nil];
}

隐藏贴纸按钮

贴纸按钮:

@interface RCInputBar : UIView
/// 输入框贴纸按钮
@property (nonatomic, strong) UIButton *stickerButton;
@end

代码示例:

- (void)viewDidLoad {
[super viewDidLoad];
/// 移除贴纸按钮
[self.inputBar.stickerButton removeFromSuperview];
/// 重设 textView inset
UIEdgeInsets inset = self.inputBar.textView.textContainerInset;
inset.right = 0;
self.inputBar.textView.textContainerInset = inset;
}