📳

【iOS / Android】端末の回線キャリア名を取得する方法

2024/09/03に公開

概要

iOS・Android端末のキャリア名を取得する方法

きっかけ

アプリにてユーザーの使用端末のメインキャリア名を取得したいという要望があったため、iOS・Androidでキャリア名を取得する方法を調べました。

取得方法

iOS

iOSアプリでキャリア名を取得するには、SwiftでCTTelephonyNetworkInfoというクラスを拡張して取得します。

import CoreTelephony

extension CTTelephonyNetworkInfo {

/// 端末のメイン回線キャリア
var carrierName: String {
    let carrierInfo = CTTelephonyNetworkInfo().serviceSubscriberCellularProviders
    let carrierName: String = carrierInfo?["0000000100000001"]?.value(forKey: "carrierName") as? String ?? "キャリアなし"
    return carrierName
  }
}

Android

Androidでキャリア名を取得するには、READ_PHONE_STATE権限を使用します。
READ_PHONE_STATE権限を使用するには、ダイアログを表示してユーザーにパーミッションを許可してもらう必要があります。

先ずAndroidManifest.xmlに下記を追記します。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

次にActivityでパーミッション許可ダイアログを表示して、ユーザーに許可するかしないかを確認します。

// registerForActivityResultを使用
private fun checkPermisson() {
  registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted: Boolean ->
    if (isGranted) {
      // パーミッションが許可された
      // キャリアを取得する
    } else {
      // パーミッションが許可されなかった
      // キャリアを取得しない
    }
  }.launch(Manifest.permission.READ_PHONE_STATE)
}

パーミッションが許可された場合のみ、kotlinでTelephonyManagerクラスを使用して取得します。

import android.telephony.TelephonyManager
----------------------------

// 端末のメイン回線キャリアを取得する
private fun getNetworkCarrier(context: Context): String? {
  val manager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager?
  return manager?.simOperatorName
}

注意点

Androidのみ端末キャリアを取得する時にダイアログを表示する必要があります。
PUSH通知を使用しているアプリの場合には、初回起動時にPUSH許可ダイアログ→キャリア取得許可ダイアログと表示することになります。
ユーザーによっては鬱陶しく感じでしまうかもしれません。

また、パーミッション許可ダイアログの文言はパッと見わかりづらく、変えることができないので補足のダイアログも必要になりそうです。

Discussion