公司项目需要用到BLE以CBCentralManager的身份和硬件交互,开发过程中解决了一些遇到的问题和一些处理思路,这里简单记录一下。如果有什么问题或写的不对的地方希望大家可以一起讨论。
首先了解一下什么是BLE,蓝牙低能耗(Bluetooth Low Energy,或称Bluetooth LE、BLE,旧商标Bluetooth Smart,蓝牙版本40),也称低功耗蓝牙。相较经典蓝牙(蓝牙版本20),低功耗蓝牙旨在保持同等通信范围的同时显著降低功耗和成本。
与设备的交互使用的是16进制,所以要对发送的数据进行16进制转换,转换方法放在末尾
连接和操作一个设备就要持有这个设备对象,系统不维护设备对象的内存管理
发送数据异步回调可以封装一个任务机制,发送数据后生成一个任务,在收到想要的数据的时候关闭任务或者等待任务超时关闭任务。
iOS更换手机的时候设备的UUID会改变,如果想换手机后依然可以重连设备,就需要让设备端配合把设备唯一MAC地址放入广播内容中,给设备扩充MAC属性,根据MAC来选择设备进行连接,做到设备MAC和UUID的匹配
本篇只做了简单的功能介绍和使用,OTA部分需要按照实际协议来做。如果大家有遇到问题或者有好的主意可以找我一起讨论,万分荣幸。
iOS对蓝牙库进行了封装,封装在CoreBluetooth库,所以使用时
接下来是对一些名词的介绍
大致结构如下
注:一个CBPeripheral可以包含多个CBService ,而一个CBService 也可以包含多个CBCharacteristic 。
接下来介绍蓝牙从打开到连接到发送数据到接收数据的一整个流程
1首先肯定是权限设置,Infoplist里面加入
Privacy - Bluetooth Peripheral Usage Description
2然后是初始化中心管理者,初始化有三种方式,我使用的默认的初始化方法即
如果想自己设置线程和其他条件,则可以通过接下来的初始化方法一次性进行设置
3判断蓝牙状态,通过CBCentralManager的state来获取
4如果状态为打开,则可以进行搜索操作
注:如果连接和操作一个设备就要持有这个设备对象,系统不维护设备对象的内存管理
接下来就是一系列的代理事件了,我会把主要代理按照流程来进行说明,大致流程如下:
搜索-连接-连接成功/失败(设置外设代理,搜索服务)-搜索到服务(搜索特征)-搜索到特征-监听需要的特征(读写、读、写等根据情况来确定)-通过外设读写特征写入指令-收到设备返回信息-断开连接
接下来对每个代理来进行详细介绍
CBCentralManagerDelegate:中心管理者代理,负责搜索,设备状态的一些回调
CBPeripheralDelegate:外设代理,负责对外设的一些操作,特征的订阅,以及设备信息和消息的更新回调
搜索&连接
连接成功&失败
搜索到服务
搜索到特征
收到外设消息更新
断开设备连接
接下来介绍OTA升级
OTA是DFU(Device Firmware Update)的一种类型,准确说,OTA的全称应该是OTA DFU,就是设备固件升级的意思。只不过大家为了方便起见,直接用OTA来指代固件空中升级(有时候大家也将OTA称为FOTA)。
OTA升级并不复杂,只需要按照硬件定制的协议,把数据按照正常的写入方式发送给硬件即可(注意查看硬件是否规定数据的大小端),如果遇到问题可以找我,可以一起讨论。
16进制类型的字符串[A-F,0-9]和Data之间的转换可以使用下面的方法。如果是包含=之类的可以直接用字符串转换Data即可
打开所创建的「PersonalAccounts」应用。
在左侧项目结构树中,打开「Mainstoryboard」文件
当打开「Mainstoryboard」文件后,我们会在中间的主面板中看到一个带有「View Controller」字样的长的很像手机屏幕的“东西”。
这个东西就是我们“画”应用界面的主要“控件”。
默认的,我们可以在Xcode窗口的右下方找到所有Xcode现有的“控件”,它们在一个叫「Show the Object library」的窗口中。所有我们需要的,都可以从这个窗口中拖到主面板中的某个「Controller」上。
PS:以后我们称呼「Show the Object library」窗口为「对象仓库」。
在对象库中,我们可以看到有「XXXX Controller」还有「XXXX」两种控件。(Controller默认的以**的圆形唯底)
XXXX Controller,我们可以认为其是具有一定交互行为的页面控件。可以将在主面板中拖入的每一个Controller当成是将来要在APP中呈现的应用的页面。
PS:拖入「Navigation Controller」时较为特殊,其会自动生成一个“主页面”,此“主页面”是不能拖入其他控件的。其作用是「导航」其他页面。
制作Hello World
从「对象仓库」中,拖入一个名字为「Label」的控件对象到我们现有的也是唯一的视图控制器(View Controller)中。
PS:拖拽的过程中,可以体会一下对齐辅助线。
点击拖入的Label,可以在右方看到「控件属性栏」。在此栏中,我们可以看到当前选中控件的所有可用属性。
在「控件属性栏」中,编辑Label的「Text」属性为「Hello World!」。
PS:「Text」属性有两种模式,一种为「Plain」,另一种是「Attributed」。
通过切换这两种模式,我们可以发现「Plain」模式时,Label中文字的样式是不可编辑的。「Attributed」模式时,Label文字的模式是可以编辑的
运行
至此,第一个应用「Hello Wolrd」就完成了。我们可以在左上角处使用那个三角型来运行模拟器预览我们的应用。
数字货币,简称为DC,是英文Digital Currency的缩写,是电子货币形式的替代货币。数字货币和密码货币都属于数字货币。
数字人民币,是指由人民银行发行的数字形式的法定货币,主要用于满足国内零售支付需求。央行将数字货币(DCEP)定义为“具有价值特征的数字支付工具”,是中央银行的负债,由中央银行进行信用担保,具有无限法偿性。
SWIFT:全称“环球同业银行金融电讯协会”,是国际银行同业间的国际合作组织和国际结算系统,成立于1973年。目前,全球大多数国家的银行均已使用SWIFT系统。SWIFT的使用,为银行的结算提供了安全、可靠、快捷、标准化、自动化的通讯业务,从而大大提高了银行的结算速度。
简而言之,SWIFT是银行用来进行快速、安全跨境支付的主要安全信息系统,它可以保障国际贸易畅通无阻,已经成为当前国际贸易金融服务的主要机制。目前,几乎全球所有的金融机构都在使用SWIFT系统的服务。
目前,大家都在关注正在进行之中的俄乌战争,2月26日,美国、欧盟、英国和加拿大发表共同声明,宣布禁止俄罗斯使用SWIFT(环球同业银行金融电讯协会)系统。
有观点认为,数字货币将改变未来的贸易结算方式,SWIFT系统将会被数字货币所取代。那么,这一认识是否正确呢?要搞明白这一问题, 需要弄清数字货币与SWIFT以及清算方式之间的区别:
一、性质不同
数字货币是电子版的货币,如数字人民币,它在我们的现实生活中,就是电子版的人民币。它与支付宝、微信支付不一样,后者仅是一种支付和结算手段。
而 SWIFT实际上是一种多币种的电文处理系统,是国际支付结算体系中的电讯通道。因此,SWIFT从本质上看与支付宝、微信的支付平台功能很相似,也可以把它看作是一种支付方式,一种结算系统。
区别在于,SWIFT结算的货币主要是美元,而支付宝、微信结算的货币是人民币。
事实上,SWIFT主要用于信息流传递,不涉及具体清算,也不影响资金流。
二、SWIFT是以美元为基础设立的全球金融信息传输系统
现在全球都在使用SWIFT系统,并非是由于这一系统技术多么先进,而是因为它是以美元作为支付货币,所设计的一个为支付、清算、结算而传递信息的系统。由于美元是世界货币,目前在国际贸易中,使用美元清算、结算的比例高达87%,所以才凸显出SWIFT系统的重要性。
清算系统 是指一套银行的账户体系以及相互之间资金划拨交割的会计规则。资金进行划算,需要有效的凭证和指令作为依据,即业务信息,这些信息的传递方式,可以是指定的,也可以是各自选择的,而SWIFT就是传递方式之一。
实际上,并不是所有的国际清算和结算都通过SWIFT传输信息,还有一定数量的纸质信息无法通过SWIFT系统传输。而且,国际上也没有任何法律文件规定,国际清算和结算,必须要通过SWIFT传输信息。
SWIFT是一个银行之间的开放系统,并不只为美元提供服务,其他货币结算、清算,也可以通过该系统传递信息。SWIFT之所以能够在全球金融领域获得如今的统治地位,事实上也是市场选择的结果,如同当年支付宝、微信支付的市场推广过程一样,有一个逐步适应和接受的过程。
除了SWIFT外,还有中国的CIPS系统、俄罗斯的SPFS系统以及伊朗的SEPAM系统。 我国的人民币跨境支付系统简称为CIPS,是专司为人民币跨境支付清算业务的批发类支付系统。 俄罗斯的SPFS系统则是为本国的支付服务和货币转账,提供服务的金融信息传输系统。
由此可见,SWIFT是与美元紧密挂钩的,美元作为国际货币的核心地位,是SWIFT难以被撼动的根本原因。如果国际贸易不使用美元结算,用欧元或者其他货币取代美元,那么SWIFT系统就失去存在的意义了,也没有人再去使用这一系统。
三、建立在数字货币基础上的CIPS,比SWIFT更先进
从技术层面来看,数字货币能够提供更安全、更快捷的支付结算服务。所以相比于SWIFT,建立在数字人民币基础上中国CIPS系统,具有更多优势。数字人民币的突出优势体现在以下几个方面:
1、数字人民币是国家法定货币,是安全等级最高的资产;
2、数字人民币具有价值特征,可以在不依赖银行账户的前提下进行价值转移,并不需要网络,支持离线交易,具有“支付即结算”的特性;
3、数字人民币支持可控匿名,有利于保护个人隐私和用户信息安全;
4、基于区块链技术的数字人民币,在跨境结算中,可以将SWIFT系统几天的计算时间提升至秒级,大大提高了交易效率;
5、数字人民币可以大幅降低跨境转账成本,而且通过技术的提升,能够躲避潜在的政治干扰。
然而,令人遗憾的是,尽管数字人民币具有以上诸多优点,但其本质上属于支付系统,根本无法取代SWIFT。所以, 目前期待CIPS取代SWIFT系统,几乎是不可能的。原因有两点,一是当前人民币在国际支付中的占比仅为2%;二是人民币仍未能实现资本项目下的可自由兑换。
除非人民币能够取代美元地位,成为世界货币,并在全球支付中占据绝对优势,在这种情况下,CIPS取代SWIFT的期待方有可能实现。
四、从长远发展看,CIPS有可能会取代SWIFT
我国的CIPS系统于2015年10月正式启动,2018年3月,CIPS系统二期成功投产试运行。实现了对全球金融市场的全覆盖,支持全球支付与金融业务,满足全球用户的人民币业务需求。
即使我国已经建立了CIPS系统,但目前仍需依赖于SWIFT。如果要想真正摆脱对SWIFT的依赖,就必须开发出一套类似于SWIFT的电文处理系统。然而,当前SWIFT电文格式已经成为国际统一标准,中国如果再单独开发出一套新标准,还需要得到世界各国的接受和认可才行。
不过,通过CIPS系统,可以使用人民币进行直接结算,不需要开设代理行账户,还可以降低转账费用和时间。因此,用发展的眼光看,随着人民币国际化的不断普及,中国综合国力的日益增强,未来,CIPS系统完全有可能取代SWIFT,成为一种新的国际结算系统。
结语
虽然CIPS与SWIFT相比具有技术上的优势,但是,数字人民币距离成为一种新的国际结算系统,仍有十分漫长的路程。因为,它必须建立在人民币能够完全取代美元,成为国际货币的基础之上,而要达到这一目标,我们还需要付出长期坚持不懈的努力。
Core NFC在iOS 11中引入,用于处理NFC阅读Tag。由于目前只开放了读的权限,所以Core NFC是非常轻量级的一个框架。
NFC最低支持硬件iPhone 7或者iPhone 7 Plus,最低支持系统为iOS 11
下面我来跟大家分享一下NFC的使用步骤。使用NFC前需要注意以下几点:
1、需要开启一个session,与其他session类似,同时只能开启一个。
2、需要App完全在前台模式。
3、每个session最多扫描60s,超时需再次开启新session。
4、配置读取单个或多个Tag,配置为单个时,会在读取到第一个Tag时自动结束session。
5、隐私描述(后文会写到如何配置)会在扫描页面显示。
需要配置Capabilitles。使用NFC需要配置Capabilitles,这会自动为你生成entitlements文件中的必要配置。
打开隐私相关设置。向infoplist中添加Privacy - NFC Scan Usage Description。
第三步激活App ID的相关功能。如下图所示
在项目中引入Core NFC。引入Core NFC和相关代理delegate
OC:
swift:
在viewDidLoad中开启Session
OC:
swift:
实现委托方法
OC:
swift:
除此之外,最好做个系统版本大于iOS 11的判断
OC:
swift:
以上就是关于swift 蓝牙开发、OTA升级全部的内容,包括:swift 蓝牙开发、OTA升级、如何用swift开发ios应用、一文读懂SWIFT与数字货币、清算系统之间的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!