👏

FlutterでiOSのBluetooth設定画面に遷移する方法

2024/06/28に公開

はじめに

Flutterアプリ開発において、ユーザーをiOSデバイスのBluetooth設定画面に誘導する必要がある場合があります。本記事では、この操作を実現するための方法を解説します。

iOSのBluetooth設定における2パターン

iOSには、Bluetoothに関する2種類の設定画面があります。

  1. デバイス全体のBluetoothのON/OFF設定
  2. アプリ固有のBluetooth設定

多くのFlutterライブラリは2番目の設定画面への遷移をサポートしていますが、デバイス全体の設定画面に遷移するのは少し工夫が必要です。

アプリ固有の設定画面への遷移

アプリ固有の設定画面への遷移は、以下のようなライブラリを使用することで簡単に実現できます:

app_settingsを使用する例

  1. まず、pubspec.yamlに依存関係を追加します
dependencies:
  flutter:
    sdk: flutter
  app_settings: 4.1.8
  1. 次に、Dartファイルで以下のように使用します
import 'package:app_settings/app_settings.dart';

// イベント発生時に以下の処理を呼び出す
AppSettings.openBluetoothSettings();

デバイス全体のBluetooth設定画面への遷移

デバイス全体のBluetooth設定画面への遷移は、Flutterのライブラリだけでは実現が難しいため、ネイティブコードを利用する必要があります。

iOS(Swift)での実装

  1. iOSのネイティブコード(Swift)で以下のような処理を実装します
channel.setMethodCallHandler({
  (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
  if (call.method == "openSystemBluetoothSetting") {
    let url = URL(string: "App-Prefs:root=General&path=Bluetooth")
    let app = UIApplication.shared
    result(app.openURL(url!))
  } else {
    result(FlutterMethodNotImplemented)
  }
})
  1. Flutterのプロジェクトでは、MethodChannelを使用してこのネイティブコードを呼び出します
if (Platform.isAndroid) {
  await openAppSettings();
} else {
  await BeaconService.methodChannel.invokeMethod<String>(
    'openSystemBluetoothSetting',
  );
}

まとめ

iOSのBluetooth設定画面への遷移は、アプリ固有の設定とデバイス全体の設定で異なるアプローチが必要です。アプリ固有の設定は既存のFlutterライブラリで簡単に実現できますが、デバイス全体の設定にはネイティブコードとMethodChannelの組み合わせが必要となります。

91works Tech Blog

Discussion