We are moving away from the pattern of delegation and are being reborn as something that can take advantage of Swift Concurrency.
Please refer to this branch: tretnfckit-main
日本のNFCカード向けリーダーライブラリ / NFC Reader for Japanese NFC Cards for iOS etc.
Suica、PASMOなどの交通系ICカード、楽天Edy、nanaco、WAON などの電子マネーカード、運転免許証、マイナンバーカードの読み取り
※ NFCカードの読み取りは iOS 13.0 以降で対応するデバイスで使用可能。
IDm と System Code の表示
Examples
配下にサンプルを掲載。
Xcode 11: File > Swift Package > Add Package Dependency... > Enter package repository URL
https://github.com/treastrain/TRETJapanNFCReader
Cartfile
に以下を記述し、carthage update
github "treastrain/TRETJapanNFCReader"
Podfile
に以下を記述し、pod install
pod 'TRETJapanNFCReader'
運転免許証を読み取るには、開発している iOS Application の Info.plist に "ISO7816 application identifiers for NFC Tag Reader Session (com.apple.developer.nfc.readersession.iso7816.select-identifiers)" を追加する。ISO7816 application identifiers for NFC Tag Reader Session には以下を含める必要がある。
A0000002310100000000000000000000
A0000002310200000000000000000000
A0000002480300000000000000000000
ライブラリをインポートし、DriversLicenseReader
を初期化した後でスキャンを開始する。
import UIKit
import TRETJapanNFCReader
class ViewController: UIViewController, DriversLicenseReaderSessionDelegate {
var reader: DriversLicenseReader!
override func viewDidLoad() {
super.viewDidLoad()
self.reader = DriversLicenseReader(self)
self.reader.get(items: DriversLicenseCardItem.allCases, pin1: "暗証番号1", pin2: "暗証番号2")
}
func driversLicenseReaderSession(didRead driversLicenseCard: DriversLicenseCard) {
// driversLicenseCard に読み取った運転免許証の情報が格納されている
}
}
マイナンバーカードを読み取るには、開発している iOS Application の Info.plist に "ISO7816 application identifiers for NFC Tag Reader Session (com.apple.developer.nfc.readersession.iso7816.select-identifiers)" を追加する。ISO7816 application identifiers for NFC Tag Reader Session には以下を含める必要がある。
D392F000260100000001
D3921000310001010408
D3921000310001010100
D3921000310001010401
ライブラリをインポートし、IndividualNumberReader
を初期化した後でスキャンを開始する。
import UIKit
import TRETJapanNFCReader
class ViewController: UIViewController, IndividualNumberReaderSessionDelegate {
var reader: IndividualNumberReader!
override func viewDidLoad() {
super.viewDidLoad()
// 取得したい情報を指定
let items: [IndividualNumberCardItem] = [.tokenInfo, .individualNumber]
// 券面入力補助用パスワード
let cardInfoInputSupportAppPIN = "1234"
self.reader = IndividualNumberReader(delegate: self)
self.reader.get(items: items, cardInfoInputSupportAppPIN: cardInfoInputSupportAppPIN)
}
func individualNumberReaderSession(didRead individualNumberCardData: IndividualNumberCardData) {
print(individualNumberCardData)
}
func japanNFCReaderSession(didInvalidateWithError error: Error) {
print(error.localizedDescription)
}
// パスワードの残り試行回数を取得する場合
func lookupRemaining() {
// 取得したい残り試行回数の種別を指定
let pinType: IndividualNumberCardPINType = .digitalSignature
self.reader.lookupRemainingPIN(pinType: pinType) { (remaining) in
print("Remaining:", remaining)
}
}
}
Reader
と Card
がある。カードの種類 | FeliCa システムコード | Reader |
Card |
---|---|---|---|
交通系IC | 0003 |
TransitICReader |
TransitICCard |
IruCa | 80DE |
TransitICReader |
TransitICCard |
PASPY | 8592 |
TransitICReader |
TransitICCard |
SAPICA | 865E |
TransitICReader |
TransitICCard |
りゅーと | 8B5D |
RyutoReader |
RyutoCard |
OKICA | 8FC1 |
OkicaReader |
OkicaCard |
楽天Edy | FE00 |
RakutenEdyReader |
RakutenEdyCard |
nanaco | FE00 |
NanacoReader |
NanacoCard |
WAON | FE00 |
WaonReader |
WaonCard |
大学生協ICプリペイド | FE00 |
UnivCoopICPrepaidReader |
UnivCoopICPrepaidCard |
FCFCampus(ICU) | FE00 |
ICUReader |
ICUCard |
八達通 | 8008 |
OctopusReader |
OctopusCard |
楽天Edyの例。各Reader
、Card
は上記の表に対応するものに書き換える。
import UIKit
import TRETJapanNFCReader
class ViewController: UIViewController, FeliCaReaderSessionDelegate {
var reader: RakutenEdyReader!
override func viewDidLoad() {
super.viewDidLoad()
self.reader = RakutenEdyReader(viewController: self)
self.reader.get(items: [.balance])
}
func feliCaReaderSession(didRead feliCaCard: FeliCaCard) {
let rakutenEdyCard = feliCaCard as! RakutenEdyCard
let balance = rakutenEdyCard.balance! // カード残高
}
}
TRETJapanNFCReader/MIFARE
TRETJapanNFCReader/MIFARE/IndividualNumber
マイナンバーカードの読み取り実装においては以下に掲載されている情報を参考にしました。
jpki/myna
TRETJapanNFCReader/FeliCa/Okica/
OKICA の情報、および OKICA カード内に保存されているゆいレールの駅名情報、各バス会社名の情報は Twitter@resi098 様からご提供いただきました。
TRETJapanNFCReader/FeliCa/UnivCoopICPrepaid
大学生協ICプリペイドの読み取り実装においては以下に掲載されている仕様を参考にしました。
oboenikui/UnivFeliCa.md
TRETJapanNFCReader/FeliCa/Octopus
各電子マネー、電子マネーサービス等の名称は一般に各社の商標、登録商標です。 本ライブラリはサービス提供各団体および各社、電子マネーカード提供各社が公式に提供するものではありません。
The names of e-money and the services are generally trademarks and registered trademarks of each company. This library is not officially provided by e-money card service providers and others.