Objective c 找到iOS 7 UDID的任何其他选项?

Objective c 找到iOS 7 UDID的任何其他选项?,objective-c,google-analytics,ios7,flurry,udid,Objective C,Google Analytics,Ios7,Flurry,Udid,我想知道如何克服iOS 7 udid问题 我们的尝试:我们已经实现了vendorUniqueID,苹果建议一旦用户卸载应用程序,它就会被更改,因此这不是一个好的选择 广告唯一id不是一个选项;正如苹果公司建议的,建议仅用于广告目的。因为我们的应用程序不是广告展示应用程序 我们需要知道的是:我们已经有了恢复id,是否有方法存储该恢复id,以便在重新安装应用程序后可以检索该id 我想知道Google Analytical和Flurry Analytical是如何跟踪的。即使删除了应用程序,您存储在钥

我想知道如何克服iOS 7 udid问题

我们的尝试:我们已经实现了vendorUniqueID,苹果建议一旦用户卸载应用程序,它就会被更改,因此这不是一个好的选择

广告唯一id不是一个选项;正如苹果公司建议的,建议仅用于广告目的。因为我们的应用程序不是广告展示应用程序

我们需要知道的是:我们已经有了恢复id,是否有方法存储该恢复id,以便在重新安装应用程序后可以检索该id


我想知道Google Analytical和Flurry Analytical是如何跟踪的。

即使删除了应用程序,您存储在钥匙链中的任何信息都将被恢复。

您可以通过执行以下步骤来实现这一点

1在项目中导入

2使用SecItemAdd方法将您的详细信息保存到keychain

3从钥匙链获取存储的数据,即使您已删除应用程序

-(void) getCredentialsForServer:(NSString*)server {

    // Create dictionary of search parameters
    NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:kSecClassInternetPassword,  kSecClass, server, kSecAttrServer, kCFBooleanTrue, kSecReturnAttributes, nil];

    // Look up server in the keychain
    NSDictionary* found = nil;
    OSStatus err = SecItemCopyMatching((CFDictionaryRef) dict, (CFDictionaryRef*) &found);
    if (!found) return;

    // Found
    NSString* user = (NSString*) [found objectForKey:kSecAttrAccount];
    NSString* pass = [[NSString alloc] initWithData:[found objectForKey:kSecValueData] encoding:NSUTF8StringEncoding];
    UIAlertView * alertView=[[UIAlertView alloc] initWithTitle:@"Key found" message:[NSString stringWithFormat:@"user : %@ pass :%@",user,pass] delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil] ;
    [alertView show];
    NSLog(@"user %@ : pass  %@", user,pass);

}
4如果您想从keychain中删除此属性字典,可以这样做

-(void) removeAllCredentialsForServer:(NSString*)server {

    // Create dictionary of search parameters
    NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:kSecClassInternetPassword,  kSecClass, server, kSecAttrServer, kCFBooleanTrue, kSecReturnAttributes, kCFBooleanTrue, kSecReturnData, nil];

    // Remove any old values from the keychain
    OSStatus err = SecItemDelete((CFDictionaryRef) dict);

}

不久前我注意到了这一点。有关于这种行为的文件吗?我只是假设这是一个缺陷,因为它绕过了跟踪预防目标。不确定。这样已经有很长一段时间了,但是你需要搜索/阅读keychain文档来查找明确的引用。谢谢
-(void) removeAllCredentialsForServer:(NSString*)server {

    // Create dictionary of search parameters
    NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:kSecClassInternetPassword,  kSecClass, server, kSecAttrServer, kCFBooleanTrue, kSecReturnAttributes, kCFBooleanTrue, kSecReturnData, nil];

    // Remove any old values from the keychain
    OSStatus err = SecItemDelete((CFDictionaryRef) dict);

}