軽量 Unity3D デバイス一意識別子取得プラグイン。Android と iOS プラットフォームに対応し、OAID、IDFA、IMEI、安定したハードウェアフィンガープリントにアクセスする統一 C# API を提供します。Android 側はネイティブ依存なし。
AndroidJavaClass / AndroidJavaObject(JNI)を使用してシステム API とベンダー SDK を直接呼び出し。Java コード、JAR ファイル、Gradle 設定は不要。SystemInfo.deviceUniqueIdentifier にフォールバック。ASIdentifierManager 経由で IDFA を取得し ATT 認証をサポート。デバイス ID を Keychain に永続化し、アプリ再インストール後も維持。PlayerPrefs で結果をキャッシュし、重複するシステムクエリを回避。| API | 説明 | 戻り値 |
|---|---|---|
DeviceGetOaid | デバイス OAID を取得(Android のみ) | OAID 元の値(- 除去、最大 32 文字) |
DeviceGetIdfa | デバイス IDFA を取得(iOS のみ) | IDFA 元の値(- 除去、最大 32 文字) |
DeviceGetImei | デバイス IMEI を取得 | IMEI 元の値(- 除去、最大 32 文字) |
DeviceUniqueIdentifier | デバイス固有マシン ID を取得 | MD5 ハッシュ(32 文字の 16 進数文字列) |
すべての API は PlayerPrefs を通じて結果をキャッシュし、初回取得後はシステムインターフェースを再呼び出ししません。
| プラットフォーム | DeviceGetOaid | DeviceGetIdfa | DeviceGetImei | DeviceUniqueIdentifier |
|---|---|---|---|---|
| Android | JNI リフレクション取得(MSA / Huawei / Xiaomi / OPPO / vivo / Samsung) | SystemInfo.deviceUniqueIdentifier(フォールバック) | JNI による TelephonyManager 呼び出し | IMEI + ハードウェア情報 + Android ID + WLAN MAC + BT MAC の MD5 |
| iOS | SystemInfo.deviceUniqueIdentifier(フォールバック) | ASIdentifierManager.advertisingIdentifier | native __DeviceGetIMEI() (IDFV) | native DeviceUniqueId() (SSKeychain) |
| Editor / その他 | SystemInfo.deviceUniqueIdentifier | SystemInfo.deviceUniqueIdentifier | SystemInfo.deviceUniqueIdentifier | SystemInfo.deviceUniqueIdentifier |
本プラグインは権限を一切要求しません。権限がない場合はグレースフルにフォールバックします。プラグインは AndroidManifest.xml を同梱していません。以下の権限は使用側プロジェクトの AndroidManifest.xml で必要に応じて宣言してください。
| 権限 | DeviceUniqueIdentifier の一意性向上 | DeviceGetImei の一意性向上 |
|---|---|---|
READ_PHONE_STATE | IMEI がハッシュ計算に含まれる | 実際の IMEI を取得可能 |
ACCESS_WIFI_STATE | WLAN MAC がハッシュ計算に含まれる | - |
BLUETOOTH | Bluetooth MAC がハッシュ計算に含まれる | - |
<!-- 使用側プロジェクトの AndroidManifest.xml に必要に応じて追加 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
| 設定 | 目的 |
|---|---|
NSUserTrackingUsageDescription | IDFA に必要な ATT 認証の説明 |
<!-- 使用側プロジェクトの Info.plist に追加 -->
<key>NSUserTrackingUsageDescription</key>
<string>広告識別子はより良いサービスの提供に使用されます</string>
using GameFrameX.SystemInfo.Runtime;
// デバイス OAID を取得(Android のみ、iOS/Editor では SystemInfo.deviceUniqueIdentifier にフォールバック)
string oaid = BlankDeviceUniqueIdentifier.DeviceGetOaid;
// デバイス IDFA を取得(iOS のみ、Android/Editor では SystemInfo.deviceUniqueIdentifier にフォールバック)
string idfa = BlankDeviceUniqueIdentifier.DeviceGetIdfa;
// デバイス IMEI を取得
string imei = BlankDeviceUniqueIdentifier.DeviceGetImei;
// デバイス一意識別子を取得
string deviceId = BlankDeviceUniqueIdentifier.DeviceUniqueIdentifier;
IDFA は ATT(App Tracking Transparency)によるユーザー認証が必要です。使用前に Info.plist に追加:
<key>NSUserTrackingUsageDescription</key>
<string>広告識別子はより良いサービスの提供に使用されます</string>
DeviceGetIdfa を呼び出す前に認証を要求:
#if UNITY_IOS || UNITY_IPHONE
// iOS 14+ では先に ATT 認証を要求
if (UnityEngine.iOS.Device.systemVersion.CompareTo("14") >= 0)
{
UnityEngine.iOS.Device.RequestUserAuthorization(UnityEngine.iOS.UserTracking.Authorization);
}
#endif
string idfa = BlankDeviceUniqueIdentifier.DeviceGetIdfa;
未認証の場合、DeviceGetIdfa は空文字列を返し、クラッシュしません。
Plugins/
iOS/
BlankDeviceUniqueIdentifier/
AHDeviceUniqueIdentifier.h # iOS native ヘッダ
AHDeviceUniqueIdentifier.mm # iOS native 実装
SSKeychain.h # SSKeychain キーチェーンユーティリティ
SSKeychain.m
Runtime/
BlankDeviceUniqueIdentifier.cs # C# 統一インターフェース(Android は JNI でシステム API を直接呼び出し、Java/JAR 不要)
Android では
AndroidJavaClass/AndroidJavaObjectを使用してシステム API とベンダー SDK を直接呼び出します。Java コードのコンパイルや JAR ファイルは不要です。
本プロジェクトは Apache License 2.0 の下でライセンスされています。
Copyright 2023 ALianBlank (alianblank@outlook.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.