【Flutter】network_info_plusについて

Flutter

network_info_plusとは

ネットワーク情報を取得し、適切に設定できるようにするためのパッケージです。
Wi-Fiの名前、BSSID、IPアドレスなどの情報を簡単に取得することができます。

network_info_plus | Flutter package
Flutter plugin for discovering information (e.g. WiFi details) of the network.

使い方

インストール

dependencies:
  network_info_plus: ^5.0.3

インポート

使用するファイルで、network_info_plusをインポートします。

import 'package:network_info_plus/network_info_plus.dart';

基本的な使い方

NetworkInfoクラスのインスタンスを作成し、各種ネットワーク情報を取得します。

final info = NetworkInfo();

final wifiName = await info.getWifiName(); // 例: "FooNetwork"
final wifiBSSID = await info.getWifiBSSID(); // 例: 11:22:33:44:55:66
final wifiIP = await info.getWifiIP(); // 例: 192.168.1.43
final wifiIPv6 = await info.getWifiIPv6(); // 例: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
final wifiSubmask = await info.getWifiSubmask(); // 例: 255.255.255.0
final wifiBroadcast = await info.getWifiBroadcast(); // 例: 192.168.1.255
final wifiGateway = await info.getWifiGatewayIP(); // 例: 192.168.1.1

デバイスの権限

ネットワーク情報にアクセスするためには、AndroidおよびiOSで追加の権限が必要です。

Android

  • Wi-Fi名またはBSSIDを取得するためには、以下の条件を満たす必要があります。
  • Android 10(APIレベル29)以降をターゲットにしている場合、ACCESS_FINE_LOCATION権限が必要です。
  • Android 10未満をターゲットにしている場合、ACCESS_COARSE_LOCATIONまたはACCESS_FINE_LOCATION権限が必要です。
  • デバイスの位置情報サービスが有効になっていること。

以下のコード例は、permission_handlerプラグインを使用して位置情報権限をリクエストします。

import 'package:permission_handler/permission_handler.dart';

PermissionStatus status = await Permission.location.request();

iOS

  • iOS 12以降では、XCodeでAccess WiFi information機能を有効にする必要があります。これにより、getWifiBSSID()およびgetWifiName()メソッドが有効になります。
  • iOS 13以降では、CNCopyCurrentNetworkInfo関数を使用するために、位置情報の使用許可が必要です。これには、NSLocationAlwaysAndWhenInUseUsageDescriptionおよびNSLocationWhenInUseUsageDescriptionキーをInfo.plistファイルに追加する必要があります。
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>アプリが位置情報を常時利用する理由を説明します。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>アプリがフォアグラウンドで位置情報を利用する理由を説明します。</string>

さらに、iOS 14以降では、NEHotspotNetwork.fetchCurrentWithCompletionHandlerメソッドを使用してWi-Fi情報を取得します。これには、com.apple.developer.networking.wifi-infoエンタイトルメントが必要です。

タイトルとURLをコピーしました