当我们使用中心设备进行扫描的时候,即在
方法中,我们就可以通过扫描到的蓝牙外设的名字(peripheralname)来进行针对性的 *** 作。
有一些公司的外部设备的名字都是一样的,但是进行连接或者其他 *** 作的时候,没必要知道具体的是哪一台设备,那么就可以使用蓝牙外设的UUIDString(即peripheralidentifierUUIDString)来作为唯一标识。但是,需要注意的一点:不同的中心设备(也可以说是不同的手机)对于同一台蓝牙设备,获取到的UUIDString是不一样的。
举例说明一下:对于同一台蓝牙设备,我的手机进行扫描,然后读取它的UUIDString,和你的手机进行扫描,获取到的UUIDString是不同的。
针对这种情况,我们只能获取蓝牙设备的mac地址来作为唯一标识。但是,苹果公司也许是出于安全考虑,并没有对我们开放获取蓝牙设备的mac地址的接口(安卓开发是可以获取的)。那么我们只能自己通过某种手段来获取mac地址,有两种方法可以让我们获取到mac地址:
第一种:将mac地址放在蓝牙设备的广播数据之中,然后在广播的时候,将mac地址以广播的形式发送出来以供我们获取。
第二种:将mac地址写在某一个特征通道中,当我们连接蓝牙设备之后,通过某一个特征通道来获取mac地址。
原文
凡是接触过iOS的开发者都清楚每一台iOS设备都有一个唯一的识别号:UDID,这个40位的字符串是你的设备区别于其他任何一台设备的唯一标识。
这个字符串用处非常大,可以把它作为用户的唯一ID,跳过用户登陆这一步,直接有效并且安全地与数据库中的用户记录进行绑定。
虽然UDID本身并不含有任何用户信息,但是由于应用开发者可以将UDID与服务器上用户信息进行绑定,从而带来了诸多隐私泄漏等问题,所以苹果最终还是拒绝开发者访问UDID的官方接口,建议开发者使用CFUUID来代替UDID。CFUUID有很多问题,如果从一台设备将系统备份到另一个设备,两个设备就会拥有相同的CFUUID,如果从临时文件中备份系统,就会出现一个设备中出现不同的CFUUID,但是尽管如此,CFUUID还是所有UDID替代品中最靠谱的一个。
除此之外,一些第三方开发者也基于CFUUID包装了对用户更友好的类,OpenUDID是开发者使用的比较广泛的一个。
借助PP助手查看设备标识信息教程:首先在电脑上安装好PP助手1、将iPhone/iPad/iPod连接电脑端的PP助手,点击设备名称→查看更多信息。2、在d出来的设备详细信息框里,就可以查看到设备标识 ,若要复制该信息,可以点击下方“在记事本中打开”。3、用记事本打开后即可选择需要复制的信息进行复制 *** 作了。
使用KeyChain婧突袢DIDiOS7获取唯一标示符的方法
一、iOS不用版本获取UDID的方法比较
1)iOS 50
iOS 20版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果觉得可能会泄露用户隐私,所以在 iOS 50之后该方法就被废弃掉了。
而且苹果做的更狠,今年5月份以后提交App Store的产品都不允许再用uniqueIdentifier接口,甚至有些朋友因为代码中有UDID还被打回来,看来这条路是被封死了。
2)iOS 60
iOS 60系统新增了两个用于替换uniqueIdentifier的接口,分别是:identifierForVendor,advertisingIdentifier。
IOS系统中,获取设备唯一标识的方法有很多:
一UDID(Unique Device Identifier)
UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。
二UUID(Universally Unique Identifier)
UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码
三MAC Address
四OPEN UDID
五广告标示符(IDFA-identifierForIdentifier)
六Vindor标示符 (IDFV-identifierForVendor)
Vendor是CFBundleIdentifier(反转DNS格式)的前两部分。来自同一个运营商的应用运行在同一个设备上,此属性的值是相同的;不同的运营商应用运行在同一个设备上值不同。
经测试,只要设备上有一个tencent的app,重新安装后的identifierForVendor值不变,如果tencent的app全部删除,重新安装后的identifierForVendor值改变。
但是很不幸,上面所有这些表示设备唯一号的标识,在IOS7中要么被禁止使用,要么重新安装程序后两次获取的标识符不一样。
由于IOS系统存储的数据都是在sandBox里面,一旦删除App,sandBox也不复存在。好在有一个例外,那就是keychain(钥匙串)。
通常情况下,IOS系统用NSUserDefaults存储数据信息,但是对于一些私密信息,比如密码、证书等等,就需要使用更为安全的keychain了。
keychain里保存的信息不会因App被删除而丢失。所以,可以利用这个keychain这个特点来保存设备唯一标识。
那么,如何在应用里使用使用keyChain呢,我们需要导入Securityframework ,keychain的 *** 作接口声明在头文件SecItemh里。
直接使用SecItemh里方法 *** 作keychain,需要写的代码较为复杂,我们可以使用已经封装好了的工具类KeychainItemWrapper来对keychain进行 *** 作。
KeychainItemWrapper是apple官方例子“GenericKeychain”里一个访问keychain常用 *** 作的封装类,在官网上下载了GenericKeychain项目后,
只需要把“KeychainItemWrapperh”和“KeychainItemWrapperm”拷贝到我们项目,并导入Securityframework 。KeychainItemWrapper的用法:
/ 初始化一个保存用户帐号的KeychainItemWrapper /
KeychainItemWrapper wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number"
accessGroup:@"YOUR_APP_ID_HEREcomyourcompanyAppIdentifier"];
//保存数据
[wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount];
[wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData];
//从keychain里取出帐号密码
NSString password = [wrapper objectForKey:(id)kSecValueData];
//清空设置
[wrapper resetKeychainItem];
其中方法“- (void)setObject:(id)inObject forKey:(id)key;”里参数“forKey”的值应该是Securityframework 里头文件“SecItemh”里定义好的key,用其他字符串做key程序会出错!
什么是BundleID?BundleID(BundleIdentifier)是一款iOS应用的唯一标识,应用与BundleID之间是唯一对应关系。请注意:应用新建成功后,BundleID将不可修改,如必须修改只能创建一个新的应用,届时AppID、AppKey和AppSecret也将重新分配,旧版用户将无法收到针对新BundleID的推送。怎样查看应用的BundleID?在Xcode里如下位置可以查看应用的BundleID。
以上就是关于iOS-蓝牙设备的唯一标识问题全部的内容,包括:iOS-蓝牙设备的唯一标识问题、如何获取 iOS 设备的唯一 ID、iOS之怎样获取蓝牙设备的唯一标识等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)