概要
KlugKeychain は、フラグ、トークン、IDなどの小さな値を iOS と macOS のキーチェーンに保存します。通常のアプリストレージとは異なり、キーチェーンはアプリをアンインストールして再インストールしても、これらの値を保持します。
そのため、アプリが再インストールをまたいで記憶しておく必要があること、たとえば、デバイスがすでに無料トライアルを使用したか、アカウントが以前に削除されたかといった情報の永続的なアンカーになります。
KlugKeychain は、実証の場である当社のアプリで毎日使われています。
機能
- 自己完結型:ANE 1つで完結し、コアライブラリや依存 ANE の追加は不要
- キーを指定して値を保存、読み取り、確認、削除
- アプリをアンインストールして再インストールしても値が保持される
- システムキーチェーン内で、オペレーティングシステムによって暗号化
- iOS と macOS で共通の API
- 処理すべきイベントのない、シンプルな同期呼び出し
対応プラットフォーム
iOS arm64
macOS Apple silicon · Intel
他のプラットフォームでは isSupported が false を返すため、同じコードをクロスプラットフォームのアプリにそのまま残せます。
Android では、KlugDeviceId が同じ再インストール耐性のあるアンカーを提供します。アプリをアンインストールして再インストールしても、Android のデバイスIDは変わりません。
はじめに
アプリケーション記述子に拡張機能を追加します:
<extensions>
<extensionID>com.klug.keychain.Keychain</extensionID>
</extensions>
macOS では、アプリをキーチェーンアクセスグループの entitlement で署名する必要があります。iOS では追加の entitlement は不要です。
コード例
3つの完全なフローです。すべての呼び出しは同期的で、即座に返ります。値は文字列です。完全なドキュメント →
1 · 対応状況を確認してフォールバックを選ぶ
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
2 · 再インストールをまたいで無料トライアルを記憶する
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 ) ); }
3 · 値の保存、読み取り、削除
// 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" );
API 概要
| Keychain.getInstance() | 唯一のインスタンスを返します。 |
| isSupported | iOS では true。macOS では、アプリがキーチェーンアクセスグループの entitlement で署名されている場合に true。他のプラットフォームでは false。 |
| set(key, value) | 文字列を保存し、既存の値があれば置き換えます。成功すると true を返します。非対応、または key か value が null の場合は false。 |
| get(key) | 保存されている値を返します。ない場合は空文字列を返します。 |
| has(key) | そのキーに値が保存されていれば true。 |
| remove(key) | 値を削除します。キーが存在しなくなった時点で true を返します。 |
| ストレージ | アプリの汎用パスワード項目で、デバイスの最初のロック解除後は、バックグラウンドでも読み取れます。 |
KlugKeychain を購入
AIR アプリケーション1つ分の年間ライセンスで、12か月間のすべてのアップデートが含まれます。お支払い後、拡張機能、ActionScript ライブラリ、ドキュメントをメールでお送りします(通常は1営業日以内)。ライセンスと条件
税金は Link(Stripe)によりチェックアウト時に計算されます。チェックアウト時に、AIR アプリのアプリケーションIDを入力してください。
動作要件
| AIR SDK | 51.x(HARMAN) |
| iOS | iOS 17 以降 |
| macOS | macOS 11 以降 |
| 署名(macOS) | キーチェーンアクセスグループの entitlement |