Flutter開発で、FireStoreを利用してユーザーのデータを管理するときに、データをユーザーごとに区別して管理したい事が多いと思います。
データをユーザーごとに区別する一般的な方法としてあげられるのが、認証機能を実装する事だと思います。
ただ、小規模なアプリケーションや個人的なプロジェクトを開発する場合に認証機能を実装するのは面倒ですし、あまり適していません。
そこで、認証機能なしでユーザーのデータを区別する方法として、「デバイスID」を利用する方法があります。
「デバイスID」を利用すれば、認証機能を実装するよりも簡単にデータをユーザーごとに区別する事ができるので、詳しく解説したいと思います!
「デバイスID」とは
「デバイスID」がわからない人に向けて、「デバイスID」について説明したいと思います。
デバイスIDとは、デバイスを特定するための文字列や番号の組み合わせです。
デバイスIDには、次のようなものがあります。
- WindowsドライバーのデバイスID: デバイスの列挙子によって報告される文字列で、ハードウェアIDと同じ形式です。プラグアンドプレイ(PnP)マネージャーは、デバイスインスタンスIDの作成にデバイスIDを使用します。
- スマートフォンのデバイスID: 全世界のスマートフォンやタブレットを特定するための文字配列です。
管理者がアクセスや構成の決定を行う際に使用できる情報を提供するオブジェクトです。 - ブラウザベースやモバイルアプリのデバイスID: ウェブサイトやモバイルアプリの仮名化された個々のユーザーを識別するIDです。
- 携帯電話端末のデバイスID: IMEI、MEID、ESNなどの個体識別番号です。
- サイバートラストデバイスID: 会社が許可した端末を認証し、安全なネットワークアクセスを実現するデバイス証明書管理サービスです。
- Secure AccessクライアントのデバイスID: 一意のデバイスID(PID)を利用してデバイスを識別する機能です。
「デバイスID」を利用してユーザーのデータを区別する方法
それでは、「デバイスID」を利用してユーザーのデータを区別する具体的な手順を解説します。
パッケージの追加
pubspec.yamlファイルにdevice_info_plusパッケージを追加します。
dependencies:
flutter:
sdk: flutter
device_info_plus: ^4.0.0
device_info_plusパッケージは、Flutterアプリケーションでデバイスに関する情報を取得するためのプラグインです。このプラグインを使用することで、「デバイスID」を取得する事ができます。
パッケージの最新バージョンは以下のサイトでインストールできます。
デバイスIDの取得
デバイスの固有IDを取得するためのコードを実装します。
以下は、その例です。
import 'package:device_info_plus/device_info_plus.dart';
Future<String> getDeviceId() async {
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
return androidInfo.androidId; // Androidの固有ID
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
return iosInfo.identifierForVendor; // iOSの固有ID
}
return 'unknown';
}
上記のコードは、使用しているデバイスがAndroidの場合はAndroidのデバイスIDを、iOSの場合はiOSのIDを取得しています。
データベースへの適用
取得したデバイスIDをユーザーIDとしてデータベースにデータを保存する際に使用します。
例えば、Firebase Firestoreを使用している場合、以下のようにデータを保存できます。
import 'package:cloud_firestore/cloud_firestore.dart';
Future<void> saveUserData(String data) async {
String deviceId = await getDeviceId();
var document = FirebaseFirestore.instance.collection('users').doc(deviceId);
await document.set({'data': data});
}
注意点
プライバシーとセキュリティ:
デバイスIDを使用する場合、ユーザーのプライバシーに配慮する必要があります。
デバイスIDが外部に漏れると、ユーザーのデバイスが追跡される可能性があるため、セキュリティ対策をしっかりと行うことが重要です。
デバイスIDの変更: 一部のデバイスやOSでは、デバイスIDが変更されることがあります(例えば、ファクトリーリセット後など)。この点を考慮して、アプリの設計を行う必要があります。
まとめ
いかがだったでしょうか?
私が今回取り上げたような機能を実装したのは、初めて自作のアプリを開発した時です。
あまり複雑な機能を実装せずに、自分が求めている機能を実装したかったので、「デバイスID」を利用してユーザーのデータを区別する方法を選びました。
この記事が少しでも参考になれば幸いです!
コメント