SDKの使い方

SDK及び依存ライブラリーをインポート

プロジェクトにJvmaSDK.framework、ExternalAccessory.framework、

libc++.tbdを追加する必要があります。

※「ExternalAccessory.framework」と「libc++.tbd」はiOS標準のライブラリであり、本SDKには含まれません。

 

JvmaSDK.frameworkをインポート

JvmaSDK.frameworkファイルをプロジェクトのフォルダにコピーします。

edit pubspec.yml

 

1)プロジェクト名を選択

2)TARGETSを選択

3)Build Phasesを選択

4)Link Binary With Librariesに「+」をタップ

edit pubspec.yml

5)「Add Other…」にある「Add Files… 」を選択します。

edit pubspec.yml

6)プロジェクトフォルダにあるJvmaSDK.frameworkを選択、「Open」をタップします。

edit pubspec.yml

7)JvmaSDK.frameworkのインポートに成功

edit pubspec.yml

  

依存ライブラリーをインポート

1)プロジェクト名を選択

2)TARGETSを選択

3)Build Phasesを選択

4)Link Binary With Librariesに「+」をタップ

edit pubspec.yml

 

libc++.tbd をリンクする

1)検索枠に「libc++.tbd」を入力

2)libc++.tbdを選択

3)Addをタップ

edit pubspec.yml

4)libc++.tbd のインポートに成功

edit pubspec.yml

 

ExternalAccessory.framework のインポート

1)検索枠に「ExternalAccessory」を入力

2)ExternalAccessory.frameworkを選択

3)Addをタップ

edit pubspec.yml

4)ExternalAccessory.framework のインポートに成功

edit pubspec.yml

protocolを追加

AsReaderのASK通信デバイスと通信する為に、プロトコルの設定が必要です。

プロジェクトの.plistファイルの Supported external accessory protocolsに

「jp.co.asx.asreader.6dongle.ask」プロトコルを追加します。

edit pubspec.yml

Bridging-Header.h の作成

この SDK は Objective-C で開発されているため、Swift で利用する場合は Bridging-Header.h ファイルを設定する必要があります。 ここではその手順を簡単に説明します。

※ 詳細な手順については、Apple の開発ドキュメントをご参照ください。

 

ファイルの作成

プロジェクトを選択し、「New File」をタップします。

edit pubspec.yml

ポップアップしたウィインドウに「Header File」を選択します。

edit pubspec.yml

「Next」をタップし、ブリッジングファイルの名前を入力します。

「プロジェクト名-Bridging-Header.h」と入力後、「Create」をタップすると、ブリッジングファイルが生成されます。

edit pubspec.yml

プロジェクトに生成したブリッジングファイルは下図の通りです。

edit pubspec.yml

  

ブリッジングファイルの設定

TARGETS ->Build Settings->「bridging」で検索します。

edit pubspec.yml

「Objective-C Bridging Header」にブリッジングファイルのパスを追加します。
(下図はサンプルプロジェクトを例にしています。))

edit pubspec.yml

  

ブリッジングファイルを使う

ブリッジングファイルでSDKファイルを引用します。

#import <JvmaSDK/JvmaSDK.h>
edit pubspec.yml

プロジェクトでSDKを使う

SDKは主に2つの部分に分かれています。
1つ目は、AsReaderとの通信を行う「AsReaderAsk」クラス。
2つ目は、JVMAプロトコルを含む「JvmaSDK」クラスです。

 

AsReaderAsKオブジェクトを作成する

let ask: AsReaderAsk = AsReaderAsk.shared()

 

JvmaSDKオブジェクトを作成する

「JvmaSDK」オブジェクトを作成するには、「AsReaderAsk」オブジェクトをパラメーターとして渡す必要があります。

let sdk: JvmaSDK = JvmaSDK(asReaderAsk: ask)

 

statusDelegateのデリゲートの設定

ask.statusDelegate = self

 

statusDelegateのデリゲートメソッドを実装

extension ViewController: AsReaderAskStatusDelegate {  
  func onReceivedConnectedState(_ isConnected: Bool) {
    //AsReaderとiOSデバイス間の接続ステータスをコールバックします。
  }

  func onReceivedPowerState(_ isOn: Bool, beep isBeep: Bool, vib isVib: Bool, led isLed: Bool) {
    //現在接続されているAsReaderの電源、音、振動のステータスをコールバックします。
  }

  func onReceivedBatteryState(_ gauge: Int32) {  
    //現在接続されているAsReaderのバッテリー残量をコールバックします。
  }

  func onReceivedTriggerState(_ isTriggerDown: Bool) {  
    //現在接続されているAsReaderのトリガーキーの状態をコールバックします。
  }

  func onReceivedReaderSettingBeep(_ isOn: Bool, vib isVib: Bool, led isLed: Bool){  
    //現在接続されているAsReaderの音と振動のステータスをコールバックします。
  }
}

 

AsReader の接続

AsReader が iOS デバイス に接続または切断されると、
onReceivedConnectedState デリゲートメソッドが呼び出され、
現在の接続状態をアプリに通知します。

 

AsReader の電源を入れる

AsReader が接続され、isConnectedtrue の場合は、
sendPower メソッドを呼び出し、
AsReader の電源をオンにします。

func onReceivedConnectedState(_ isConnected: Bool) {
    // AsReader と iOS デバイス間の接続ステータスをコールバックします。
    if isConnected {
        ask.sendPower(on: true, setBeep: true, setVib: true, setLed: true)
    } else {
        ask.sendPower(on: false, setBeep: false, setVib: false, setLed: false)
    }
}

 

AsReader の電源状態を確認する

sendPower を呼び出すと、戻り値が true の場合、
onReceivedPowerState デリゲートメソッドが呼び出されます。

onReceivedPowerState のコールバックパラメータ isOntrue の場合、
AsReader の電源が正常にオンになっていることを示します。

func onReceivedPowerState(_ isOn: Bool, beep isBeep: Bool, vib isVib: Bool, led isLed: Bool) {
    // 現在接続されている AsReader の電源、ビープ音、振動、LED のステータスをコールバックします。
}

 

実行とコールバック

実行結果はクロージャを介してデータとしてコールバックされます。

AsReaderの電源がオンになると、onReceivedPowerStateデリゲートメソッドがコールバックされます。
コールバックパラメータ isOntrueの場合、デバイスとの通信が正常に実行可能な状態です。

ここでは、getVmDataのサンプルコードを紹介します。
このメソッドを使って自動販売機のデータを収集する方法を説明します。
なお、他の通信メソッドについては同様の方法で呼び出すことが可能です。

//自動販売機のデータを取得するメソッドを呼び出します。  
sdk.getVmData(
    withSettingCode: password,
    terminalPassword: terminalPassword,
    dataIds: array,
    inputTimeRecord: inputTimeRecord
) { resultDataBlock in
    // 返されたデータの処理(resultDataBlock)
}