← 所有扩展

原生扩展

KlugDeviceId

com.klug.deviceid

无需 APM。下载即用,再简单不过。

为 Android 和 iOS 上的 AIR 应用提供每台设备的稳定标识符,直接从系统读取。

iOSAndroid 已投入生产 €19 / 年起 · 购买

概览

许多应用需要识别设备:将试用或许可绑定到设备、限制每个账户的设备数量,或在用户重新安装应用后再次找到该设备。KlugDeviceId 直接从操作系统读取稳定的标识符。

在 Android 上,卸载并重新安装应用后标识符保持不变,因此是不受重新安装影响的锚点。在 iOS 上,当同一开发者的所有应用都被移除时,系统标识符会被重置;若要在 iOS 和 macOS 上获得不受重新安装影响的锚点,请使用 KlugKeychain。

KlugDeviceId 每天都在我们的应用中使用,这就是我们的概念验证。

特性

  • 自成一体:一个 ANE,无需添加核心库或依赖 ANE
  • 一次调用即可在 Android 和 iOS 上返回设备标识符
  • Android 8.0 及更高版本:只要使用相同的密钥签名,卸载并重新安装应用后保持不变
  • 无需权限
  • 在没有可用标识符时返回空字符串,绝不报错

支持的平台

Android arm64 · armv7
iOS arm64

在其他平台上,isSupported 返回 false,因此同一份代码可以保留在跨平台应用中。

入门

将扩展添加到您的应用描述文件中:

app.xml
<extensions>
    <extensionID>com.klug.deviceid</extensionID>
</extensions>

代码示例

三个完整流程。这些 getter 立即返回,无需权限,也绝不抛出异常:在没有可用标识符时它们返回空字符串。完整文档 →

1 · 读取一次并随登录一同发送
Login.as
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)
Trial.as
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 · 跨平台代码与空值
Device.as
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 应用的年度许可,含 12 个月内的所有更新。付款后,您将通过电子邮件收到扩展、ActionScript 库和文档,通常在一个工作日内。许可与条款

基础版
€19 / 年
  • 一个 AIR 应用的许可
  • 12 个月内的所有更新
  • 不含支持
购买基础版
标准版
€149 / 年
  • 一个 AIR 应用的许可
  • 12 个月内的所有更新
  • 7 天内通过电子邮件答复
购买标准版
优先版
€299 / 年
  • 一个 AIR 应用的许可
  • 12 个月内的所有更新
  • 48 小时内通过电子邮件答复
购买优先版
税费在结账时由 Link (Stripe) 计算。您需要在结账时输入 AIR 应用的应用 ID。

要求

AIR SDK51.x (HARMAN)
iOSiOS 17 或更高版本
AndroidAndroid 6.0 (API 23) 或更高版本
权限无