如何在钥匙串中保存应用内购买状态

问题描述

用户可以在我的应用中购买$PsversionTable.Psversion。我现在的问题是,无论用户是否购买了产品,我都不知道如何正确存储信息。我读到-Version并不是最安全的方法,因此我尝试了pwsh.exe的尝试。为此,我使用了this辅助库。

在这是我尝试实现的方式:

non-consumable product

这将打印“ true”。但是,如果我注销该用户,然后使用另一个帐户登录,那么我只能称之为:

User Defaults

即使第二位用户尚未购买,它仍会打印出“ true”。然后如何在应用程序中存储IAP的状态?

解决方法

这完全取决于您的应用程序逻辑,钥匙串是否按预期工作:您将一些内容保存到其中,然后再次读出(未更改)。钥匙串无法知道您的应用程序中正在发生什么其他类型的逻辑。

也就是说,您可以做一些简单的事情,例如仅根据某种用户标识符将每个用户的解锁状态和不同的密钥存储在钥匙串中。

// holds the current logged in user ID
// this needs to be persisted across the user's session,// so store this somewhere like UserDefaults or the Keychain 
// (depending on your app's security model)
//
// I just use a simple variable for this example
var currentUserID = ""

// user 1 logs in,set:
currentUserID = "user1_"

keychain[currentUserID + "isPremium"] = "true"   
let token = try? keychain.get(currentUserID + "isPremium")
print(token as Any) 

// user 2 logs in,set:
currentUserID = "user2_"

keychain[currentUserID + "isPremium"] = "true"
let token = try? keychain.get(currentUserID + "isPremium")
print(token as Any)