ないぱかの記録

ないぱかからあるぱかになれるか

Flutterで通信キャリア情報を取得する

概要

最近キャリア判定を行う方法について調べる機会があったので、Flutterでの実装方法についてまとめました。

開発環境

Tool Version
macOS 11.4
Visual Studio Code 1.58.2
Flutter 2.2.3
Dart 2.13.4

実装

キャリア情報を取得するパッケージを探すと下記の2つが見つかります。

(実際には他にもキャリア情報を取得できるパッケージがいくつか存在するのですが、Null safety対応がなされていなかったり、更新頻度が少ないものが多いため、以下2つを挙げました。)

pub.dev

pub.dev

telephonyはドキュメントも整っており非常に使いやすいのですが、現状Androidのみしか対応していないため、今回はcarrier_infoを使ってキャリア判定処理を実装します。

dependencies: 
  carrier_info: ^2.0.1

キャリア情報はキャリア名かMobileCountryCode(MCC)とMobileNetworkCode(MNC)の組み合わせで判定できます。

MCCは運用地域を示す3桁の番号で、日本だと440441が使用されています。

また、MNCは通信キャリアを識別する2桁の番号で00だとソフトバンク10だとNTTドコモであることが判別できます。

en.wikipedia.org

ja.wikipedia.org

carrier_infoでは上記それぞれの情報を取得することができるので、それぞれの値を比較してキャリア情報を判別することができます。

下記のようなUtilクラスを作成し、自分の持っている端末でキャリア情報を取得してみました。

import 'package:carrier_info/carrier_info.dart';

abstract class NetworkUtil {
  /// 携帯サービスプロバイダーを取得する
  static Future<String?> getCarrierName() async {
    return await CarrierInfo.carrierName;
  }

  /// ネットワーク番号を取得する
  static Future<String> getMobileNetworkOperator() async {
    // 運用地域を示す3桁の番号
    final mobileContryCode = await CarrierInfo.mobileCountryCode;
    // 通信キャリアを識別する2桁の番号
    final mobileNetworkCode = await CarrierInfo.mobileNetworkCode;
    // 公衆陸上移動体ネットワーク番号(PLMN)
    return '$mobileContryCode$mobileNetworkCode';
  }
}

これで、それぞれのキャリアごとのPLMNとキャリア名をenum等で定義して取得結果と比較すれば、どのキャリアかを判定して処理を分けたりができそうですね。

まとめ

今回はFlutterで通信キャリア情報を取得する方法についてまとめました。

あまり利用機会がないかもしれませんが、自分のように調べる機会が出てきた方の役に立てたら幸いです。

参考

qiita.com

サンプルリポジトリ

github.com