Skip to content
能力中心
产品中心
应用市场
WebOffice
开发者后台

接入外部通讯录

如果接入方已实现自研的通讯录页面,并希望替换掉协作中台SDK 内置通讯录,可以通过实现相关协议方法实现效果。接入方需要实现 KIMContactsDelegate 协议,并将其注入到SDK 中。

接口定义

方法参数返回值说明
contactsViewControllerUIViewController
自定义通讯录视图控制器。
该代理方法返回自定义的通讯录视图控制器,如果开发者已实现自研的通讯录页面,并希望替换 SDK 内置的通讯录,可以通过实现该方法返回自研的通讯录页面。当返回为 nil 时,内部走默认页面。
contactsPickerViewController
  • params: KIMContactsPickerParams
    SDK 内部构造通讯录选择器时传入的参数。
  • selectedCallback:
    ((_ pickerViewController: UIViewController, _ selectedChatIds: [String], _ selectedUserIds: [String]) -> Void)?
    完成选择回调闭包。
    • pickerViewController: 通讯录视图控制器。
    • selectedChatIds: 已选择的会话 Id。
    • selectedUserIds: 已选中的用户 Id。
      注意该用户 Id 为 SDK 内部使用的用户 Id,需要与自身账户系统进行转换时可调用 KIM.userModule.getUserInfos(thirdUninIds: [String], completion: @escaping ((_ users: [KIMUser], _ error: KIMError?) -> Void)) 方法进行转换。
  • cancelledCallback:
    (_ pickerViewController: UIViewController) -> Void)?
    取消选择回调闭包。
    • pickerViewController: 通讯录视图控制器。
UIViewController
自定义通讯录选择器视图控制器。
该代理方法返回自定义的通讯录选择器视图控制器,如果开发者已实现自研的通讯录选择器页面,并希望替换 SDK 内置的通讯录选择器,可以通过实现该方法返回自研的通讯录选择器页面。当返回为 nil 时,内部走默认页面。

KIMContactsPickerParams 说明:

属性类型说明
titleString通讯录页面标题。
selectTypeKIMContactsPickerParamsSelectType通讯录选择类型。
• chat:会话选择,可以返回会话及用户id,返回用户id时内部自动创建会话。
• user:用户选择。
canMultipleSelectBool是否支持多选。
maxSelectCountInt最大选择数量。
selectedUserids[String]已选用户 id 列表,可以取消选中。注意:用户id为SDK内部使用的用户Id。
defaultSelectedUserids[String]默认用户 id 列表,不能取消选中。注意:用户id为SDK内部使用的用户Id。
disableSelectedUserids[String]不可选的用户Id列表。注意:用户id为SDK内部使用的用户Id。

代码示例

swift
// 实现协议。
class MyContactsProvider: KIMContactsDelegate {
    
    func contactsViewController() -> UIViewController? {
        return AddressBookSampleVC()
    }
    
    func contactsPickerViewController(params: KIMContactsPickerParams,
                                      selectedCallback: ((_ addressBookPickerVc: UIViewController, _ chatIds: [String], _ selectedUserIds: [String]) -> Void)?,
                                      cancelledCallback: ((_ addressBookPickerVc: UIViewController) -> Void)?) -> UIViewController? {
        let vc = AddressBookPickerSampleVC()
        vc.params = params
        vc.selectedCallback = selectedCallback
        vc.cancelledCallback = cancelledCallback
        return vc
    }
}

// 2. 设置协议代理。
KIM.userModule.contactsDelegate = MyContactsProvider()
Objective-C
// 1. 实现协议。
@interface MyContactsProvider ()<KIMContactsDelegate>

@end

@implementation KIMBridge

- (UIViewController *)contactsViewController {
    return [[AddressBookSampleVC alloc] init];
}

- (UIViewController *)contactsPickerViewControllerWithParams:(KIMContactsPickerParams *)params selectedCallback:(void (^)(UIViewController * _Nonnull, NSArray<NSString *> * _Nonnull, NSArray<NSString *> * _Nonnull))selectedCallback cancelledCallback:(void (^)(UIViewController * _Nonnull))cancelledCallback {
    AddressBookPickerSampleVC *vc = AddressBookPickerSampleVC()
    vc.params = params
    vc.selectedCallback = selectedCallback
    vc.cancelledCallback = cancelledCallback
    return vc
}

@end

// 2. 设置协议实现代理。
KIM.userModule.contactsDelegate = [[MyContactsProvider alloc] init];

通过以上步骤即可完成外部通讯录的接入,实现 协作中台 SDK 内所有涉及调用通讯录的功能,全部替换为外部通讯录,例如通讯录tab、创建群聊/添加群聊成员等。