swift sdk 请问即时通讯如何使用内建账户系统登录签名和对话签名

反复阅读了swift文档关于即时通讯使用内建账户完成签名这部分,然后运行了一下
override func viewDidLoad() {
super.viewDidLoad()

    _ = LCUser.logIn(username: "username", password: "password") { (result) in
        switch result {
        case .success(object: let user):
            do {
                let client = try IMClient(user: user)
                client.open(completion: { (result) in
                    // 执行其他逻辑(添加文档中的创建对话的代码)

                    do {
                        try client.createConversation(
                          clientIDs: ["Jerry"], 
                          name: "Tom & Jerry", 
                          isUnique: true, 
                          completion: { (result) in
                            switch result {
                            case .success(value: let conversation):
                                print(conversation)
                            case .failure(error: let error):
                                print(error)
                            }
                        })
                    } catch {
                        print(error)
                    }
                })
            } catch {
                print(error)
            }
        case .failure(error: let error):
            print(error)
        }
    }
}

问题1:以上是根据文档,把上述代码直接放在viewDidLoad方法里面,并在执行其他逻辑处添加新建对话。当开启登录启用签名认证、对话操作启用签名认证、聊天记录查询启用签名认证后,发现并没有成功createConversation。如果使用内建账户系统进行即时通讯还需要实现IMSignatureDelegate吗?

问题2,如果用文档中的内建账户的方法“ let client = try IMClient(user: user)”,如何设置swift-sdk-demo中的 let client = try IMClient( ID: clientID,tag: tag,options: options,delegate: Client.delegator, eventQueue: Client.queue )几个参数,特别是tag这个参数?

问题3,如果使用内建账户需要实现IMSignatureDelegate ,其中的
func getClientOpenSignature(completion: (IMSignature) -> Void) {
// 基于 LeanCloud 云引擎的获取客户端登录签名的函数
}
这里“基于 LeanCloud 云引擎的获取客户端登录签名的函数”用swift怎么写呢,最好能给一个用内建账户实现签名的完整swift版demo,谢谢啦。

请提供 SDK 版本号。

我用的SDK是LeanCloud-Swift-SDK/16.5.0"

我的操作是:
第一步:控制台开启登录启用签名认证、对话操作启用签名认证和聊天记录查询启用签名认证;
第二步:下载最新的LeanCloud Swift SDK(查了一下podfile文件里面是pod 'LeanCloud', '~> 16.5.0')并修改App ID 和App Key: https://github.com/leancloud/swift-sdk-demo
第三步:在application(_:didFinishLaunchingWithOptions:) 或viewDidLoad方法里加入下面代码:
_ = LCUser.logIn(username: "username", password: "password") { (result) in
switch result {
case .success(object: let user):
print("logIn success")
do {
let client = try IMClient(user: user)
client.open(completion: { (result) in
// 执行其他逻辑
do {
try client.createConversation(clientIDs: ["Jerry8"], name: "Tom & Jerry", isUnique: true, completion: { (result) in
switch result {
case .success(value: let conversation):
print(conversation)
case .failure(error: let error):
print(error)
}
})
} catch {
print(error)
}
})
} catch {
print(error)
}
case .failure(error: let error):
print(error)
}
}
第四步:运行后,查询控制台,发现并没有成功createConversation,控制台_Conversation里面记录是空的。
请帮我看看,是不是还需要设置哪些步骤才能使用内建账户进行签名呢?

createConversation 的回调结果是什么?

上述代码执行完毕,登录即时通讯client.open是成功的。但进入控制台查看,_Conversation里面却没有记录,createConversation没有成功。打印显示[deinit]: IMClient ID deinit。

上面整个操作过程,就是在swift-sdk-demo [ demo地址: https://github.com/leancloud/swift-sdk-demo ]
viewDidLoad方法里添加了文档所说的用内建账户进行签名的方法,并试了一下createConversation。

但是开启签名并登陆成功后, createConversation却没成功,判断可能是卡在登录成功后用内建账户的user创建对话上,请问开启签名并登陆成功后如何用user创建client并createConversation的具体代码怎么写,是不是还需要设置IMSignatureDelegate?谢谢啦

do {
try client.createConversation(clientIDs: ["Jerry9"], name: "Tom & Jerry", isUnique: true, completion: { (result) in
switch result {

            case .success(value: let conversation):
                print("conversation :\(conversation)")
            case .failure(error: let error):
                print("error:\(error)")
            }
        })
    } catch {
        print("error\(error)")
    }

执行后显示LCError(code: 4302, reason: Optional("CONVERSATION_SIGNATURE_FAILED"), userInfo: Optional([:]), underlyingError: nil)

请问是“客户端如何支持操作签名”这部分吗?

「云引擎签名范例」

谢谢。要是有swift方面的完整签名的demo就好了

文档中提到:“LeanCloud 内置账户系统与即时通讯服务可以共享登录签名信息,这里我们直接用 logIn 成功之后的 AVUser 实例来创建 IMClient,在即时通讯服务的用户登录环节,LeanCloud 云端会自动关联账户系统来确认用户身份的合法性,这样可以省掉 SDK 向第三方申请登录签名的操作,进一步简化开发流程。”

特别是文档这句:“IMClient 完成即时通讯系统登录之后,其他功能的使用就和之前的介绍没有任何区别了。”好像这句有问题。

我觉得“其他功能”要想实现,整个流程应该是有区别的,内建账户实现的签名过程只对“登录”这一个环节有效,登录以后,后面其他功能应该还是需要单独的签名过程。也就是说,open环节成功实现签名,这个签名只对open这个环节有效,如果想createConversation,是需要另外实现新的签名过程,并且createConversation签名的格式也与用内建账户登录的签名的格式不一样,是这样吗?(或者说,内建账户open环节成功实现的签名,不能用于createConversation?)

这里的「之前的介绍」应该是指「不使用签名的相关文档」。