課金状況の確認にユーザーを管理するものがないので UUIDとKeychainでidを管理してみます。
storekit2で購入する際に app account token というのがあるのですがそこにも利用します。
すると 通知にも app account tokenが入り、ユーザーごとの管理もできます。
基本的に keychainを利用したら端末を跨いで管理できるので◎
注意点
- iCloud同期とプライバシー:
KeychainはiCloudと同期されるため、ユーザーが複数のデバイスで同じApple IDを使用している場合、そのデバイス間でデータが同期されます。もしiCloud同期を利用する場合、ユーザーのプライバシーを保護するため、どのデータが同期されるかを明示することが重要です。 - App Storeのガイドラインに準拠:
Keychainに保存する情報が広告目的やトラッキング目的に使用される場合、AppleのApp Storeのガイドラインに従う必要があります。個人データやプライバシーに関する取り決めは、必ずポリシーとして明示し、ユーザーの同意を得ることが求められます。
uuidを生成してstringで保存
let newUUID = UUID() newUUID.uuidString
保存した文字列 uuidStringをUUIDに
UUID(uuidString: uuidString)
keychainに保存、読み出し
import Security let query: [CFString: Any] = [ kSecClass: kSecClassGenericPassword, kSecAttrAccount: uuidKey, kSecValueData: uuid.data(using: .utf8)!, kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked ] // KeychainにUUIDを保存 let status = SecItemAdd(query as CFDictionary, nil)
status == errSecDuplicateItemですでにある場合は更新する。(基本更新はしない。
kSecClassGenericPasswordなのでパスワードと同列、macのkeychainなどで確認すると
load
let query: [CFString: Any] = [ kSecClass: kSecClassGenericPassword, kSecAttrAccount: uuidKey, kSecReturnData: true, kSecMatchLimit: kSecMatchLimitOne ] var result: AnyObject? let status = SecItemCopyMatching(query as CFDictionary, &result)
if status == errSecSuccess, let data = result as? Data, let uuid = String(data: data, encoding: .utf8) { dataはuuid stringで読めればOK
uuidのtransaction適用などはこちら↓

【StoreKit2 / Swift / iOSアプリ開発】StoreKit 2 で月額サブスクリプションを実装するぅ!!!サーバー通知も実装!
ちょっとサブスクリプションを確認したら、サーバーを通すチェックが必要とかfirebase使えるけどユーザーが増えると高額になるとか...vpsで自前で用意するのも止まると困るので。。。と考えていたら!?StoreKit2 は、アプ...
コメント