tencent cloud

文档反馈

Android&iOS&Windows&Mac

最后更新时间:2023-09-11 17:33:22

    功能描述

    用户可以查询自己、好友、非好友的信息;可以修改自己的昵称、头像、签名等信息;可以修改好友的备注、分组等信息。 相关方法在核心类 V2TIMManagerV2TIMFriendshipManager(Android) / V2TIMManager(Friendship)(iOS & Mac) 中。

    关系链事件监听器

    您可以调用 addFriendListener (Android / iOS & Mac / Windows) 添加关系链事件监听器。
    当不想再接收关系链事件时,可调用 removeFriendListener (Android / iOS & Mac / Windows) 移除关系链事件监听器。
    注意
    只有预先设置好关系链事件监听器,才能正常接收到下文中的各种事件通知。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 添加关系链监听器
    V2TIMManager.getFriendshipManager().addFriendListener(listener);
    // 移除关系链监听器
    V2TIMManager.getFriendshipManager().removeFriendListener(listener);
    // 添加关系链监听器
    // self 为 id<V2TIMFriendshipListener>
    [[V2TIMManager sharedInstance] addFriendListener:self];
    
    // 移除关系链监听器
    [[V2TIMManager sharedInstance] removeFriendListener:self];
    class FriendshipListener final : public V2TIMFriendshipListener {
    // 成员 ...
    };
    
    // 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调
    FriendshipListener friendshipListener;
    V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);
    
    // 移除关系链监听器
    V2TIMManager::GetInstance()->GetFriendshipManager()->RemoveFriendListener(&friendshipListener);

    查询和修改用户资料

    查询和修改自己的资料

    您可以调用 getUsersInfo (Android / iOS & Mac / Windows) 接口查询个人资料,其中参数 userIDList 需填入自己的 UserID。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 获取个人资料
    String loginUser = V2TIMManager.getInstance().getLoginUser();
    List<String> userIDList = new ArrayList<>();
    userIDList.add(loginUser);
    V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
    @Override
    public void onSuccess(List<V2TIMUserFullInfo> profiles) {
    // 获取个人资料成功
    }
    @Override
    public void onError(int code, String desc) {
    // 获取个人资料失败
    }
    });
    // 获取个人资料
    NSString *loginUser = [[V2TIMManager sharedInstance] getLoginUser];
    [[V2TIMManager sharedInstance] getUsersInfo:@[loginUser] succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
    // 获取个人资料成功
    } fail:^(int code, NSString *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_;
    };
    
    V2TIMString loginUser = V2TIMManager::GetInstance()->GetLoginUser();
    V2TIMStringVector userIDList;
    userIDList.PushBack(loginUser);
    
    auto callback = new ValueCallback<V2TIMUserFullInfoVector>{};
    callback->SetCallback(
    [=](const V2TIMUserFullInfoVector& userFullInfoList) {
    // 获取个人资料成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 获取个人资料失败
    delete callback;
    });
    
    V2TIMManager::GetInstance()->GetUsersInfo(userIDList, callback);
    您可以调用 setSelfInfo (Android / iOS & Mac / Windows) 接口修改个人资料。 个人资料包括昵称、头像、签名、性别、出生日期、好友验证方式等,详情可参考 V2TIMUserFullInfo(Android / iOS & Mac / Windows) 类定义。 资料修改成功后,您会收到 onSelfInfoUpdated (Android / iOS & Mac / Windows) 回调。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    // 设置个人资料
    V2TIMUserFullInfo info = new V2TIMUserFullInfo();
    info.setNickname("nickName");
    info.setFaceUrl("faceUrl");
    V2TIMManager.getInstance().setSelfInfo(info, new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 设置个人资料成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 设置个人资料失败
    }
    });
    
    // 监听个人资料变更回调
    V2TIMManager.getInstance().addIMSDKListener(new V2TIMSDKListener() {
    @Override
    public void onSelfInfoUpdated(V2TIMUserFullInfo info) {
    // 收到个人资料变更回调
    }
    });
    // 设置个人资料
    V2TIMUserFullInfo *info = [[V2TIMUserFullInfo alloc] init];
    info.nickName = @"nickName";
    info.faceURL = @"faceURL";
    [[V2TIMManager sharedInstance] setSelfInfo:info succ:^{
    // 设置个人资料成功
    } fail:^(int code, NSString *desc) {
    // 设置个人资料失败
    }];
    
    // 监听个人资料变更回调
    [[V2TIMManager sharedInstance] addIMSDKListener:self];
    - (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)Info {
    // 收到个人资料变更回调
    }
    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_;
    };
    
    V2TIMUserFullInfo info;
    info.nickName = u8"nickName";
    info.faceURL = u8"faceUrl";
    info.modifyFlag = V2TIMUserInfoModifyFlag::V2TIM_USER_INFO_MODIFY_FLAG_NICK |
    V2TIMUserInfoModifyFlag::V2TIM_USER_INFO_MODIFY_FLAG_FACE_URL;
    
    auto callback = new Callback{};
    callback->SetCallback(
    [=]() {
    // 设置个人资料成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 设置个人资料失败
    delete callback;
    });
    
    V2TIMManager::GetInstance()->SetSelfInfo(info, callback);
    
    // 监听个人资料变更回调
    class SDKListener final : public V2TIMSDKListener {
    public:
    SDKListener() = default;
    ~SDKListener() override = default;
    
    void OnSelfInfoUpdated(const V2TIMUserFullInfo& info) override {
    // 收到个人资料变更回调
    }
    // 其他成员 ...
    };
    // 添加事件监听器,注意在移除监听器之前需要保持 sdkListener 的生命期,以免接收不到事件回调
    SDKListener sdkListener;
    V2TIMManager::GetInstance()->AddSDKListener(&sdkListener);

    查询和修改好友资料

    您可以调用 getFriendsInfo (Android / iOS & Mac / Windows) 接口查询指定的好友资料,调用 setFriendInfo(Android / iOS & Mac / Windows) 接口修改好友资料。详情请参考 好友管理

    查询非好友用户资料

    您可以调用 getUsersInfo (Android / iOS & Mac / Windows) 接口查询非好友资料,其中参数 userIDList 填入非好友的 UserID 即可。
    说明
    1. 不能修改非好友的资料。
    2. 非好友资料更新时,由于没有好友关系,后台无法向 SDK 发送系统通知,因此 SDK 无法实时更新非好友资料。为了避免每次获取用户资料都向后台发起网络请求,节省网络资源,SDK 增加了缓存逻辑,对同一个用户主动向后台拉取资料的时间间隔为 10 分钟。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> userIDList = new ArrayList<>();
    userIDList.add("userA");
    V2TIMManager.getInstance().getUsersInfo(userIDList, new V2TIMValueCallback<List<V2TIMUserFullInfo>>() {
    @Override
    public void onSuccess(List<V2TIMUserFullInfo> profiles) {
    // 获取非好友资料成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 获取非好友资料失败
    }
    });
    // 获取非好友资料
    [[V2TIMManager sharedInstance] getUsersInfo:@[@"userA"] succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
    // 获取非好友资料成功
    } fail:^(int code, NSString *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 userIDList;
    userIDList.PushBack(u8"userA");
    
    auto callback = new ValueCallback<V2TIMUserFullInfoVector>{};
    callback->SetCallback(
    [=](const V2TIMUserFullInfoVector& userFullInfoList) {
    // 获取非好友资料成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 获取非好友资料失败
    delete callback;
    });
    
    V2TIMManager::GetInstance()->GetUsersInfo(userIDList, callback);

    订阅非好友用户资料

    您可以调用接口subscribeUserInfo (Android / iOS & Mac / Windows) 来订阅非好友用户的资料,订阅成功后,当被订阅的非好友用户资料发生变更时,IM SDK 会通过 onUserInfoChanged (Android / iOS & Mac / Windows) 回调通知给您。
    通过订阅非好友用户资料,您可以实时感知某些非好友用户资料的变更
    说明:
    该功能仅对进阶版客户开放,购买 进阶版 并且在 即时通信 IM 控制台 开启“用户资料变更订阅”后可以使用。
    
    
    
    该功能仅增强版 7.4 及以上版本支持。
    订阅列表最多允许订阅 200 个,超过限制后,会自动淘汰最早订阅的用户(订阅好友也会占用这 200 个名额)。
    该接口限频默认为 5 秒 20 次请求,且单次订阅最大用户数不超过 100 人。
    注意:
    好友的资料和自己的资料都不需要订阅,当好友或自己的资料变更时,默认会通过onFriendInfoChanged onSelfInfoUpdated 回调来通知给您。
    示例代码如下:
    Android
    iOS & Mac
    Windows
    List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");
    V2TIMManager.getInstance().subscribeUserInfo(useridList, new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 订阅用户资料成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 订阅用户资料失败
    }
    });
    [V2TIMManager.sharedInstance subscribeUserInfo:@[@"useridA", @"useridB", @"useridC"]
    succ:^ {
    // 订阅用户资料成功
    } fail:^(int code, NSString *desc) {
    // 订阅用户资料失败
    }];
    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_;
    };
    
    V2TIMStringVector userIDList;
    userIDList.PushBack(u8"useridA");
    userIDList.PushBack(u8"useridB");
    
    auto callback = new Callback{};
    callback->SetCallback(
    [=]() {
    // 订阅用户资料成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 订阅用户资料成功
    delete callback;
    });
    
    V2TIMManager::GetInstance()->SubscribeUserInfo(userIDList, callback);

    取消订阅非好友用户资料

    如果您不想接收订阅用户资料变更通知,可以调用接口unsubscribeUserInfo (Android / iOS & Mac / Windows) 来取消某些已订阅用户。
    当传入的用户列表为空时,会取消当前所有的订阅。
    说明:
    该功能仅对进阶版客户开放,购买 进阶版 并且在 即时通信 IM 控制台 开启“用户资料变更订阅”后可以使用。
    
    
    
    该功能仅增强版 7.4 及以上版本支持。
    该接口限频默认为 5 秒 20 次请求,且单次取消订阅最大用户数不超过 100 人。
    示例代码如下所示:
    Android
    iOS
    Windows
    List<String> useridList = Arrays.asList("useridA", "useridB", "useridC");
    V2TIMManager.getInstance().unsubscribeUserInfo(useridList, new V2TIMCallback() {
    @Override
    public void onSuccess() {
    // 取消订阅用户资料成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 取消订阅用户资料失败
    }
    });
    [V2TIMManager.sharedInstance unsubscribeUserInfo:@[@"useridA", @"useridB", @"useridC"]
    succ:^ {
    // 取消订阅用户资料成功
    } fail:^(int code, NSString *desc) {
    // 取消订阅用户资料失败
    }];
    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_;
    };
    
    V2TIMStringVector userIDList;
    userIDList.PushBack(u8"useridA");
    userIDList.PushBack(u8"useridB");
    
    auto callback = new Callback{};
    callback->SetCallback(
    [=]() {
    // 取消订阅用户资料成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 取消订阅用户资料失败
    delete callback;
    });
    
    V2TIMManager::GetInstance()->UnsubscribeUserInfo(userIDList, callback);

    用户资料变更通知

    根据用户类型的不同,用户资料变更可以分为如下三种:
    1. 自己的资料变更,通过 onSelfInfoUpdated (Android / iOS & Mac / Windows) 回调通知
    2. 好友的资料变更,通过 onFriendInfoChanged (Android / iOS & Mac / Windows) 回调通知
    3. 订阅用户(非好友)的资料变更,通过 onUserInfoChanged (Android / iOS & Mac / Windows) 回调通知
    其中 onSelfInfoUpdatedonUserInfoChanged 回调需要您调用addIMSDKListener (Android / iOS & Mac / Windows) 通过添加 SDK 监听器来设置,onFriendInfoChanged回调需要您调用 addFriendListener (Android / iOS & Mac / Windows) 通过添加关系链监听器来设置。
    注意:
    只有满足如下条件的用户,其资料变更才会通过 onUserInfoChanged 回调进行通知:
    1. 使用 subscribeUserInfo 订阅成功的用户
    2. 非好友关系的用户
    示例代码如下:
    Android
    iOS & Mac
    Windows
    V2TIMSDKListener v2TIMSDKListener = new V2TIMSDKListener() {
    @Override
    public void onSelfInfoUpdated(V2TIMUserFullInfo info) {
    // 收到自己的资料变更通知
    }
    @Override
    public void onUserInfoChanged(List<V2TIMUserFullInfo> infoList) {
    // 收到订阅用户 (非好友) 的资料变更通知
    }
    };
    
    // 添加 SDK 监听器
    V2TIMManager.getInstance().addIMSDKListener(v2TIMSDKListener);
    
    
    V2TIMFriendshipListener v2TIMFriendshipListener = new V2TIMFriendshipListener() {
    @Override
    public void onFriendInfoChanged(List<V2TIMFriendInfo> infoList) {
    // 收到好友资料变更通知
    }
    };
    
    // 添加关系链监听器
    V2TIMManager.getFriendshipManager().addFriendListener(v2TIMFriendshipListener);
    // 添加 SDK 监听器
    [[V2TIMManager sharedInstance] addIMSDKListener:self];
    
    - (void)onSelfInfoUpdated:(V2TIMUserFullInfo *)info {
    // 收到自己的资料变更回调
    }
    
    - (void)onUserInfoChanged:(NSArray<V2TIMUserFullInfo *> *)infoList {
    // 收到订阅用户 (非好友) 的资料变更通知
    }
    
    
    // 添加关系链监听器
    [[V2TIMManager sharedInstance] addFriendListener:self];
    
    - (void)onFriendProfileChanged:(NSArray<V2TIMFriendInfo *> *)infoList {
    // 收到好友资料变更通知
    }
    class SDKListener final : public V2TIMSDKListener {
    public:
    SDKListener() = default;
    ~SDKListener() override = default;
    
    void OnSelfInfoUpdated(const V2TIMUserFullInfo& Info) override {
    // 收到自己的资料变更回调
    }
    void OnUserInfoChanged(const V2TIMUserFullInfoVector& InfoList) override {
    // 收到订阅用户 (非好友) 的资料变更通知
    }
    // 其他成员函数 ...
    };
    
    // 添加 SDK 事件监听器,注意在移除监听器之前需要保持 sdkListener 的生命期,以免接收不到事件回调
    SDKListener sdkListener;
    V2TIMManager::GetInstance()->AddSDKListener(&sdkListener);
    
    
    class FriendshipListener final : public V2TIMFriendshipListener {
    public:
    FriendshipListener() = default;
    ~FriendshipListener() override = default;
    
    void OnFriendInfoChanged(const V2TIMFriendInfoVector& InfoList) override {
    // 收到好友资料变更通知
    }
    // 其他成员函数 ...
    };
    
    // 添加关系链事件监听器,注意在移除监听器之前需要保持 friendshipListener 的生命期,以免接收不到事件回调
    FriendshipListener friendshipListener;
    V2TIMManager::GetInstance()->GetFriendshipManager()->AddFriendListener(&friendshipListener);
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持