gpt4 book ai didi

ios - iOS 中用于存储配置文件和检查 IAP 的用户 ID

转载 作者:行者123 更新时间:2023-11-29 00:54:52 25 4
gpt4 key购买 nike

我的应用程序有应用程序内货币和非消耗产品,它存储用户个人资料并将值发布到我的服务器上的排行榜上。

在 Android(纯 java)中,我有 LVL 用户 ID - 它对于开发者-客户对来说是唯一的,因此我可以轻松管理他所有设备上的用户配置文件,并且可以区分使用 IMEI 或 Android ID 的设备。

在 Windows/Windows Phone (monogame) 中,我有 LiveID,但设备除了用于统计/广告的自行生成的 UUID 之外没有 ID。无法确定它是否会持续重新安装和更新。

那么 iOS(也许还有 OSX)(Xamarin.iOS/monogame) 又如何呢?据我所知,iOS 中是设备 ID,但后来 api 被弃用了。您使用什么作为设备/用户 ID?也许 StoreKit 在幕后有一些用户唯一的 id?或者与云ID相关的东西,以区分用户,而不是设备?如果没有可用的 - 有没有办法让随机 UUID 永久保留在设备上,即使用户重新安装应用程序也是如此?

最佳答案

当 Apple 删除 UUID 时,他们提供了 identifierForVendor 方法(在 UIDevice 中)来替换它。它为您(开发人员)针对特定设备提供唯一的 UUID。我无法告诉您如何从 xamarin 中调用它,但我认为这是可能的。


如果您想要在应用程序删除后仍然存在的内容,您可以创建自己的 UUID 并将其保存到钥匙串(keychain)中。您可以使用应用组为您的所有应用创建共享钥匙串(keychain),如果您删除并重新安装应用,钥匙串(keychain)条目会保留。

Tertium:这是示例代码(已测试)。如果将其存储在云中,则可以在所有用户的设备上使用它。

        void SaveValueToKeychain(string key, String value)
{
var s = new SecRecord(SecKind.GenericPassword)
{
ValueData = NSData.FromString(value),
Generic = NSData.FromString(key),
Invisible = true,
CreationDate = NSDate.Now

};
var err = SecKeyChain.Add(s);

}

public String GetValueFromKeychain(string key)
{
String ret = null;
SecStatusCode res;
var rec = new SecRecord(SecKind.GenericPassword)
{
Generic = NSData.FromString(key)
};
var match = SecKeyChain.QueryAsRecord(rec, out res);
if (match != null)
{
ret = match.ValueData.ToString();
}
return ret;
}

...

        string UUID_KEY = "com.my.app";
String id = GetValueFromKeychain(UUID_KEY);

if (id == null)
{
Guid g = Guid.NewGuid();
String gs = g.ToString().Replace("-", "");
Debug.Write("ID not found, generating: " + gs);
SaveValueToKeychain(UUID_KEY, gs);
id = GetValueFromKeychain(UUID_KEY);
}
else
{
Debug.Write("ID found: " + id);
}

关于ios - iOS 中用于存储配置文件和检查 IAP 的用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37701247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com