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读写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java百度地图离线LBS_百度地图之离
- 下一篇: 河南王牌计算机专业,河南计算机专业实力突