Edited at

Android で gRPC通信 をする時に MetaData を使いたい!

gRPC on Androidの正しい新しい記事が少ない為書きました.

AndroidでgRPCを使っていて,MetaDataを使いたくなったら以下のように書くといいです.

keyがauthorizationsession $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 ありがとうございます!!