gRPC on Androidの正しい新しい記事が少ない為書きました.
AndroidでgRPCを使っていて,MetaDataを使いたくなったら以下のように書くといいです.
keyがauthorization
のsession $sessionId
をMetadataに入れる例を示します.
UserServiceClient.kt
class UserServiceClient{
private val channel: ManagedChannel = ManagedChannelBuilder
.forAddress(BuildConfig.SERVER_URL, BuildConfig.PORT.toInt())
.useTransportSecurity()
.build()
private var userStub: UserServiceGrpc.UserServiceBlockingStub = UserServiceGrpc.newBlockingStub(channel)
suspend fun user(sessionId: String) = coroutineScope {
Metadata().apply {
put(Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER), "session $sessionId")
}.let {
// この,stubに代入してあげるのを忘れると積むので気をつけること!!
userStub = MetadataUtils.attachHeaders(userStub, it)
}
val createRequest = Users.GetCurrentUserRequest.newBuilder()
.build()
userStub.getCurrentUser(createRequest)
}
}
協力: @gedorinku ありがとうございます!!