在做流量精灵的时候有这样一个需求,帐户默认需要取手机的imsi 信息。这就有一个好处,即便用户删除我们的应用后从新下载,下次进入时他们还会以同样的身份登陆,并且获得原先纪录。这样不仅对于开发公司人员来说可以统计他是不是新用户,而且对于用户来说可以不用担心之前记录是否被删除。(——我们的软件是不需要注册的,只要用户登录就默认以imsi 为唯一标示来登记的)。

但是在iOS开发中,发现不同的系统如 iOS5、iOS6.0、以及iOS7,苹果对它处理的态度是完全不同的。估计苹果是对系统安全的考虑,6.0之后你若想取这些私密信息是完全不可能的。所有的函数都已经被封锁。 虽说作为一个开发来说很不愿意看得此景,但另一方面作为一个乔布斯粉丝的我来说,完全可以理解苹果的此举。(反过来想一想,若你是一个用户,而你手机中装的每个软件都可以在任意情况下获取你的 私密信息如:imsi,imei,手机号码或者你的地理位置信息。 那是多么可怕的一件事情。——乔布斯当初不想开放iOS开发给世界就是为了不让其他人污染了他的商店,污染用户,污染了系统)。

基于种种原因,我还是相对崇拜乔布斯的。

既然不能直接解决问题,那么我们就尝试着解决吧:这里也尝试过几种吧

1、利用 NSUserDefaults 存取

- (NSString*)uniqueAppInstanceIdentifier

{

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];

static NSString* UUID_KEY = @"MPUUID";

NSString* app_uuid = [userDefaults stringForKey:UUID_KEY];

if (app_uuid == nil) {

CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);

CFStringRef uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);

app_uuid = [NSString stringWithString:(__bridge NSString*)uuidString];

[userDefaults setObject:app_uuid forKey:UUID_KEY];

[userDefaults synchronize];

CFRelease(uuidString);

CFRelease(uuidRef);

}

return app_uuid;

}

这种方法可以保证用户不删除软件情况下的获取同一个数据。因为NSUserDefaults 数据时保存在 沙盒里面的,会随着软件删除而被清空。

2、利用  [[UIDevice currentDevice] identifierForVendor].UUIDString

此方法是官方6.0系统后推出的,指定唯一标示符号;不同软件,不同机器,运行的时候指都是不一样的;也就是说可以满足标识唯一性,前一段时间我都是用该方法来获取数据的。  但是有个让人纠结的问题:

a、大部分正版的手机在软件卸载了,然后重新安装的情况下还是会保持和原先保存同一个值。

b、我一直以为这个方法没问题的同时,在某一天,突然有个测试说:“我软件卸载了,但是数据都清空了。。。。怎么回事啊。”,后来发现 you right。有些越狱或者美版的手机 在卸载后都会重现获取数据。------我的天哪。。。。

最方便的方案,就那么被否决,还是有些失落!

也基于这些现在才有空重新来思考这个问题.... 设备唯一标示符,并且这个标示符在软件卸载重装之后能和原先保持一致.....

3、KeyChian 方案

这个方案我开发之间就一直知道,也给新中大弄个过,只是自己完全不想弄。理由很简单,一个工具软件这样弄有什么意思呢?对于没用的开发我向来都是很反感,很讨厌的。   人们总想着完美的东西,却压根不知道自己所要的完美是什么东西,总是说以后会有用的,总以为这样就会让自己变得成为一个思考全面的人。   可是在我认为并非如此,大部分都这样思考,都是由于本身思考的太少,将来太过于迷茫,而又保守于不想犯错而已..........还记得刚毕业的时候那样一句话:“做一个万能的东西是万万不能的.....也不要整天为以后的因素来进行编码。”   所以我的答案很简单:你要清楚的知道你要什么,我也会给你清楚的答案。

言归正转:

KeyChian 是保存在沙盒之外的存储数据,相当于Dictionary, 所有应用都可以获取和保存,因此当一个软件卸载之后完全不影响里面的数据,这样当软件重新安装之后,理所当然的可以获取里面的原数据。

这里我用的还是别人封装过的一些代码SFHFKeychainUtils(可以在网上任意下载):

//保存数据

BOOL s = [SFHFKeychainUtils storeUsername:name andPassword:pswd forServiceName:server updateExisting:NO error:nil];

//获取密码

NSString * psw = [SFHFKeychainUtils getPasswordForUsername:name andServiceName:server error:nil];

好吧,此方案完结。

iOS 开发获取唯一标识的更多相关文章

  1. ios开发-获取手机相关信息

    今天在做客户端的时候,里面有个意见反馈功能. 调用系统带的邮件功能,发送邮件到指定邮箱. 然后我就想,应该在邮件正文部分添加手机相关内容,比如型号,版本,应用程序的版本等等,这样不仅使用者方便,开发者 ...

  2. IOS 生成设备唯一标识

    前言 iOS设备5.0以上放弃使用[[UIDevice currentDevice] uniqueIdentifier]来获得设备唯一ID iOS设备私有方法禁止用户获取和使用IMEI 需求 需要一个 ...

  3. iOS 设备获取唯一标识符汇总

    在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”. ...

  4. iOS开发-获取属性和方法

    iOS开发数据存储有两种方式,属性列表和对象编码,属性列表可以通过NSArray,NSMutableArray,NSMutableDictionary,存储对象我们可以通过归档和解档来完成.如果我们想 ...

  5. NX二次开发-获取WCS标识

    函数:UF_CSYS_ask_wcs() 函数说明:获取工作坐标系对象的标识. 用法: 1 #include <uf.h> 2 #include <uf_csys.h> 3 e ...

  6. Unity3d获得Android和ios设备的唯一标识

    android为mac地址,ios为advertisingIdentifier 函数都比较简单,网上也搜得到,我也就不多说了,主要是对于我们没做过安卓和IOS开发的人来说,整合进工程有各种的问题. 我 ...

  7. NX二次开发-获取WCS标识UF_CSYS_ask_wcs

    NX9+VS2012 #include <uf.h> #include <uf_csys.h> UF_initialize(); //获取WCS标识 tag_t WcsId = ...

  8. 怎样获取ios设备的唯一标识

    非常多地方都会须要用到唯一标志. 比方: 1. 我们相用一个设备的唯一标志当作用户id,特别是网络游戏,这样就能够省去注冊的麻烦. 2. 想把app相关的文件加密,密钥哪里来的?有些人可能会说hard ...

  9. iOS开发 获取手机信息(UIDevice,NSBundle,NSlocale)

    在开发中,需要获取当前设备的一些信息,可以通过UIDevice,NSbundle,NSlocale获取. UIDevice UIDevice 提供了多种属性,类函数及状态通知,可以检测手机电量,定位, ...

随机推荐

  1. POJ3420Quad Tiling(矩阵快速幂)

    Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3740 Accepted: 1684 Descripti ...

  2. 【Linux命令与工具】磁盘与目录的容量——df和du

    df(disk free):列出文件系统的整体磁盘使用量 用法: df [-akmhi] [目录或文件名] 参数: -a: 列出所有的文件系统,包括系统特有的/proc等文件系统 -k: 以KB的容量 ...

  3. TextGrocery中文文本分类处理

    详细使用说明:http://textgrocery.readthedocs.io/zh/latest/index.html TextGrocery是一个基于LibLinear和结巴分词的短文本分类工具 ...

  4. vim操作集合

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  5. 【转】ini载入保存类,操作INI配置文件方便的很

    /****************************************************************** * * ^_^ 恶猫 独门商标 挖哈哈 * * QQ:\> ...

  6. [问题2014A01] 解答三(升阶法,由董麒麟同学提供)

    [问题2014A01] 解答三(升阶法,由董麒麟同学提供) 引入变量 \(y\),将 \(|A|\) 升阶,考虑如下行列式: \[|B|=\begin{vmatrix} 1 & x_1-a & ...

  7. GZFramwork快速开发框架演练之会员系统(三)添加会员等级管理

    1.设计会员等级表结构 创建语句: from sysobjects where id = object_id('tb_MembersLevel') and type = 'U') drop table ...

  8. EasyUI中动态生成标签页

    这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...

  9. HDU 5775 Bubble Sort(冒泡排序)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  10. cpp blog上面看到一哥们写的 下拉列表

    #ifndef DROPDOWNLIST_H_INCLUDED#define DROPDOWNLIST_H_INCLUDED namespace azl{ #define DROPDOWNLIST_N ...