概述
为响应用户对多样内容创作、精准订阅者运营及长期互动的需求,弥补传统即时通讯工具在内容积累与商业服务延伸上的不足,公众号功能应运而生。该功能提供类似微信公众号的核心能力,包括创建和管理公众号,发布图文内容,并可与订阅者进行互动。
功能介绍
公众号主可向订阅者发送推文并可查看其历史推文,用户订阅公众号后自动获取账号更新内容,并可与公众号进行消息互动。
功能适用场景
信息传播 | 品牌推广 | 提供便捷服务 | 本地指引 |
公众号可作为权威信息发布平台,通过图文的形式快速将各类资讯(例如新闻、知识等)传递给大量用户。 | 商家可通过公众号发布品牌故事、产品动态等内容精准触达用户,提升品牌知名度与影响力。 | 公众号可集成高频服务功能,例如在线办理(转账、预约)、信息查询(物流、成绩)等,为订阅者提供便捷服务。 | 公众号可作为周边生活的实用指南,通过图文整合本地化信息,例如“社区周边疫苗接种点”,提高订阅者生活的便利程度。 |
![]() | ![]() | ![]() | ![]() |
公众号搭建形式对比
对比维度 | ||
适用对象 | 有外部商家需求 在同一个 APP/Web 中无法同时登录商家与用户两个身份,需要有一个商家端,一个用户端 | 有外部商家需求 在一个 APP/Web 中可以同时拥有商家与用户两个身份 |
管理功能 (创建/删除/编辑公众号) | 需开发者自行搭建商家管理后台 | 需开发者自行搭建商家管理后台 |
客户端功能 (订阅/取消订阅/获取公众号列表/收发消息) | 自行搭建 | 自行搭建 |
实现方案 | 基于 IM 原生公众号能力 | 基于 IM 社群 |
消息互动 | 广播消息(一对多推文) 单聊消息(一对一私信互动) | 群聊消息(一对多推文) 表情回应(对推文贴 emoji 互动) |
外部商家公众号形式:类微信公众号
如果您有多个外部商家需求,需要开放给 KFC、麦当劳等外部商家,可以参考下述交互示例(需要您结合 IM 基础能力进行 UI 开发)和技术实现方案。
1. 交互示例
类微信公众号的形式中商家账户与用户账户分离,商家可以在商家账户中创建公众号并对公众号进行管理,但不可将商家账户作为用户账户使用。因此,类微信公众号的形式适用于商家端与用户端拆分为两个 App 或将商家端与用户端作为 App 中两种模式切换的客户。您可以参考以下交互示例自行搭建 Web 端与 App 端的交互界面。
1.1 商家 Web 端交互示例
创建、编辑、删除公众号


创建推文


推送、消息互动


1.2 商家 App 端交互示例


1.3 用户交互示例
用户(公众号订阅者)可以在 App 中直接关注公众号并获取其推文,并可实现单聊消息的互动。


2. 实现方案
2.1 管理公众号
2.1.1 创建公众号
2.1.2 编辑公众号
2.1.3 删除公众号
2.2 公众号资料类介绍
属性 | 含义 | 说明 |
officialAccountID | 公众号 ID | |
officialAccountName | 公众号名称 | 最长150字节,使用 UTF-8 编码,1个汉字占3个字节。 |
faceUrl | 公众号展示头像 | 最长500字节。 |
organization | 组织名称 | 最长500字节,使用 UTF-8 编码,1个汉字占3个字节。 |
introduction | 简介 | 最长400字节,使用 UTF-8 编码,1个汉字占3个字节。 |
customData | 自定义数据 | 最长3000字节。 |
createTime | 创建时间 | 单位:秒。 |
subscriberCount | 订阅的人数 | 公众号目前的订阅者人数。 |
subscribeTime | 登录用户订阅的时间 | 单位:秒。 |
2.3 订阅公众号
订阅公众号成功后,订阅者会收到
onOfficialAccountSubscribed(Java / Swift / Objective-C / C++)通知。当调用 服务端接口 修改订阅的公众号资料时,订阅者会收到
onOfficialAccountInfoChanged(Java / Swift / Objective-C / C++)通知。当调用 服务端接口 销毁订阅的公众号资料时,订阅者会收到
onOfficialAccountDeleted(Java / Swift / Objective-C / C++)通知。示例代码如下:
V2TIMManager.getFriendshipManager().subscribeOfficialAccount("official_test", new V2TIMCallback() {@Overridepublic void onSuccess() {// 订阅公众号成功}@Overridepublic void onError(int code, String desc) {// 订阅公众号失败}});V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() {@Overridepublic void onOfficialAccountSubscribed(V2TIMOfficialAccountInfo officialAccountInfo) {// 订阅公众号通知}@Overridepublic void onOfficialAccountDeleted(String officialAccountID) {// 订阅的公众号被销毁通知}@Overridepublic void onOfficialAccountInfoChanged(V2TIMOfficialAccountInfo officialAccountInfo) {// 订阅的公众号资料更新通知}});
V2TIMManager.shared.subscribeOfficialAccount(officialAccountID: "officialAccountID") {print("subscribeOfficialAccount succ")} fail: { code, desc inprint("subscribeOfficialAccount fail, \\(code), \\(desc)")}V2TIMManager.shared.addFriendListener(listener: self)func onOfficialAccountSubscribed(officialAccountInfo: V2TIMOfficialAccountInfo) {print("officialAccountInfo:\\(officialAccountInfo.description)");}func onOfficialAccountDeleted(officialAccountID: String) {print("officialAccountID:\\(officialAccountID)");}func onOfficialAccountInfoChanged(officialAccountInfo: V2TIMOfficialAccountInfo) {print("officialAccountInfo:\\(officialAccountInfo.description)");}
[[V2TIMManager sharedInstance] subscribeOfficialAccount:@"official_test" succ:^ {NSLog(@"订阅公众号成功");} fail:^(int code, NSString *desc) {NSLog(@"订阅公众号失败, code: %d, msg: %@", code, desc);}];[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo {// 公众号订阅通知}- (void)onOfficialAccountDeleted:(NSString *)officialAccountID {// 订阅的公众号被销毁通知}- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo {// 订阅的公众号资料更新通知}
class Callback final : public V2TIMCallback {public:using SuccessCallback = std::function<void()>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;Callback() = default;~Callback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess() override {if (success_callback_) {success_callback_();}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};auto callback = new Callback;callback->SetCallback([=]() {// 订阅公众号成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 订阅公众号失败delete callback;});V2TIMManager::GetInstance()->GetFriendshipManager()->SubscribeOfficialAccount("official_test", callback);// 公众号通知class FriendshipListener final : public V2TIMFriendshipListener {public:FriendshipListener() = default;~FriendshipListener() override = default;void OnOfficialAccountSubscribed(const V2TIMOfficialAccountInfo &info) override {// 公众号订阅通知}void OnOfficialAccountDeleted(const V2TIMString &officialAccountID) override {// 订阅的公众号被销毁通知}void OnOfficialAccountInfoChanged(const V2TIMOfficialAccountInfo &info) override {// 订阅的公众号资料更新通知}};FriendshipListener friendshipListener;V2TIMManager::GetInstance()->AddFriendshipListener(&friendshipListener);
2.4 取消订阅公众号
调用
unsubscribeOfficialAccount(Java / Swift / Objective-C / C++)取消订阅公众号,直接传入公众号的 officialAccountID 即可。示例代码如下:
V2TIMManager.getFriendshipManager().unsubscribeOfficialAccount("official_test", new V2TIMCallback() {@Overridepublic void onSuccess() {// 取消订阅公众号成功}@Overridepublic void onError(int code, String desc) {// 取消订阅公众号失败}});V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() {@Overridepublic void onOfficialAccountUnsubscribed(String officialAccountID) {// 取消订阅公众号通知}});
V2TIMManager.shared.unsubscribeOfficialAccount(officialAccountID: "officialAccountID") {print("unsubscribeOfficialAccount succ")} fail: { code, desc inprint("unsubscribeOfficialAccount fail, \\(code), \\(desc)")}V2TIMManager.shared.addFriendListener(listener: self)func onOfficialAccountUnsubscribed(officialAccountID: String) {print("officialAccountID:\\(officialAccountID)");}
[[V2TIMManager sharedInstance] unsubscribeOfficialAccount:@"official_test" succ:^ {NSLog(@"取消订阅公众号成功");} fail:^(int code, NSString *desc) {NSLog(@"取消订阅公众号失败, code: %d, msg: %@", code, desc);}];[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onOfficialAccountUnsubscribed:(NSString * _Nullable)officialAccountID {// 取消订阅公众号通知}
class Callback final : public V2TIMCallback {public:using SuccessCallback = std::function<void()>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;Callback() = default;~Callback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess() override {if (success_callback_) {success_callback_();}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};auto callback = new Callback;callback->SetCallback([=]() {// 取消订阅公众号成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 取消订阅公众号失败delete callback;});V2TIMManager::GetInstance()->GetFriendshipManager()->UnsubscribeOfficialAccount("official_test", callback);// 公众号通知class FriendshipListener final : public V2TIMFriendshipListener {public:FriendshipListener() = default;~FriendshipListener() override = default;void OnOfficialAccountUnsubscribed(const V2TIMString &officialAccountID) override {// 取消订阅公众号通知}};FriendshipListener friendshipListener;V2TIMManager::GetInstance()->AddFriendshipListener(&friendshipListener);
2.5 获取公众号列表
当
officialAccountIDList 列表为空时,为获取订阅的公众号列表。当
officialAccountIDList 填入指定的公众号 ID 时,为获取填入的公众号列表。示例代码如下:
List<String> officialAccountIDList = new ArrayList<>();V2TIMManager.getFriendshipManager().getOfficialAccountsInfo(officialAccountIDList, new V2TIMValueCallback<List<V2TIMOfficialAccountInfoResult>>() {@Overridepublic void onSuccess(List<V2TIMOfficialAccountInfoResult> v2TIMOfficialAccountInfoResults) {// 获取订阅的公众号列表成功}@Overridepublic void onError(int code, String desc) {// 获取订阅的公众号列表失败}});
V2TIMManager.shared.getOfficialAccountsInfo(officialAccountIDList: ["officialAccountID"]) { officialAccountResultList inofficialAccountResultList.forEach { item inprint(item.description)}} fail: { code, desc inprint("getOfficialAccountsInfo fail, \\(code), \\(desc)")}
[[V2TIMManager sharedInstance] getOfficialAccountsInfo:nil succ:^(NSArray<V2TIMOfficialAccountInfoResult *> *resultList) {[self appendString:[NSString stringWithFormat:@"获取订阅的公众号列表完成:%@", resultList]];} fail:^(int code, NSString *desc) {[self appendString:[NSString stringWithFormat:@"获取订阅的公众号列表失败,code:%d msg:%@",code,desc]];}];
template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public:using SuccessCallback = std::function<void(const T &)>;using ErrorCallback = std::function<void(int, const V2TIMString &)>;ValueCallback() = default;~ValueCallback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess(const T &value) override {if (success_callback_) {success_callback_(value);}}void OnError(int error_code, const V2TIMString &error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};auto callback = new ValueCallback<V2TIMOfficialAccountInfoResultVector>{};callback->SetCallback([=](const V2TIMOfficialAccountInfoResultVector& officialAccountInfoResultList) {// 获取订阅的公众号列表成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 获取订阅的公众号列表失败delete callback;});V2TIMManager::GetInstance()->GetFriendshipManager()->GetOfficialAccountsInfo(officialAccountIDList, callback);
2.6 公众号收发消息
2.6.1 公众号发送广播消息
2.6.2 公众号与订阅者互发单聊消息
订阅者发给公众号:
调用 发送消息 的
sendMessage(Java / Swift / Objective-C / C++)接口发送给公众号消息,其中 receiver 填公众号 officialAccountID。公众号发给订阅者:
From_Account 填公众号
officialAccountID。To_Account 填订阅者
userID。2.6.3 接收消息
外部商家公众号形式:类 WhatsApp channel
如果您有多个外部商家需求,需要开放给 KFC、麦当劳等外部商家,可以参考下述交互示例(需要您结合 IM 基础能力进行 UI 开发)和技术实现方案。
1. 交互示例
类 WhatsApp channel 通过群聊的形式实现公众号消息发送,用户加群就是订阅公众号,支持一个公众号100万订阅者,公众号主与管理员能够在公众号中发送群聊消息,普通用户仅能接收群聊消息,但可对消息进行 Emoji 回复。使用 会话分组 可以将 App 中的 Chat 与公众号进行区分,默认公众号上限为1000个(会话分组上限),如果想要创建更多公众号,请 联系我们。该模式适用于商家端和 C 端在同一个 App/Web 上用的客户,您可参考以下交互示例自行搭建 Web 端与 App 端的交互界面。
1.1 商家 Web 端交互示例
创建、编辑公众号


创建推文


1.2 商家 App 端交互示例


1.3 用户交互示例
用户(公众号订阅者)可以在 App 中直接关注公众号并获取其推文,并且能够通过 Emoji 表情回应的方式互动。


2. 实现方案
2.1 创建公众号
2.2 订阅公众号
订阅公众号即 加入社群,加入后如果想将公众号(特定的社群)和普通单聊群聊的未读计数分开展示,可以调用新建会话分组 createConversationGroup 将公众号会话(特定的社群),通过
addConversationsToGroup 添加到公众号分组。2.3 取消订阅公众号
2.4 获取公众号列表
通过调用 getJoinedGroupList 获取公众号列表,获取所有加入过的社群列表后,调用 getGroupsInfo 查询群资料中的群自定义字段是否有公众号的标记,从而获得用户加入的公众号(社群)列表。



