読者です 読者をやめる 読者になる 読者になる

そーす

福岡在住のプログラマ。SwiftとかKotlinとかJavascriptとかSketchとか触ってます。

NetInfo.isConnectedはiOSでは常にfalseを返すという罠

issue上がってます

github.com

再現方法

NetInfo.isConnectedを使うだけ。 Androidはちゃんとしたネットワークの接続状況を返してくれますが、iOSは常にfalse…

原因

github.com

ワークアラウンド

なんと公式ドキュメントのサンプルにまで書いてあります…直さないのかな…

facebook.github.io

NetInfo.isConnected.fetch().then(isConnected => {
  console.log('First, is ' + (isConnected ? 'online' : 'offline'));
});
function handleFirstConnectivityChange(isConnected) {
  console.log('Then, is ' + (isConnected ? 'online' : 'offline'));
  NetInfo.isConnected.removeEventListener(
    'change',
    handleFirstConnectivityChange
  );
}
NetInfo.isConnected.addEventListener(
  'change',
  handleFirstConnectivityChange
);

地味にめんどい…

そもそもiOSのfetchAPIがネットがつながってないときにエラー返さないのが問題なんだけど…

【追記】 fetchにもtimeout設定されてた。