一、功能描述
公众号的创建等管理功能参考服务端的接口,IMSDK 主要提供订阅公众号、取消订阅公众号、获取公众号列表等功能。
注意:说明:
注意:从 7.6.5011 版本开始支持。
二、公众号资料类介绍
| 属性 | 含义 | 说明 |
| officialAccountID | 公众号 ID | 以 @TOA#_ 作为前缀,最长48个字节,可自定义公众号 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 | 登录用户订阅的时间 | 单位:秒 |
三、订阅公众号
调用 subscribeOfficialAccount (Java / Swift / Objective-C / C++) 订阅公众号,直接传入公众号的 officialAccountID 即可。
1. 订阅公众号成功后,订阅者会收到 onOfficialAccountSubscribed (Java / Swift / Objective-C / C++) 通知。
2. 当调用 服务端接口 修改订阅的公众号资料时,订阅者会收到 onOfficialAccountInfoChanged (Java / Swift / Objective-C / C++) 通知。
3. 当调用 服务端接口 销毁订阅的公众号资料时,订阅者会收到 onOfficialAccountDeleted (Java / Swift / Objective-C / C++) 通知。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getFriendshipManager().subscribeOfficialAccount("official_test", new V2TIMCallback() { @Override public void onSuccess() { // 订阅公众号成功 } @Override public void onError(int code, String desc) { // 订阅公众号失败 }});V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() { @Override public void onOfficialAccountSubscribed(V2TIMOfficialAccountInfo officialAccountInfo) { // 订阅公众号通知 } @Override public void onOfficialAccountDeleted(String officialAccountID) { // 订阅的公众号被销毁通知 } @Override public void onOfficialAccountInfoChanged(V2TIMOfficialAccountInfo officialAccountInfo) { // 订阅的公众号资料更新通知 }});V2TIMManager.shared.subscribeOfficialAccount(officialAccountID: "officialAccountID") { print("subscribeOfficialAccount succ")} fail: { code, desc in print("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, msg);}];[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onOfficialAccountSubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo { // 公众号订阅通知}- (void)onOfficialAccountDeleted:(NSString *)officialAccountID { // 订阅的公众号被销毁通知}- (void)onOfficialAccountInfoChanged:(V2TIMOfficialAccountInfo *)officialAccountInfo { // 订阅的公众号资料更新通知}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 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);
四、取消订阅公众号
调用 unsubscribeOfficialAccount (Java / Swift / Objective-C / C++) 订阅公众号,直接传入公众号的 officialAccountID 即可。
取消订阅公众号成功后,取消订阅的用户会收到 onOfficialAccountUnsubscribed (Java / Swift / Objective-C / C++) 通知。
示例代码如下:
JavaSwiftObjective-CC++V2TIMManager.getFriendshipManager().unsubscribeOfficialAccount("official_test", new V2TIMCallback() { @Override public void onSuccess() { // 取消订阅公众号成功 } @Override public void onError(int code, String desc) { // 取消订阅公众号失败 } });V2TIMManager.getFriendshipManager().addFriendListener(new V2TIMFriendshipListener() { @Override public void onOfficialAccountUnsubscribed(String officialAccountID) { // 取消订阅公众号通知 }});V2TIMManager.shared.unsubscribeOfficialAccount(officialAccountID: "officialAccountID") { print("unsubscribeOfficialAccount succ")} fail: { code, desc in print("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, msg);}];[[V2TIMManager sharedInstance] addFriendListener:self];- (void)onOfficialAccountUnsubscribed:(V2TIMOfficialAccountInfo *)officialAccountInfo { // 取消订阅公众号通知}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 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);
五、获取公众号列表
调用 getOfficialAccountsInfo (Java / Swift / Objective-C / C++) 接口获取公众号列表。
·当 officialAccountIDList 列表为空时,为获取订阅的公众号列表;
·当 officialAccountIDList 填入指定的公众号 ID 时,为获取填入的公众号列表。
示例代码如下:
JavaSwiftObjective-CC++List<String> officialAccountIDList = new ArrayList<>();V2TIMManager.getFriendshipManager().getOfficialAccountsInfo(officialAccountIDList, new V2TIMValueCallback<List<V2TIMOfficialAccountInfoResult>>() { @Override public void onSuccess(List<V2TIMOfficialAccountInfoResult> v2TIMOfficialAccountInfoResults) { // 获取订阅的公众号列表成功 } @Override public void onError(int code, String desc) { // 获取订阅的公众号列表失败 }});V2TIMManager.shared.getOfficialAccountsInfo(officialAccountIDList: ["officialAccountID"]) { officialAccountResultList in officialAccountResultList.forEach { item in print(item.description) } } fail: { code, desc in print("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_;};V2TIMStringVector officialAccountIDList;auto callback = new ValueCallback<V2TIMTopicInfoResultVector>{};callback->SetCallback( [=](const V2TIMOfficialAccountInfoResultVector& officialAccountInfoResultList) { // 获取订阅的公众号列表成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 获取订阅的公众号列表失败 delete callback; });V2TIMManager::GetInstance()->GetFriendshipManager()->GetOfficialAccountsInfo( officialAccountIDList, callback);
六、公众号收发消息
公众号的消息分为:公众号给所有订阅者发送的广播消息和公众号与某一个订阅者之间的单聊消息。
七、公众号发送广播消息
调用 服务端公众号发送广播消息接口 可以向关注公众号的所有订阅者发送广播消息。
八、公众号与订阅者互发单聊消息
调用 IMSDK 的 sendMessage (Java / Swift / Objective-C / C++) 接口发送给公众号消息,其中 receiver 填公众号 officialAccountID。
调用 服务端发送单聊消息接口 向该订阅者发送单聊消息,其中 From_Account 填公众号 officialAccountID,To_Account 填订阅者 userID。
九、接收消息
两种消息都可以通过 IMSDK 的 消息监听器 来接收。