Обзор
Многим приложениям нужно узнавать устройство: чтобы привязать к нему пробный период или лицензию, ограничить число устройств на аккаунт или найти устройство снова после переустановки приложения пользователем. KlugDeviceId считывает стабильный идентификатор напрямую из операционной системы.
На Android идентификатор остаётся прежним после удаления и повторной установки приложения, что делает его якорем, устойчивым к переустановке. На iOS системный идентификатор сбрасывается, когда удаляются все приложения одного разработчика; для якоря, устойчивого к переустановке, на iOS и macOS используйте KlugKeychain.
KlugDeviceId ежедневно используется в наших приложениях, нашем доказательстве работоспособности.
Возможности
- Автономность: один ANE, без базовой библиотеки и зависимых ANE
- Один вызов возвращает идентификатор устройства на Android и iOS
- Android 8.0 и новее: остаётся прежним после удаления и повторной установки приложения, пока оно подписано тем же ключом
- Разрешения не нужны
- Возвращает пустую строку там, где идентификатор недоступен, но никогда не ошибку
Поддерживаемые платформы
На других платформах isSupported возвращает false, поэтому один и тот же код можно оставить в кроссплатформенном приложении.
Начало работы
Добавьте расширение в дескриптор вашего приложения:
<extensions>
<extensionID>com.klug.deviceid</extensionID>
</extensions>
Примеры кода
Три полных сценария. Геттеры возвращаются сразу, не требуют разрешений и никогда не выбрасывают исключений: там, где идентификатор недоступен, они возвращают пустую строку. Полная документация →
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 ); }
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
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 | True на Android и iOS. |
| uniqueId | Идентификатор устройства текущей платформы: ANDROID_ID на Android, identifierForVendor на iOS; пустая строка там, где недоступен. |
| androidId | Только идентификатор устройства Android, остающийся прежним после удаления и повторной установки; пустая строка на iOS и других платформах. |
Купить KlugDeviceId
Годовая лицензия на одно приложение AIR со всеми обновлениями в течение 12 месяцев. После оплаты вы получаете расширение, библиотеку ActionScript и документацию по e-mail, обычно в течение одного рабочего дня. Лицензия и условия
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Без поддержки
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 7 дней
- Лицензия на одно приложение AIR
- Все обновления в течение 12 месяцев
- Ответ по e-mail в течение 48 часов
Требования
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 17 или новее |
| Android | Android 6.0 (API 23) или новее |
| Разрешения | Нет |