iOS 获取手机 唯一标识


存贮在 keychainQuery 可以统计用户使用情况

-(void)gatherMessage{


    //采集用户设备信息


    NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];


    NSDate *loadDate=[NSDate date];


    NSDate *lastData=[userDefaults valueForKey:@"loadForDay"];


    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];


    [dateFormatter setDateFormat:@"YYYY/MM/dd"];


    NSString *lastd=[dateFormatter stringFromDate:lastData];


    NSString *nowd=[dateFormatter stringFromDate:loadDate];


    if (![lastd isEqualToString:nowd]) {


        [userDefaults setObject:loadDate forKey:@"loadForDay"];


        //获取设备型号


        NSString *deviceModel=[CommenData getCurrentDeviceModel];


    


        //identifierForVendor 作为唯一标识


        NSString *identifierStr = [[[UIDevice currentDevice] identifierForVendor] UUIDString];


        NSString * const KEY_USERNAME_PASSWORD = @"com.int-yt.kyks.usernamepassword";


        NSString * const KEY_PASSWORD = @"com.int-yt.kyks.password";


        NSMutableDictionary *usernamepasswordKVPairs = [NSMutableDictionary dictionary];


        [usernamepasswordKVPairs setObject:identifierStr forKey:KEY_PASSWORD];


    


        NSMutableDictionary *readUserPwd = (NSMutableDictionary *)[CommenData load:KEY_USERNAME_PASSWORD];


        if(readUserPwd==nil){


            //


            [CommenData save:KEY_USERNAME_PASSWORD data:usernamepasswordKVPairs];


            readUserPwd = (NSMutableDictionary *)[CommenData load:KEY_USERNAME_PASSWORD];


          


        }


        //调用接口纪录登陆信息


        


        NSString *string= [NSString stringWithFormat:@"%@cdpt/api/uselog?access_token=123&imeiid=%@&mtype=%@&device_platform=2",BaseURLString, [readUserPwd objectForKey:KEY_PASSWORD],deviceModel];


        


        NSURL *url = [NSURL URLWithString:string];


        NSURLRequest *request = [NSURLRequest requestWithURL:url];


        NSLog(@"%@",string);


        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];


        operation.responseSerializer = [AFJSONResponseSerializer serializer];


        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {




        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {




        }];


        [operation start];


    }


}


//


+ (void)save:(NSString *)service data:(id)data {


    //Get search dictionary


    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];


    //Delete old item before add new item


    SecItemDelete((__bridge CFDictionaryRef)keychainQuery);


    //Add new object to search dictionary(Attention:the data format)


    [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__bridge id)kSecValueData];


    //Add item to keychain with the search dictionary


    SecItemAdd((__bridge CFDictionaryRef)keychainQuery, NULL);


}




+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service {


    return [NSMutableDictionary dictionaryWithObjectsAndKeys:


            (__bridge id)kSecClassGenericPassword,(__bridge id)kSecClass,


            service, (__bridge id)kSecAttrService,


            service, (__bridge id)kSecAttrAccount,


            (__bridge id)kSecAttrAccessibleAfterFirstUnlock,(__bridge id)kSecAttrAccessible,


            nil];


}




//


+ (id)load:(NSString *)service {


    id ret = nil;


    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];


    //Configure the search setting


    //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue


    [keychainQuery setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];


    [keychainQuery setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];


    CFDataRef keyData = NULL;


    if (SecItemCopyMatching((__bridge CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) {


        @try {


            ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData];


        } @catch (NSException *e) {


            NSLog(@"Unarchive of %@ failed: %@", service, e);


        } @finally {


        }


    }


    if (keyData)


        CFRelease(keyData);


    return ret;


}






+ (void)delete:(NSString *)service {


    NSMutableDictionary *keychainQuery = [self getKeychainQuery:service];


    SecItemDelete((__bridge CFDictionaryRef)keychainQuery);


}




//获得设备型号


+ (NSString *)getCurrentDeviceModel


{


    int mib[2];


    size_t len;


    char *machine;


    mib[0] = CTL_HW;


    mib[1] = HW_MACHINE;


    sysctl(mib, 2, NULL, &len, NULL, 0);


    machine = malloc(len);


    sysctl(mib, 2, machine, &len, NULL, 0);


    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];


    free(machine);


    return platform;


}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值