Android&iOS&Windows&Mac
Overview
An official account can send broadcast messages to subscribed users and also engage in one-on-one chats with them.
When messages are exchanged, a one-on-one conversation is generated, with the conversationID structured as c2c_officialAccountID.
For management features such as creating an official account, refer to the server APIs. The IMSDK primarily provides functionalities such as subscribing to an official account, unsubscribing from an official account, and retrieving the list of official accounts.
Note:
This feature is supported only by the Enhanced edition on v7.6.5011 or later.
Official Account Profile Class Introduction
Attribute | Definition | Description |
officialAccountID | official account ID | The Official Account ID must be prefixed with @TOA#_, can be customized, and has a maximum length of 48 bytes. |
officialAccountName | official account name | Maximum Length: 150 bytes (UTF-8 encoded, where 1 Chinese character occupies 3 bytes) |
faceUrl | Profile photo of the official account | Maximum Length: 500 bytes |
organization | organization name | Maximum Length: 500 bytes (UTF-8 encoded, where 1 Chinese character occupies 3 bytes) |
introduction | Introduction of the official account | Maximum Length: 400 bytes (UTF-8 encoded, where 1 Chinese character occupies 3 bytes) |
customData | custom data | Maximum Length: 3000 bytes |
createTime | Creation time of the official account | Unit: Seconds |
subscriberCount | The number of subscribed users | The number of active subscribers to the official account |
subscribeTime | The time when the logged-in user subscribed | Unit: Seconds |
Subscribe to an Official Account
To subscribe to an official account, call the subscribeOfficialAccount method (Java / Swift / Objective-C / C++) and pass the officialAccountID as the parameter.
1. Upon successful subscription, subscribers will receive the onOfficialAccountSubscribed callback notification (Java / Swift / Objective-C / C++) .
2. When the subscribed official account's profile is modified via server API, subscribers will receive the onOfficialAccountInfoChanged callback notification (Java / Swift / Objective-C / C++) .
3. When the subscribed official account is deleted via server API, subscribers will receive the onOfficialAccountDeleted callback notification (Java / Swift / Objective-C / C++).
Sample code:
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(@"success");} fail:^(int code, NSString *desc) {NSLog(@"fail, 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);
Unsubscribe from an Official Account
To unsubscribe from an official account, call the unsubscribeOfficialAccount method (Java / Swift / Objective-C / C++) and pass the officialAccountID as the parameter.
After successful unsubscription, the user will receive an onOfficialAccountUnsubscribed callback notification(Java / Swift / Objective-C / C++).
Sample code:
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(@"success");} fail:^(int code, NSString *desc) {NSLog(@"fail, 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);
Get Official Account List
Call the getOfficialAccountsInfo interface (Java / Swift / Objective-C / C++) to retrieve the official account list.
When the officialAccountIDList is empty, it returns the list of subscribed official accounts.
When specific official account IDs are provided in officialAccountIDList, it returns information for those specified accounts.
Sample code:
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:@"success:%@", resultList]];} fail:^(int code, NSString *desc) {[self appendString:[NSString stringWithFormat:@"fail,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);
Official Account Messaging
Official accounts support two types of messages:
1. Broadcast messages - Sent to all subscribers.
2. One-to-one messages - Private conversations between the official account and individual subscribers.
Send Broadcast Messages
Use the server-side broadcast message API to send messages to all subscribers of an official account.
Exchange One-to-One Messages
Subscriber → Official Account:
Use the IMSDK's sendMessage (Java / Swift / Objective-C /C++) with the official account's officialAccountID as the receiver.
Official Account → Subscriber:
From_Account: Official account's officialAccountID
To_Account: Subscriber's userID
Receive Messages