iOS 蓝牙开发之NFC读写
如今便携设备越来越盛行,各设备、工具之间的通信及其产生的数据以更一种更有效的方式发挥出更大用途。为此,苹果放开了NFC的功能,但仅限于读的操作。本次记录:仅限于支持有蓝牙读卡相关设备的进行蓝牙NFC<公交卡>的相关读写操作。
在首页的置顶文章中有说到蓝牙相关的连接等操作,贴上地址:CoreBlueTooth相关
使用连接上的蓝牙设备在进行读写卡操作之前,理论上有进行相应一下几个操作:
- 激活指令(在进行通道指令之前激活)
- 通道指令(通道指令又分:读取指令,写卡指令)<apdu>
1.寻卡操作<apdu指令>:
/*
通过NFC接口依次执行四条指令
00A4000002DDF1
00B0950808
805C000204
并保存四个指令的执行结果
res1
通过NFC指令判断卡片充值能否继续
00A4000002DDF1
00A4000002ADF1
若返回值为6A81或6A82则可以继续
res2
res4
羊城通卡号从res2中截取
cardnum = res2.substring(6, 16);
余额的计算
hexbal = res4.substring(0, 8);
bal = parseInt(hexbal, 16) / 100;
*/
a>选择指令类型:公交卡
b>选择指令类型:余额记录
c>验证卡片有效性:
d>读取余额指令:
e>使用记录指令:
读写卡过程中蓝牙设备接收数据小于等于20个字节,如下:
//发送数据相关
-(Boolean)wtireDataToCharacteristic:(CBCharacteristic *)characteristic writeData:(NSData *)writeData{
if (self.currentPeripheral == nil) { // 当前活动的蓝牙设备字典
return NO;
}
if (self.manager == nil) {
return NO;
}
if (characteristic == nil) {
return NO;
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int idx = 0;
for (idx=0; idx+20 <= writeData.length; idx+=20) {
NSRange range = NSMakeRange(idx, 20);
NSData *sendTemp = [writeData subdataWithRange:range];
writeFinishFlag = 0;
[self.currentPeripheral writeValue:sendTemp forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
int i = 0;
while (!writeFinishFlag && (++i < 20)){
[NSThread sleepForTimeInterval:0.001f];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
NSLog(@"发送数据:%@", sendTemp);
}
if (writeData.length % 20 != 0) {
NSRange range = NSMakeRange(idx, writeData.length % 20);
NSData *sendTemp = [writeData subdataWithRange:range];
writeFinishFlag = 0;
[self.currentPeripheral writeValue:sendTemp forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
int i = 0;
while (!writeFinishFlag && (++i < 20)){
[NSThread sleepForTimeInterval:0.001f];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
NSLog(@"发送数据:%@", sendTemp);
}
});
return YES;
}
写卡操作涉及到公交卡公司相关指令<1.保密。2.加密协议获取动态指令>,但是具体相关的写卡操作会在后续更新。
待续~~~
iOS 蓝牙开发之NFC读写相关推荐
- 蓝牙开发之 IOS AMS
目录 前言 什么是 AMS 效果展示 AMS 介绍 AMS 字节序和字节码 依赖性 术语 AMS Service UUID AMS Characteristic 实体 播放器(Player)属性表 队 ...
- 蓝牙开发之 IOS ANCS
目录 什么是 ANCS ANCS 介绍(Introduction) ANCS 字节序和字节码(Endianness and String Encoding) 依赖性(Dependencies) 术语( ...
- iOS混合开发之uni-app本地打包集成到iOS原生项目
iOS混合开发 1.前言 2.项目背景 3.项目框架 4.从入坑到踩坑 4.1打包错误 4.2 运行错误 总结 1.前言 前端统一开发越来越多,公司为了大一统前端的所有页面显示问题,同时为节约 ...
- Android开发之NFC介绍及应用
一.NFC介绍 NFC 是Near Filed Communication缩写,即近距离无线通讯技术,由飞利浦公司和索尼公司共同研发的NFC是一种非接触式识别和互联技术,可以在移动设备.消费类电子产品 ...
- iOS网络开发之:NSURLConnection
今天开始打算总结一下在iOS开发中的网络部分 NSURLConnection 这个访问网络的方式最简单,但功能也是最少的因此只有很简单的网络访问才会用到; 使用NSURLConnection访问网络大 ...
- iOS多线程开发之GCD(基础篇)
总纲: GCD基本概念 GCD如何实现 GCD如何使用 队列和任务组合 一.GCD基本概念 GCD 全称Grand Central Dispatch(大中枢队列调度),是一套低层API,提供了⼀种新的 ...
- iOS多线程开发之NSThread
一.NSThread基本概念 NSThread是基于线程使用,轻量级的多线程编程方法(相对GCD和NSOperation),一个NSThread对象代表一个线程,需要手动管理线程的生命周期,处理线程同 ...
- IOS视频开发之MPMoviePlayerController
这篇文章转载自IOS疯狂讲义下
- ios开发开发之:关于时间戳转化成时间
最近开发项目中遇到时间转的问题,当从服务端传回时间到客户端,而这个时间确是时间戳,并且是13位,如果是普通的字符串比如"2015-09-24 19:00:000" 这样转化是比较简 ...
- 专访实战专家,揭秘iOS神奇开发之路
专访实战专家,揭秘iOS神奇开发之路 转自:http://www.ciitn.com/archive/5533.html 时间: 2012-03-29 10:59来源: 未知 作者: xinglu 点 ...
最新文章
- Duo js 一个非常酷的前端打包工具
- 重叠I/O之事件对象通知
- micropython是啥 知乎_嵌入式开发必备调试工具:Micro-Lab
- 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
- 一个好端端的团队是如何被管理者搞垮的?
- 全国唯一高校!武汉大学首开鸿蒙系统课程
- 【推荐算法】知识驱动的智能化推荐算法(附交流视频和PPT下载链接)
- ITIL4,全球IT行业抢手的资格认证之一
- flutter web实现微信网页授权登录
- MySQL — 数据库的基本概念、安装并配置MySQL、MySQL的基本使用、在项目中操作MySQL、前后端的身份认证
- 动画交互设计与技术实现
- Python自动化操作word--批量替换word文档中的文字
- 放量跌与缩量跌的区别是什么?
- 数论题中(杜教筛)交换求和符号
- 基本软件开发模型:瀑布模型、V型模型、迭代模型、增量模型、螺旋模型、大爆炸模型、敏捷模型、原型模型、W模型 特点分析与总结
- 腾讯云TCA运维认证考试题库
- AcWing 860. 染色法判定二分图 (染色法)
- 欧框语言框架标准C2,雅思成绩与欧洲语言共同参考框架的对应关系
- JAVA调用R语言 (未完)
- Find Zombies