0

我想知道如何克服iOS 7 udid issue

我们已经尝试过:我们已经实现了vendorUniqueID,正如苹果公司建议的那样,一旦用户卸载应用程序就会改变它,因此不是一个好的选择。

广告唯一 ID 不是一种选择;正如Apple建议的那样,建议仅用于广告目的。由于我们的应用程序不是广告展示应用程序。

我们需要知道的是:我们已经有了恢复 ID,有没有办法store that restoration ID可以在重新安装应用程序后检索它。

我想知道 Google 分析“和 Flurry 分析”是如何跟踪的。

4

2 回答 2

5

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

于 2013-10-03T20:49:13.287 回答
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);

}
于 2013-10-06T05:51:45.953 回答