https://github.com/gameframex/com.gameframex.unity.systeminfo
A Unity3D plugin for retrieving device unique identifiers (OAID, IDFA, IMEI, hardware fingerprint) on Android and iOS — pure C# with JNI, no Java/JAR required.
https://github.com/gameframex/com.gameframex.unity.systeminfo
android androidid device-identifier deviceid idfa imei ios iosdevice jni keychain oaid unique-id unique-id-generator unique-identifier uniqueid unity unity-3d unity3d unity3d-plugin
Last synced: about 17 hours ago
JSON representation
A Unity3D plugin for retrieving device unique identifiers (OAID, IDFA, IMEI, hardware fingerprint) on Android and iOS — pure C# with JNI, no Java/JAR required.
- Host: GitHub
- URL: https://github.com/gameframex/com.gameframex.unity.systeminfo
- Owner: GameFrameX
- License: apache-2.0
- Created: 2016-10-17T05:54:22.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2026-06-07T08:39:15.000Z (16 days ago)
- Last Synced: 2026-06-07T10:21:19.630Z (16 days ago)
- Topics: android, androidid, device-identifier, deviceid, idfa, imei, ios, iosdevice, jni, keychain, oaid, unique-id, unique-id-generator, unique-identifier, uniqueid, unity, unity-3d, unity3d, unity3d-plugin
- Language: Objective-C
- Homepage: https://gameframex.doc.alianblank.com
- Size: 11 MB
- Stars: 23
- Watchers: 2
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README

# BlankDeviceUniqueIdentifier
[](https://github.com/GameFrameX/com.gameframex.unity.systeminfo/blob/main/LICENSE.md)
[](https://github.com/GameFrameX/com.gameframex.unity.systeminfo/releases)
[](https://unity.com/)
[](https://gameframex.doc.alianblank.com)
インディゲーム開発者向けオールインワンソリューション · インディ開発者の夢を支援
[ドキュメント](https://gameframex.doc.alianblank.com) · [クイックスタート](#quick-start) · QQグループ: 467608841 / 233840761
[English](README.md) | [简体中文](README.zh-CN.md) | [繁體中文](README.zh-TW.md) | **日本語** | [한국어](README.ko.md)
## 機能
| API | 説明 | 戻り値 |
|-----|------|--------|
| `DeviceGetOaid` | デバイス OAID を取得(Android のみ) | OAID 元の値(`-` 除去、最大 32 文字) |
| `DeviceGetIdfa` | デバイス IDFA を取得(iOS のみ) | IDFA 元の値(`-` 除去、最大 32 文字) |
| `DeviceGetImei` | デバイス IMEI を取得 | IMEI 元の値(`-` 除去、最大 32 文字) |
| `DeviceUniqueIdentifier` | デバイス固有マシン ID を取得 | MD5 ハッシュ(32 文字の 16 進数文字列) |
すべての API は `PlayerPrefs` を通じて結果をキャッシュし、初回取得後はシステムインターフェースを再呼び出ししません。
## クイックスタート
### インストール
以下のいずれかの方法を選択してください:
1. Unity プロジェクトの `Packages/manifest.json` を編集し、`scopedRegistries` セクションを追加してください:
```json
{
"scopedRegistries": [
{
"name": "GameFrameX",
"url": "https://gameframex.upm.alianblank.uk",
"scopes": [
"com.gameframex"
]
}
],
"dependencies": {
"com.gameframex.unity.systeminfo": "3.0.1"
}
}
```
`scopes` は、どのパッケージをこのレジストリから解決するかを制御します。`com.gameframex` で始まるパッケージのみがこのレジストリから取得されます。
2. `manifest.json` の `dependencies` に直接追加:
```json
{
"com.gameframex.unity.systeminfo": "https://github.com/gameframex/com.gameframex.unity.systeminfo.git"
}
```
3. Unity の **Package Manager** で **Git URL** を使用して追加:`https://github.com/gameframex/com.gameframex.unity.systeminfo.git`
4. リポジトリを Unity プロジェクトの `Packages` ディレクトリにクローンしてください。自動的に読み込まれます.
## クイックスタート
### インストール
以下のいずれかの方法を選択してください:
1. Unity プロジェクトの `Packages/manifest.json` を編集し、`scopedRegistries` セクションを追加してください:
```json
{
"scopedRegistries": [
{
"name": "GameFrameX",
"url": "https://gameframex.upm.alianblank.uk",
"scopes": [
"com.gameframex"
]
}
],
"dependencies": {
"com.gameframex.unity.systeminfo": "3.0.1"
}
}
```
`scopes` は、どのパッケージをこのレジストリから解決するかを制御します。`com.gameframex` で始まるパッケージのみがこのレジストリから取得されます。
2. `manifest.json` の `dependencies` に直接追加:
```json
{
"com.gameframex.unity.systeminfo": "https://github.com/gameframex/com.gameframex.unity.systeminfo.git"
}
```
3. Unity の **Package Manager** で **Git URL** を使用して追加:`https://github.com/gameframex/com.gameframex.unity.systeminfo.git`
4. リポジトリを Unity プロジェクトの `Packages` ディレクトリにクローンしてください。自動的に読み込まれます.
## プラットフォーム実装
| プラットフォーム | `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) |
| WebGL | jslib:`localStorage` に永続化された UUID | jslib:`localStorage` に永続化された UUID | jslib:`localStorage` に永続化された UUID | jslib:`localStorage` に永続化された UUID |
| Editor / その他 | `SystemInfo.deviceUniqueIdentifier` | `SystemInfo.deviceUniqueIdentifier` | `SystemInfo.deviceUniqueIdentifier` | `SystemInfo.deviceUniqueIdentifier` |
> **WebGL 補足**:`SystemInfo.deviceUniqueIdentifier` はブラウザコンテキストで不安定なため、jslib は初回呼び出し時に UUID を生成し、`localStorage` の `GameFrameX.DeviceUniqueIdentifier` キーに永続化することで、同じブラウザ内では安定します。
## 権限(オプション)
本プラグインは**権限を一切要求しません**。権限がない場合はグレースフルにフォールバックします。プラグインは `AndroidManifest.xml` を同梱していません。以下の権限は**使用側プロジェクト**の `AndroidManifest.xml` で必要に応じて宣言してください。
### Android
| 権限 | `DeviceUniqueIdentifier` の一意性向上 | `DeviceGetImei` の一意性向上 |
|------------|------|------|
| `READ_PHONE_STATE` | IMEI がハッシュ計算に含まれる | 実際の IMEI を取得可能 |
| `ACCESS_WIFI_STATE` | WLAN MAC がハッシュ計算に含まれる | - |
| `BLUETOOTH` | Bluetooth MAC がハッシュ計算に含まれる | - |
```xml
```
### iOS
| 設定 | 目的 |
|------|------|
| `NSUserTrackingUsageDescription` | IDFA に必要な ATT 認証の説明 |
```xml
NSUserTrackingUsageDescription
広告識別子はより良いサービスの提供に使用されます
```
## 使用例
```csharp
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;
```
### iOS IDFA の注意事項
IDFA は ATT(App Tracking Transparency)によるユーザー認証が必要です。使用前に `Info.plist` に追加:
```xml
NSUserTrackingUsageDescription
広告識別子はより良いサービスの提供に使用されます
```
`DeviceGetIdfa` を呼び出す前に認証を要求:
```csharp
#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
WebGL/
BlankDeviceUniqueIdentifier.jslib # WebGL jslib ブリッジ(localStorage 永続化 UUID)
Runtime/
BlankDeviceUniqueIdentifier.cs # C# 統一インターフェース(Android は JNI でシステム API を直接呼び出し、Java/JAR 不要)
```
> Android では `AndroidJavaClass` / `AndroidJavaObject` を使用してシステム API とベンダー SDK を直接呼び出します。Java コードのコンパイルや JAR ファイルは不要です。
## 依存関係
| パッケージ | 説明 |
|----------|------|
| (无) | - |
## ドキュメントとリソース
- [ドキュメント](https://gameframex.doc.alianblank.com)
## コミュニティとサポート
- QQグループ: 467608841 / 233840761
## 変更履歴
[Releases](https://github.com/GameFrameX/gameframex/com.gameframex.unity.systeminfo/releases) で変更履歴を確認してください。
## ライセンス
詳しくは [LICENSE.md](LICENSE.md) をご参照ください。