概要
多くのアプリはデバイスを認識する必要があります。トライアルやライセンスをデバイスに結び付けたり、アカウントあたりのデバイス数を制限したり、ユーザーがアプリを再インストールした後にデバイスを再び見つけたりするためです。KlugDeviceId は、オペレーティングシステムから固定の識別子を直接読み取ります。
Android では、アプリをアンインストールして再インストールしても識別子は変わらないため、再インストール耐性のあるアンカーになります。iOS では、同じ開発者のアプリがすべて削除されるとシステム識別子がリセットされます。iOS と macOS で再インストール耐性のあるアンカーが必要な場合は、KlugKeychain を使用してください。
KlugDeviceId は、実証の場である当社のアプリで毎日使われています。
機能
- 自己完結型:ANE 1つで完結し、コアライブラリや依存 ANE の追加は不要
- 1回の呼び出しで、Android と iOS のデバイス識別子を取得
- Android 8.0 以降:同じ鍵で署名されている限り、アプリをアンインストールして再インストールしても変わらない
- 権限は不要
- 識別子が利用できない場合は、エラーではなく空文字列を返す
対応プラットフォーム
Android arm64 · armv7
iOS arm64
他のプラットフォームでは isSupported が false を返すため、同じコードをクロスプラットフォームのアプリにそのまま残せます。
はじめに
アプリケーション記述子に拡張機能を追加します:
<extensions>
<extensionID>com.klug.deviceid</extensionID>
</extensions>
コード例
3つの完全なフローです。ゲッターは即座に返り、権限は不要で、例外をスローすることもありません。識別子が利用できない場合は空文字列を返します。完全なドキュメント →
1 · 一度読み取り、ログインと一緒に送信する
import com.klug.deviceid.DeviceId; import flash.events.Event; import flash.net.*; // read once at start and keep it: ANDROID_ID on Android, identifierForVendor on iOS var deviceId:String = DeviceId.getInstance().uniqueId; function login( user:String, password:String ):void { var vars:URLVariables = new URLVariables(); vars.user = user; vars.password = password; vars.device = deviceId; // your server binds the licence or the push token to it var req:URLRequest = new URLRequest( "https://your.server/login" ); req.method = URLRequestMethod.POST; req.data = vars; var loader:URLLoader = new URLLoader(); loader.addEventListener( Event.COMPLETE, onLoginResult ); loader.load( req ); }
2 · 再インストールをまたいでトライアルを維持する(Android)
var dev:DeviceId = DeviceId.getInstance(); // Android: ANDROID_ID stays the same after uninstall and reinstall; only a // factory reset changes it. From Android 8 it is specific to your signing key. var anchor:String = dev.androidId; if ( anchor != "" ) checkTrial( anchor ); // your server: has this device used the trial before? else checkTrialOnIOS(); // iOS: androidId is always "" and identifierForVendor is // reset on uninstall, use KlugKeychain as the anchor there
3 · クロスプラットフォームのコードと空の値
import flash.utils.setTimeout; function readDeviceId():void { var dev:DeviceId = DeviceId.getInstance(); if ( !dev.isSupported ) { useOwnDesktopId(); // desktop: isSupported is false, every getter returns "" return; } var id:String = dev.uniqueId; if ( id == "" ) setTimeout( readDeviceId, 1000 ); // iOS can briefly have no value: ask again else onDeviceId( id ); }
API 概要
| DeviceId.getInstance() | 唯一のインスタンスを返します。 |
| isSupported | Android と iOS では true です。 |
| uniqueId | 実行中のプラットフォームのデバイス識別子:Android では ANDROID_ID、iOS では identifierForVendor。利用できない場合は空文字列。 |
| androidId | Android のデバイス識別子のみで、アンインストールして再インストールしても変わりません。iOS やその他のプラットフォームでは空文字列。 |
KlugDeviceId を購入
AIR アプリケーション1つ分の年間ライセンスで、12か月間のすべてのアップデートが含まれます。お支払い後、拡張機能、ActionScript ライブラリ、ドキュメントをメールでお送りします(通常は1営業日以内)。ライセンスと条件
税金は Link(Stripe)によりチェックアウト時に計算されます。チェックアウト時に、AIR アプリのアプリケーションIDを入力してください。
動作要件
| AIR SDK | 51.x(HARMAN) |
| iOS | iOS 17 以降 |
| Android | Android 6.0(API 23)以降 |
| 権限 | なし |