はじめに
深夜にラーメン屋に行くと100%お腹を壊すことがわかりました。ありがとうございます。(最近の出来事)
壊れる繋がりでいうとネイティブアプリからgRPC-Webを呼んでもクラッシュしないか気になりましたので、書いていこうと思います。
gRPC-Webってjsじゃん、どうやって呼ぶの?
ご安心ください。今回使用するのはReact Nativeなのでそのまま呼べちゃいます。
いざ検証
Envoy Proxyを建てる
ここにとてもわかりやすい記事があるので参考にして下さい。
gRPC-Webのビルドを行う
ここにわかりやすい素晴らしい記事があるので参考にして下さい。
gRPC Serverを用意する
今回は過去にこちらで紹介した僕の彼女(Botアプリ)をServerとして使用します。
https://qiita.com/taisei_otsuka/items/87adaf5f8ed19a8549c5
React Nativeのアプリを作る
チャットアプリ作ってみました (iPhone エミュレーター)
あれ...普通にgRPCが呼べる
と、僕もそう思ってたのですがAndroidアプリを作っていた時に事件は起きました。
500エラーが返ってくる
なんでだろうと調べていた時に公式のissuesを発見しました。
headerにcharset=utf-8がくっついている為とのことです。
The issue is fixed in 0.60 with 4a80776.
RNの0.60以降は治ってるとの話なのですが、自分の環境では同じエラーになりました。
結論
iPhoneからgRPC-Webは使える、しかしAndroidで使えない。
なので、別BFFアプリを建てる、もしくはEnvoy Proxyを建ててgRPC-JSON transcoderでhttpからgRPCにリバースプロキシした方が安牌かなと思います。
あとがき
Instagram・Facebook・Discord・Uber Eats・SkypeではReact Nativeが使われています。
今回作ったアプリも10分くらいで作れましたし、この記事を読んだきっかけでReact Nativeファンが増えたらと思ってます!
採用PR
大規模サイトので開発やマイクロサービス化・二次元コンテンツに興味がある、もしくはチャレンジしてみたいという方は是非一緒に働きましょう!
