跳到主要内容

Wallet / Responder 用法

我们建议在我们的Kotlin Github仓库中查看Responder的示例实现。

初始化认证客户端

要初始化Auth客户端,在Android Application类中创建一个Auth.Params.Init 对象。 Init对象将需要application class、Project ID和application AppMetaData。

然后Auth.Params.Init对象将被传递给AuthClient对象initialize函数。Auth.Params.Init还允许通过传递URL字符串到relayUrl属性自定义URL。iss参数对于Wallet / Responder不能为空,它描述了Responder授权了什么。以太坊主网的示例iss: did:pkh:eip155:1:0 0xb9c5714089478a327f09197987f16f9e5d936e8a。更多关于did:pkh方法的信息这里

val projectId = "" // Get Project ID at https://cloud.walletconnect.com/
val relayUrl = "relay.walletconnect.com"
val serverUrl = "wss://$relayUrl?projectId=${projectId}"
val appMetaData = Core.Model.AppMetaData(name = "Kotlin.Responder",
description = "Kotlin AuthSDK Responder Implementation",
url = "kotlin.responder.walletconnect.com",
icons = listOf("https://raw.githubusercontent.com/WalletConnect/walletconnect-assets/master/Icon/Gradient/Icon.png"),
redirect = "kotlin-responder-wc:/request"
)

CoreClient.initialize(relayServerUrl = serverUrl, connectionType = ConnectionType.AUTOMATIC, application = this,metaData = appMetaData)

AuthClient.initialize(
init = Auth.Params.Init(
core = CoreClient,
iss = ISSUER
)
) { error ->
Log.e(tag(this), error.throwable.stackTraceToString())
}

关于如何初始化CoreClient的更多内容,请访问CoreClient docs部分。


AuthClient.ResponderDelegate

AuthClient需要传递给它一个 AuthClient.ResponderDelegate,以便能够公开从Dapp / Requester发送的异步更新。

object ResponderDelegate : AuthClient.ResponderDelegate {
init {
AuthClient.setResponderDelegate(this)
}

override fun onAuthRequest(authRequest: Auth.Event.AuthRequest) {
// Triggered when Dapp / Requester makes an authorisation request. Wallet / Responder should display message to user and ask him to approve or reject authorisation.
}

override fun onConnectionStateChange(connectionStateChange: Auth.Event.ConnectionStateChange) {
// Triggered whenever the connection state is changed
}

override fun onError(error: Auth.Event.Error) {
//Triggered whenever the error occurs with Relay Server
}
}

方法

Pair Clients

val pair = Auth.Params.Pair("wc:auth-...")
AuthClient.pair(pair)

要将钱包与Dapp / Requester配对,请调用AuthClient。配对函数需要一个Auth.Params.Pair参数。 Auth.Params.Pair是WC Uri将被传递的地方。

Session Approval

批准授权申请,使用CacaoSigner.sign 签署消息,需要私钥签署Cacao 对象,需要传递给Auth.Params.Respond.Result 对象并发送给Dapp / Requester。

val request: Auth.Event.AuthRequest = // Request from onAuthRequest
val cacao: Auth.Model.Cacao.Signature = CacaoSigner.sign(
request.message, // Message to be signed
PRIVATE_KEY, // Private key used to signing a message
SignatureType.EIP191 // Currently only EIP191 signing is supported
)

AuthClient.respond(Auth.Params.Respond.Result(request.id, cacao)) { error ->
Log.e("Responder respond approve", error.throwable.stackTraceToString())
}

Session Rejection

拒绝授权请求,用 Auth.Params.Respond.Error回应Dapp / Requester. 注意:我们建议使用下面定义的错误消息和错误代码。

val request: Auth.Event.AuthRequest = // Request from onAuthRequest
AuthClient.respond(
Auth.Params.Respond.Error(request.id, 12001, "User Rejected Request") // Specifying Error codes will change in future
) { error ->
Log.e("Responder respond reject", error.throwable.stackTraceToString())
}

获取挂起请求列表

val pendingRequest: List<Auth.Model.PendingRequest> = AuthClient.getPendingRequest()

T获取挂起请求的列表, 调用 AuthClient.getPendingRequest() 返回 Auth.Model.PendingRequest.