我正在开发一个iOS应用程序,它调用Web服务进行登录,当时我将登录凭据与供应商标识符(IdentifierForVendor)一起发送到Web服务器,以便为这些凭据唯一标识设备.因此,用户只能有一个设备和一个凭据.

我找到了供应商的身份证明

NSString *uuid = [[UIDevice currentDevice] identifierForVendor].UUIDString

下次用户打开应用程序并try 从Web服务器下载数据时,首先将用户设备上的本地标识符ForVendor与存储在Web服务器上的标识符进行比对,然后再将该标识符存储在Web服务器数据库中,当用户打开应用程序并try 从Web服务器下载数据时,首先将用户设备上的本地标识符ForVendor与Web服务器上存储的标识符进行比较.

用户卸载并重新安装APP时出现问题,我发现IdentifierForVendor已更改.因此用户无法继续.

我阅读了苹果文档UIDevice Documentation

如上所述,如果来自同一供应商的所有应用程序都从设备上卸载,那么在新安装来自该供应商的任何应用程序时,来自该供应商的任何应用程序都将采用新的IdentifierForVendor.

那么,在我的情况下,该如何处理这件事呢?

推荐答案

你可以把它放在 keys 链里

-(NSString *)getUniqueDeviceIdentifierAsString
{

 NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];

 NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
 if (strApplicationUUID == nil)
 {
    strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
 }

 return strApplicationUUID;
}

Ios相关问答推荐

在Swift5中,将某些属性值从一个类复制到另一个类实例

在选项卡内列出导航内视图断开导航标题的动画

如何解释在SwiftUI视图中观察到持续的数据更改

如何在SwiftUI中基于嵌套视图中的状态动态显示外部视图的内容?

Flutter 翼项目.升级到XCode 15.0.1`pod install`抛出错误FlutterMacOS.podspec.json 3.13.2的ParserError

如何在不将应用程序留在SwiftUI上的情况下更改语言?

OBJC @selector 在另一个实现中不起作用

在 Android 和 iOS 应用程序上下文中阻止后台线程有哪些缺点?

当虚拟对象附加到其网格时,如何刷新创建 ARView 的 SwiftUI UIViewRepresentable?

保存和读取登录到 keys 串不工作 IOS swift

@Query与SwiftData数据列表绑定

在 iOS 上启用明文本地流量在 .NET MAUI 中不起作用

Flutter动画放大图

如何在 Mac OS Ventura 中使用 Xcode 13

将值传递给导航链接视图中的文本框

如何在通用应用程序中同时支持 iPad 和 iPhone 视网膜图形

何时需要将应用程序源包含在测试目标中?

使用 AVAudioPlayer 播放声音

正确使用 Alamofire 的 URLRequestConvertible

将 struct 保存到 UserDefaults