Question

I would like to know about how to overcome with iOS 7 udid issue.

What we have tried: we have already implemented vendorUniqueID, well as Apple suggested it will be changed once user uninstall the app, thus is not good option.

Advertisement unique id is not an option; as Apple suggested that it is recommended to use for advertisement purpose only. As our app is not advertisement showcase app.

What we need know: we already have restoration id, is there a way to store that restoration ID such that it can be retrieved once the application is reinstalled.

I was wondering how the Google analytic' and Flurry analytic' are tracking.

Was it helpful?

Solution

You can do this by performing following steps.

1) #import <Security/Security.h> in your project.

2) Save your detail to keychain using SecItemAdd method.

-(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) Get Stored data from keychain even if you have deleted an application.

-(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) If you want to delete this attribute dictionary from keychain you can do that.

-(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);

}

OTHER TIPS

Any information you store into the keychain will be restored even if the app is deleted.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top