我想知道如何克服iOS 7 udid issue
。
我们尝试过:我们已经实现了vendorUniqueID
,正如Apple建议用户卸载应用后它会被更改,因此不是一个好选择。
广告唯一ID不是一个选项; Apple建议仅建议用于广告目的。由于我们的应用程序不是广告展示应用程序。
我们需要知道的是:我们已经有了恢复ID,有没有办法store that restoration ID
,以便在重新安装应用程序后可以检索它。
我想知道谷歌分析是怎样的?和Flurry分析'跟踪。
答案 0 :(得分:5)
即使应用程序被删除,您存储在钥匙串中的任何信息都将被恢复。
答案 1 :(得分:5)
您可以执行以下步骤来执行此操作。
1)项目中的#import <Security/Security.h>
。
2)使用 SecItemAdd 方法将您的详细信息保存到钥匙串。
-(void) saveUsername:(NSString*)user withPassword:(NSString*)pass forServer:(NSString*)server {
// Create dictionary of search parameters
NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:kSecClassInternetPassword, kSecClass, server, kSecAttrServer, kCFBooleanTrue, kSecReturnAttributes, nil];
// Remove any old values from the keychain
OSStatus err = SecItemDelete((CFDictionaryRef) dict);
// Create dictionary of parameters to add
NSData* passwordData = [pass dataUsingEncoding:NSUTF8StringEncoding];
dict = [NSDictionary kSecClassInternetPassword, kSecClass, server, kSecAttrServer, passwordData, kSecValueData, user, kSecAttrAccount, nil];
// Try to save to keychain
err = SecItemAdd((CFDictionaryRef) dict, NULL);
}
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)如果你想从钥匙串中删除这个属性字典,你可以这样做。
-(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);
}