Resumen
KlugKeychain guarda valores pequeños, como indicadores, tokens o ID, en el llavero de iOS y macOS. A diferencia del almacenamiento normal de la app, el llavero conserva estos valores cuando la app se desinstala y se vuelve a instalar.
Eso lo convierte en un ancla duradera para lo que una app necesita recordar entre reinstalaciones, por ejemplo si un dispositivo ya ha usado una prueba gratuita o si una cuenta se eliminó antes.
KlugKeychain se usa a diario en nuestras apps, nuestra prueba de concepto.
Funciones
- Autónoma: una ANE, sin biblioteca central ni ANE de dependencias que añadir
- Guardar, leer, comprobar y eliminar valores por clave
- Los valores sobreviven a la desinstalación y reinstalación de la app
- Cifrados por el sistema operativo en el llavero del sistema
- Una única API para iOS y macOS
- Llamadas síncronas sencillas, sin eventos que gestionar
Plataformas compatibles
En otras plataformas isSupported devuelve false, por lo que el mismo código puede permanecer en una app multiplataforma.
Primeros pasos
Añade la extensión al descriptor de tu aplicación:
<extensions>
<extensionID>com.klug.keychain.Keychain</extensionID>
</extensions>
En macOS la app debe firmarse con un entitlement de grupo de acceso al llavero. En iOS no se necesita ningún entitlement adicional.
Ejemplos de código
Tres flujos completos. Todas las llamadas son síncronas y devuelven de inmediato; los valores son cadenas. Documentación completa →
import com.klug.keychain.Keychain; var keychain:Keychain = Keychain.getInstance(); // iOS: always true. // macOS: true only if the app is signed with a keychain access group entitlement; // the extension checks this with a test write. // Android, Windows: false, and every call is a safe no-op. if ( !keychain.isSupported ) useLocalStorage(); // your app's fallback, e.g. a SharedObject
const TRIAL_DAYS:Number = 7; if ( keychain.has( "trialStarted" ) ) { var started:Number = Number( keychain.get( "trialStarted" ) ); var days:Number = ( new Date().time - started ) / 86400000; if ( days > TRIAL_DAYS ) showPurchaseScreen(); // your app } else { // stays in the keychain after the app is uninstalled and installed again keychain.set( "trialStarted", String( new Date().time ) ); }
// set() replaces an existing value; false = not stored if ( !keychain.set( "accountId", accountId ) ) trace( "keychain: value not stored" ); // get() returns "" when nothing is stored var id:String = keychain.get( "accountId" ); if ( id == "" ) showSignIn(); // your app // sign-out: remove what the app no longer needs; // true also when the key was already gone keychain.remove( "accountId" );
Resumen de la API
| Keychain.getInstance() | Devuelve la instancia única. |
| isSupported | Verdadero en iOS. En macOS, verdadero cuando la app está firmada con un entitlement de grupo de acceso al llavero; falso en otras plataformas. |
| set(key, value) | Guarda una cadena, sustituyendo la existente. Devuelve true si tiene éxito; false si no es compatible o si key o value son null. |
| get(key) | Devuelve el valor almacenado, o una cadena vacía si no hay ninguno. |
| has(key) | Verdadero si hay un valor almacenado para la clave. |
| remove(key) | Elimina el valor. Devuelve true cuando la clave ya no existe. |
| Almacenamiento | Elementos de contraseña genéricos de tu app, legibles tras el primer desbloqueo del dispositivo, también en segundo plano. |
Compra KlugKeychain
Una licencia anual para una aplicación AIR, con todas las actualizaciones durante 12 meses. Tras el pago recibes la extensión, la biblioteca ActionScript y la documentación por e-mail, normalmente en un día hábil. Licencia y términos
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Sin soporte
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 7 días
- Licencia para una aplicación AIR
- Todas las actualizaciones durante 12 meses
- Respuesta por e-mail en un plazo de 48 horas
Requisitos
| AIR SDK | 51.x (HARMAN) |
| iOS | iOS 17 o posterior |
| macOS | macOS 11 o posterior |
| Firma (macOS) | Entitlement de grupo de acceso al llavero |