logo
0
0
WeChat Login
refactor(runtime)!: rename namespace to GameFrameX.SystemInfo.Runtime

GameFrameX Logo

BlankDeviceUniqueIdentifier

Version License Documentation

インディゲーム開発者向けオールインワンソリューション · インディ開発者の夢を支援

📖 ドキュメント🚀 クイックスタート


🌐 言語: English | 简体中文 | 繁體中文 | 日本語 | 한국어


軽量 Unity3D デバイス一意識別子取得プラグイン。Android と iOS プラットフォームに対応し、OAID、IDFA、IMEI、安定したハードウェアフィンガープリントにアクセスする統一 C# API を提供します。Android 側はネイティブ依存なし。

特徴

  • Android 純粋 C# 実装AndroidJavaClass / AndroidJavaObject(JNI)を使用してシステム API とベンダー SDK を直接呼び出し。Java コード、JAR ファイル、Gradle 設定は不要。
  • クロスプラットフォーム — Android、iOS、Unity Editor を統一サポート。未対応の API は自動的に SystemInfo.deviceUniqueIdentifier にフォールバック。
  • マルチベンダー OAID — リフレクション経由で MSA SDK、Huawei、Xiaomi、OPPO、vivo、Samsung の OAID 取得をサポート。
  • iOS IDFA と SSKeychainASIdentifierManager 経由で IDFA を取得し ATT 認証をサポート。デバイス ID を Keychain に永続化し、アプリ再インストール後も維持。
  • 権限不要 — 権限なしで動作。オプションの権限を宣言することで識別子の一意性を向上可能。
  • 内蔵キャッシュ — すべての API は初回呼び出し後に PlayerPrefs で結果をキャッシュし、重複するシステムクエリを回避。

機能

API説明戻り値
DeviceGetOaidデバイス OAID を取得(Android のみ)OAID 元の値(- 除去、最大 32 文字)
DeviceGetIdfaデバイス IDFA を取得(iOS のみ)IDFA 元の値(- 除去、最大 32 文字)
DeviceGetImeiデバイス IMEI を取得IMEI 元の値(- 除去、最大 32 文字)
DeviceUniqueIdentifierデバイス固有マシン ID を取得MD5 ハッシュ(32 文字の 16 進数文字列)

すべての API は PlayerPrefs を通じて結果をキャッシュし、初回取得後はシステムインターフェースを再呼び出ししません。

プラットフォーム実装

プラットフォームDeviceGetOaidDeviceGetIdfaDeviceGetImeiDeviceUniqueIdentifier
AndroidJNI リフレクション取得(MSA / Huawei / Xiaomi / OPPO / vivo / Samsung)SystemInfo.deviceUniqueIdentifier(フォールバック)JNI による TelephonyManager 呼び出しIMEI + ハードウェア情報 + Android ID + WLAN MAC + BT MAC の MD5
iOSSystemInfo.deviceUniqueIdentifier(フォールバック)ASIdentifierManager.advertisingIdentifiernative __DeviceGetIMEI() (IDFV)native DeviceUniqueId() (SSKeychain)
Editor / その他SystemInfo.deviceUniqueIdentifierSystemInfo.deviceUniqueIdentifierSystemInfo.deviceUniqueIdentifierSystemInfo.deviceUniqueIdentifier

権限(オプション)

本プラグインは権限を一切要求しません。権限がない場合はグレースフルにフォールバックします。プラグインは AndroidManifest.xml を同梱していません。以下の権限は使用側プロジェクトAndroidManifest.xml で必要に応じて宣言してください。

Android

権限DeviceUniqueIdentifier の一意性向上DeviceGetImei の一意性向上
READ_PHONE_STATEIMEI がハッシュ計算に含まれる実際の IMEI を取得可能
ACCESS_WIFI_STATEWLAN MAC がハッシュ計算に含まれる-
BLUETOOTHBluetooth 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" />

iOS

設定目的
NSUserTrackingUsageDescriptionIDFA に必要な 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;

iOS IDFA の注意事項

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.