公司给App开账号是按照端口来开的,每个购买的客户都会给一个端口,甚至App里面一些模块也是根据端口给权限,没花钱的用户只能看着弹框提示不能用...公司太抠了 服务端的哥们就要我们移动端把设备的唯一标识符传给服务器,安卓很简单 iOS就麻烦一点
UDID(Unique Device Identifier)它是苹果设备的唯一识别码 由40位16进制数的数字和字母组成 获取代码 NSString *uuid =[ [UIDevice currentDevice] uniqueIdentifier]; 然而 iOS5.0以后 苹果为了保户用户的私人信息 就不再让开发者通过代码访问UDID的权限 应用试图获取DID也被禁止上架。
CFUUID 。 它是CoreFoundaio包的一部分,获取代码 CFUUIDRef *cfuuid = CFUUIDCreate(kCFAllocatorDefault); NSString *cfuuidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid)); 每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符 系统没有保存。
NSUUID它在iOS 6中才出现,跟上面的CFUUID几乎完全一样,只不过它是Objective-C接口。获取代码 NSString *uuid = [[NSUUID UUID] UUIDString];
UUID(Universally Unique Identifier) 中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。这样,每个人都可以建立不与其它人冲突的 UUID。在此情况下,就不需考虑数据库建立时的名称重复问题。苹果建议使用UUID为应用生成唯一标识字符串,系统也没有帮我们储存。
广告标示符(IDFA-identifierForIdentifier)广告标示符,在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的。但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是戳戳有余了。 它是iOS 6中另外一个新的方法,提供了一个方法advertisingIdentifier,通过调用该方法会返回一个NSUUID实例,最后可以获得一个UUID,由系统存储着的。#import <AdSupport/AdSupport.h> NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。 关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广 告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。 所以IDFA也不可以作为获取唯一标识的方法,来识别用户。
Vendor标示符 (IDFV-identifierForVendor)它是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.taobao.app1, com.taobao.app2 这两个BundleID来说,就属于同一个Vender,共享同一个IDFV的值。和IDFA不同的是,IDFV的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。 它是iOS 6中新增的,跟advertisingIdentifier一样,该方法返回的是一个 NSUUID对象,可以获得一个UUID。如果满足条件“相同的一个程序里面-相同的vendor-相同的设备”,那么获取到的这个属性值就不会变。如果是“相同的程序-相同的设备-不同的vendor,或者是相同的程序-不同的设备-无论是否相同的vendor”这样的情况,那么这个值是不会相同的。 NSString *strIDFV = [[[UIDevice currentDevice] identifierForVendor] UUIDString];但是如果用户将属于此Vender的所有App卸载,则IDFV的值会被重置,即再重装此Vender的App,IDFV的值和之前不同。
推送token+bundle_id推送token+bundle_id的方法: 1、应用中增加推送用来获取token 2.获取应用bundle_id 3、根据token+bundle_id进行散列运算apple push token保证设备唯一,但必须有网络情况下才能工作,该方法并不是依赖于设备本身,而是依赖于apple push机制,所以当苹果push做出改变时, 你获取所谓的唯一标识也就随之失效了。所以此方法还是不可取的。
总结
说了那么多, 好像没有一种方法是好用的。没错, 其实自从苹果废除UDID后, 就不能达到获取设备真正的唯一标识了。因为这些方法中导致获取的唯一标示产生改变的原因, 或是重新调用方法, 或是卸载应用,或是重启设备, 或是还原某些标识, 或者刷新系统… 所以,不能从根本上获取唯一标识 只能尽可能的接近
利用keyChain(钥匙串 系统级别储存)和UUID永久获得设备的唯一标识 iOS的keychain服务提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keychain存储。相对于NSUserDefaults、文件保存等一般方式,keychain保存更为安全,而且keychain里保存的信息不会因App被删除而丢失,所以在重装App后,keychain里的数据还能使用,刷机或系统升级的话就不能用了。使用钥匙串需要导入Security.framework 别忘了xcode 中Capabiities目录下的Keychain Sharing开关也要打开。