メソッド

init

初期化メソッド

init!(asReaderAsk: Any!)

パラメータ

パラメータ名

説明

asReaderAsk

Any

Anyオブジェクト

サンプルコード

let ask = AsReaderAsk.shared()  
let sdk = JvmaSDK.init(asReaderAsk: ask)  

setTimeout

SDK のタイムアウト時間を設定します。
設定された時間内に AsReader からの応答がない場合、SDK 側でタイムアウトと判断し、エラーコード NAK0x93 が発生します。
(詳細は、JvmaNAKData クラス を参照)

SDK 側のタイムアウト設定は、万が一リーダーからの応答が得られない状況に備え、
アプリ側で通信処理を終了させる フェイルセーフ機能 です。
たとえば、接続の不具合や予期せぬ障害でリーダーが応答しない場合でも、
SDK 側のタイムアウトが働くことでアプリが無限に待ち続けるのを防ぎます。

なお、リーダー側の応答に必要な時間より SDK 側のタイムアウト時間が短いと、
通信が正常に完了する前に処理が中断される可能性があります。
そのため、SDK 側のタイムアウト時間はリーダー側のタイムアウト時間より十分に長めに設定してください。

func setTimeout(_ second: Float)

パラメータ

パラメータ名

説明

second

Float

SDKのタイムアウト時間。
デフォルトは 10 秒です。
0 を設定した場合、SDK側でタイムアウト処理を行いません。
設定可能な最小値は 6 秒です。6 以下(0 を除く)を指定した場合、自動的に 6 秒が適用されます。

サンプルコード

sdk.setTimeout(6.0)  

setSDKLogOn

SDKのログ機能のスイッチを設定します。

  • ログファイルは最大 5つ 作成されます。

  • 各ファイルの最大サイズは 10MB です。

  • ログファイルの保存場所はアプリの サンドボックス領域 で、以下のパスになります:
    /Documents/JvmaSDKLog/SDK.log

ログファイルの取得方法については、Logファイルを取得 を参照してください。

func setSDKLogOn(_ on: Bool)

パラメータ

パラメータ名

説明

on

Bool

SDKのLog機能のON/OFF
true:Log機能をON
false:Log機能をOFF

サンプルコード

sdk.setSDKLogOn(true)  

removeAllSdkLog

全てのSDK Logを削除します。

func removeAllSdkLog()

サンプルコード

sdk.removeAllSdkLog()  

getVersion

SDKのバージョンを取得します。

class func getVersion() -> String!

戻り値

説明

String

SDKのバージョン

サンプルコード

// versionString SDKバージョン  
let versionString: String = JvmaSDK.getVersion()  

startCommunication

自販機との交信を開始するメソッドです。

使用条件

AsReader の接続が成功し、onReceivedConnectedState デリゲートがコールバックされて、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func startCommunication(
    withSettingCode settingCode: String!,
    terminalPassword: String!,
    resultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10 桁)

terminalPassword

String

ターミナルパスワード(10 桁)

resultDataBlock

Block

実行結果を返します。
(詳細は ResultDataBlock を参照)

サンプルコード

sdk.startCommunication(
    withSettingCode: password,
    terminalPassword: terminalPassword,
    resultDataBlock: { resultDataBlock in
        // 処理
    }
)

sendCommand

自販機にコマンドを送信するメソッドです。

使用条件

AsReaderの接続が成功し、onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを使用できます。

func sendCommand(
    withSettingCode settingCode: String!,
    terminalPassword: String!,
    commandCode: CommandCode,
    dataIds: [JvmaDataId]!,
    inputTimeRecord: Bool,
    resultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

commandCode

CommandCode

送信するコマンド(列挙型)
詳細は CommandCode を参照

dataIds

Array

送信対象のデータ ID(複数指定可能)
JvmaDataId オブジェクトの配列

inputTimeRecord

Bool

タイムレコード(ID: 0BA0)を追加するか
true: 追加する / false: 追加しない

resultDataBlock

Block

実行結果を受け取るクロージャ
詳細は ResultDataBlock を参照

サンプルコード

var array: [JvmaDataId]? = []

guard let dataID1 = JvmaDataId.init(dataIdCode: .InputCashQuantity) else { return }
array?.append(dataID1)

guard let dataID2 = JvmaDataId.init(dataIdCode: .QuitCashQuantity) else { return }
array?.append(dataID2)

guard let dataID3 = JvmaDataId.init(dataIdCode: .VmRunTime) else { return }
array?.append(dataID3)

let commandCode: CommandCode = .VmDataCollect

sdk.sendCommand(
    withSettingCode: password,
    terminalPassword: terminalPassword,
    commandCode: commandCode,
    dataIds: array,
    inputTimeRecord: true,
    resultDataBlock: { resultDataBlock in
        // ResultDataBlock の扱いは「3.2.1.1 ResultDataBlock」を参照
    }
)

getVmData

自販機データを収集します。

使用条件

AsReaderの接続が成功し、onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを使用できます。

func getVmData(withSettingCode settingCode: String!,
               terminalPassword: String!,
               dataIds: [JvmaDataId]!,
               inputTimeRecord: Bool,
               resultDataBlock: ResultDataBlock!)  

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

dataIds

Array

収集対象データのID。複数指定可能。JvmaDataId オブジェクトのみを含む配列。
nil を指定した場合はすべてのデータを収集します。

inputTimeRecord

Bool

タイムレコード(ID: 0BA0)を追加するかどうか。
true: 追加する / false: 追加しない

resultDataBlock

Block

実行結果を返すクロージャ。
詳細は ResultDataBlock を参照。

サンプルコード

var array: [JvmaDataId]? = []
guard let dataID1 = JvmaDataId(dataIdCode: JvmaDataIdCode.InputCashQuantity) else { return }
array?.append(dataID1)

guard let dataID2 = JvmaDataId(dataIdCode: JvmaDataIdCode.QuitCashQuantity) else { return }
array?.append(dataID2)

guard let dataID3 = JvmaDataId(dataIdCode: JvmaDataIdCode.VmRunTime) else { return }
array?.append(dataID3)

sdk.getVmData(
    withSettingCode: password,
    terminalPassword: terminalPassword,
    dataIds: array,
    inputTimeRecord: inputTimeRecord
) { resultDataBlock in
    // 処理
}

getVmDataClear

データ収集クリアコマンドを実行するメソッドです。
自販機のデータが収集され、クリアされます。

 

📌 getVmDataClear の仕様と利用時のポイント

getVmDataClear は、自販機からデータを取得した後に、自販機内のデータをクリアする処理を一度に行えるメソッドです。
仕様上、iOSデバイスでの最終データ受信を待たずに、自販機側のデータクリア処理が実行されるため、
データの取りこぼしが発生しないように、以下の手順でのご利用を推奨します。

✅ 安全な利用手順

  1. getVmData で必要なデータを受信する

  2. 以下のいずれかの方法でクリア処理を行う
     • allClear を使用してクリアする
     • getVmDataClear を使用してデータをクリアする(取得データは最小限にする)

 

使用条件

AsReaderが接続された後、onReceivedConnectedStateデリゲートがコールバックされ、
そのパラメータ isConnectedtrue の場合に呼び出すことができます。

func getVmDataClear(
  withSettingCode settingCode: String!,
  terminalPassword: String!,
  dataIds: [JvmaDataId]!,
  inputTimeRecord: Bool,
  resultDataBlock: ResultDataBlock!,
  clearResultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

dataIds

Array

収集対象のデータIDの配列(JvmaDataId オブジェクトのみ)。
nil の場合は全データを収集

inputTimeRecord

Bool

タイムレコード(TimeRecord “0BA0”)の追加要否. true:追加、false:追加しない

resultDataBlock

Block

データ収集結果を返すクロージャ
ResultDataBlockを参照

clearResultDataBlock

Block

データクリア結果を返すクロージャ
ResultDataBlockを参照

データクリア処理の実行結果

  • clearResultDataBlockで返却された JvmaResult が以下を満たす場合、クリアは正常完了です。

    • nak, errornil

    • acknil ではなく、ack.status == VmCommandConfirm

    実行結果は jvmaTexts の配列として返却されます。

クリアのステータスの判定

  • jvmaTexts に含まれる JvmaRecordjvmaDataId0AA1のレコードを確認してください。

  • 該当レコードの Item から JvmaItem.hexStr を取得し、値を判定します:

    • 01: データクリア中

    • 02: データクリア済み

    • 03: データ未クリア

サンプルコード

var array: [JvmaDataId]? = []

guard let dataID1 = JvmaDataId(dataIdCode: JvmaDataIdCode.InputCashQuantity) else { return }
array?.append(dataID1)

guard let dataID2 = JvmaDataId(dataIdCode: JvmaDataIdCode.QuitCashQuantity) else { return }
array?.append(dataID2)

guard let dataID3 = JvmaDataId(dataIdCode: JvmaDataIdCode.VmRunTime) else { return }
array?.append(dataID3)

sdk?.getVmDataClear(
  withSettingCode: password,
  terminalPassword: terminalPassword,
  dataIds: array,
  inputTimeRecord: true,
  resultDataBlock: { resultData in
    // データ収集結果の処理
  },
  clearResultDataBlock: { clearResultData in
    // データクリア結果の処理
  }
)

getVmDataClear

自販機のデータを収集し、クリアするメソッドです。
本メソッドは getVmDataClear メソッドと以下の点で異なります:

  1. retryTimes パラメータで、クリア失敗時のリトライ回数を指定可能です。
    ※ クリア失敗時、自販機から返却されるクリア結果は 03(データ未クリア)です。

  2. resultDataBlock において、処理完了後に最終結果を一括で返します。

⚠️ 重要
本メソッドの詳細な仕様や利用時のポイントは、こちら をご参照ください。


使用条件

AsReader 接続が成功した後、onReceivedConnectedState デリゲートがコールバックされ、
その引数 isConnectedtrue の場合に、本メソッドを使用することができます。

```swift
func getVmDataClear(
  withRetryTimes retryTimes: uint,
  settingCode: String!,
  terminalPassword: String!,
  dataIds: [JvmaDataId]!,
  inputTimeRecord: Bool,
  resultDataBlock: ResultDataBlock!
)

パラメータ名

説明

retryTimes

uint

データクリア失敗時のリトライ回数
0 を指定した場合はデフォルトで 5 回リトライされます。

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

dataIds

Array

収集対象のデータID配列(JvmaDataId オブジェクトのみ)。
nil の場合はすべて対象

inputTimeRecord

Bool

タイムレコード(ID: 0BA0)を追加するかどうか。
true: 追加する / false: 追加しない

resultDataBlock

Block

データ収集結果を返すクロージャ
詳細はResultDataBlockを参照

実行結果の JvmaResult について:

  • resultDataBlock で返却された JvmaResult が以下をすべて満たす場合、データクリアは正常完了です。

    • nak および errornil

    • acknil ではなく、ack.status == VmCommandConfirm

    • 実行結果は jvmaTexts の配列として返却されます。

  • コマンドが正常に実行されなかった場合の条件:

    • nak プロパティが nil でない場合は、コマンドは 正常に実行されなかった ことを意味します。

    • nak.status の値により、具体的な失敗内容を特定できます。

    • 特に VmDataClearFailed の場合、データクリアに失敗 したことを示します。

サンプルコード

var array: [JvmaDataId]? = []

guard let dataID1 = JvmaDataId(dataIdCode: JvmaDataIdCode.InputCashQuantity) else { return }
array?.append(dataID1)

guard let dataID2 = JvmaDataId(dataIdCode: JvmaDataIdCode.QuitCashQuantity) else { return }
array?.append(dataID2)

guard let dataID3 = JvmaDataId(dataIdCode: JvmaDataIdCode.VmRunTime) else { return }
array?.append(dataID3)

sdk?.getVmDataClear(
  withRetryTimes: 3,
  settingCode: password,
  terminalPassword: terminalPassword,
  dataIds: array,
  inputTimeRecord: true,
  resultDataBlock: { result in
    // ResultDataBlock については「ResultDataBlock」を参照してください
  }
)

collectSettingData

オフライン自販機の設定データを収集するメソッドです。
オンラインなど、オフライン以外の自販機に関しては collectSettingData を参照してください。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func collectSettingData(withSettingCode settingCode: String!, terminalPassword: String!, inputTimeRecord: Bool, resultDataBlock: ResultDataBlock!)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

inputTimeRecord

Bool

タイムレコード(ID: 0BA0)を追加するかどうか
true: 追加, false: 追加しない)

resultDataBlock

Block

データ収集の結果を返すクロージャ。
詳細は ResultDataBlock を参照

サンプルコード

sdk.collectSettingData(
  withSettingCode: password,
  terminalPassword: terminalPassword,
  inputTimeRecord: true,
  resultDataBlock: { (resultDataBlock) in
    // 収集結果はここで受け取り処理します。詳細は「ResultDataBlock」を参照してください。
  }
)

collectSettingData

指定した収集コマンドに基づいて、設定データを収集します。
オフライン以外の自販機から設定データを収集する場合、本メソッドを使用してください。
本メソッドでは収集コマンドを任意に指定できるため、将来的に自販機の種類が増えても柔軟に対応できます。
オフライン自販機からのデータ収集については、collectSettingData を使用し、収集コマンドを指定せずに収集します。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func collectSettingData(
  withSettingCode settingCode: String!,
  terminalPassword: String!,
  commandCode: CommandCode,
  inputTimeRecord: Bool,
  resultDataBlock: ResultDataBlock!
)

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

commandCode

CommandCode

収集するコマンド(列挙型 CommandCode を参照)

inputTimeRecord

Bool

タイムレコード(0BA0)の追加有無
true: 追加, false: 追加しない)

resultDataBlock

Block

データ収集の結果を返すクロージャ。
詳細は ResultDataBlock を参照

サンプルコード

let commandCode: CommandCode = CommandCode.OnLineSettingDataCollect
sdk.collectSettingData(
  withSettingCode: password,
  terminalPassword: terminalPassword,
  commandCode: commandCode,
  inputTimeRecord: true,
  resultDataBlock: { (resultDataBlock) in
    // ここで取得結果を処理します。詳細は「ResultDataBlock」を参照してください。
  }
)

sendSettingData

オフライン自販機に対して設定データを送信するメソッドです。
オフライン以外の自販機には、sendSettingData を使用してください。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func sendSettingData(
  withSettingCode settingCode: String!,
  terminalPassword: String!,
  settingDatas: [JvmaRecord]!,
  inputTimeRecord: Bool,
  resultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

settingDatas

Array

設定するデータのID一覧。複数指定可能で、JvmaDataId オブジェクトのみを含む配列。

inputTimeRecord

Bool

タイムレコード(0BA0)の追加有無
true: 追加, false: 追加しない)

resultDataBlock

Block

設定結果を受け取るクロージャ
詳細は ResultDataBlock を参照

サンプルコード

var jvmaRecordArray: [JvmaRecord]? = []
var items: [JvmaItem]? = []

guard let item1 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item1)

guard let item2 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item2)

guard let record = JvmaRecord.init(
  jvmaDataIdCode: JvmaDataIdCode.VmIdentifyCode,
  items: items
) else { return }
jvmaRecordArray?.append(record)

sdk.sendSettingData(
  withSettingCode: password,
  terminalPassword: terminalPassword,
  settingDatas: jvmaRecordArray,
  inputTimeRecord: true,
  resultDataBlock: { resultDataBlock in
    // 結果は ResultDataBlock を参照して処理してください。
  }
)

sendSettingData

データ設定コマンドを指定して、自販機の設定データを送信します。
オフライン以外の場合、本メソッドを使用する必要があります。
設定コマンドを自由に指定できるため、今後自販機の種類が増えた場合でも汎用的に対応可能です。 オフライン自販機の設定には、sendSettingData を参照してください(設定コマンドの指定なしで設定可能です)。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func sendSettingData(
  withSettingCode settingCode: String!,
  terminalPassword: String!,
  settingDatas: [JvmaRecord]!,
  commandCode: CommandCode,
  inputTimeRecord: Bool,
  resultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

settingDatas

Array

設定するデータのID一覧。複数指定可能で、JvmaDataId オブジェクトのみを含む配列。

commandCode

CommandCode

設定に使用するコマンド
CommandCode を参照

inputTimeRecord

Bool

タイムレコード(0BA0)の追加有無(true: 追加、false: 追加しない)

resultDataBlock

Block

設定結果を返すクロージャ
詳細は ResultDataBlock を参照

サンプルコード

var jvmaRecordArray: [JvmaRecord]? = []
var items: [JvmaItem]? = []
guard let item1 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item1)

guard let item2 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item2)

guard let record = JvmaRecord.init(
  jvmaDataIdCode: JvmaDataIdCode.VmIdentifyCode,
  items: items
) else { return }
jvmaRecordArray?.append(record)

let commandCode: CommandCode = CommandCode.OnLineSettingDataSet

sdk.sendSettingData(
  withSettingCode: password,
  terminalPassword: terminalPassword,
  settingDatas: jvmaRecordArray,
  commandCode: commandCode,
  inputTimeRecord: true,
  resultDataBlock: { (resultDataBlock) in
    // 結果は ResultDataBlock を参照して処理してください。
  }
)

allClear

自販機全データクリア処理を行います。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func allClear(
  withSettingCode settingCode: String!,
  terminalPassword: String!,
  inputTimeRecord: Bool,
  clearResultDataBlock: ResultDataBlock!
)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(10桁)

terminalPassword

String

ターミナルパスワード(10桁)

inputTimeRecord

Bool

タイムRecordデータの追加要否(TimeRecord 0BA0
true:追加
false:追加しない

clearResultDataBlock

Block

データクリア結果を返すクロージャ
詳細は ResultDataBlock を参照

データクリア処理の実行結果

  • clearResultDataBlock:
    返却された JvmaResult オブジェクトにおいて以下の条件をすべて満たす場合、クリア処理は正常に完了したと判断されます。

    • nak, error プロパティは nil

    • ack プロパティは nil ではなく、ack.status == VmCommandConfirm

    実行結果は jvmaTexts の配列として返却されます。

データクリアのステータスについて

  • jvmaTexts 配列に jvmaRecords が含まれます。

  • JvmaRecord オブジェクトから jvmaDataId を取得して解析を行います。

  • 本メソッドでは、データID 0AA1(クリアステータス)を受信します。

  • 該当レコードの Item から JvmaItem.hexStr を取得し、以下の結果に従って判定します:

    • 01: データクリア中

    • 02: データクリア済み

    • 03: データ未クリア

サンプルコード

sdk.allClear(
  withSettingCode: settingCode,
  terminalPassword: terminalPassword,
  inputTimeRecord: true,
  clearResultDataBlock: { (resultDataBlock) in
    // 処理結果は ResultDataBlock を参照してください。
  }
)

sendJvmaDatas

自販機へデータを送信します。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func sendJvmaDatas(withSettingCode settingCode: String!, terminalPassword: String!, jvmaDatas: [JvmaRecord]!, resultDataBlock: ResultDataBlock!)

パラメータ

パラメータ名

説明

settingCode

String

ターミナル設定コード(長さは10桁)

terminalPassword

String

ターミナルパスワード(長さは10桁)

jvmaDatas

Array

送信するデータを格納する配列
JvmaRecord オブジェクトのみを含む

resultDataBlock

Block

実行結果を返すクロージャ
詳細は ResultDataBlock を参照

サンプルコード

var jvmaRecordArray: [JvmaRecord]? = []
var items: [JvmaItem]? = []
guard let item1 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item1)

guard let item2 = JvmaItem.init(hexStr: "1234567890") else { return }
items?.append(item2)

guard let record = JvmaRecord.init(
  jvmaDataIdCode: JvmaDataIdCode.VmIdentifyCode,
  items: items
) else { return }
jvmaRecordArray?.append(record)

sdk.sendJvmaDatas(
  withSettingCode: settingCode,
  terminalPassword: terminalPassword,
  jvmaDatas: jvmaRecordArray,
  resultDataBlock: { (resultDataBlock) in
    // ResultDataBlock の仕様を参照してください
  }
)

getJvmaModuleVersionResultVersionBlock

AsReaderのFWバージョンを取得します。

使用条件

AsReaderへの接続が成功した後、
onReceivedConnectedStateデリゲートがコールバックされ、
コールバックパラメータ isConnectedtrue の場合に本メソッドを呼び出すことができます。

func getJvmaModuleVersionResultVersionBlock(_ resultVersionBlock: ResultVersionBlock!)

パラメータ

パラメータ名

説明

resultVersionBlock

Block

モジュールバージョン取得時に呼ばれるクロージャ
詳細は resultVersionBlock を参照

サンプルコード

sdk.getJvmaModuleVersionResultVersionBlock { (resultVersionBlock) in
  // 取得したモジュールバージョンをここで処理してください
}