ERSDK

In sdk

動作環境(for iOS and Android)

項目 説明
iOSバージョン 本SDKの機能を使う場合にサポートするiOSバージョンは、iOS12.0以上とする。本SDKをアプリへ組み込む場合のアプリの最低iOSバージョンは、iOS12.0とする。
Androidバージョン サポートするAndroidバージョンは、Android 6.0以上とする
開発環境 Xcode 10.1, AndroidStudio 3.2以上で動作確認済み。

info.plistの編集(for iOS)

本SDKはいくつかのプライバシー項目を利用するため、 info.plist に以下を追加してください。

  • Privacy – Location Always and When In Use Usage Description
  • Privacy – Media Library Usage Description

Capabilitiesの編集(for iOS)

本SDKはバックグラウンドモードでも動作するため、Capabilities の Background Modes を ON にし、以下を有効化してください。

  • Audio, AirPlay, and Picture in Picture

デモアプリのビルド(for iOS)

  1. ターミナルから「carthage update –platform iOS」を実施し、OSSをインストールする
  2. ERSDKTestApp/ERSDKTestApp.xcodeproj を開く

本SDKの導入ステップ(for iOS)

  1. ダウンロードした ERSDK.framework を Embedded Binaries に追加する
  2. ERSDKTestAppのプロジェクト内に存在するCartfileを作業プロジェクトにコピーする
  3. ターミナルから「carthage update –platform iOS」を実施し、OSSをインストールする

本SDKの導入ステップ(for Android)

ersdk.aarの追加

  • Android Stadioを起動して、本SDKを導入するプロジェクトを開く。
  • メニューから File > New > New Module… を選択する。
  • “Import .JAR/.AAR Package” を選択してERSDKのモジュールを作成する。
  • メニューから File > Project Structure… を選択する。
  • ABFSDKを使用するアプリモジュールを選択して「Dependencies」のタブを開く。
  • 「+」アイコンを押し「Module Dependency」を選択して、ERSDKのモジュールを追加する。

オープンソースの追加

ERSDKを使用するアプリモジュールのbuild.gradleに以下を追加してください。

dependencies {
    ...

    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    implementation 'com.facebook.android:facebook-core:4.40.0'
    implementation 'com.facebook.android:facebook-login:4.40.0'
    implementation 'com.facebook.android:facebook-android-sdk:4.33.0'
    implementation 'com.amazonaws:aws-android-sdk-core:2.11.1'
    implementation 'com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.11.1'
    implementation 'com.squareup.retrofit2:converter-jackson:2.4.0'
    api 'com.fasterxml.jackson.core:jackson-databind:2.9.5'

    implementation 'com.jakewharton.timber:timber:4.7.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
    implementation 'com.google.guava:guava:25.1-jre'
    api 'com.google.guava:guava:25.1-android'
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'
    implementation 'commons-lang:commons-lang:2.6'
}

BlockCore作成マニュアル(for iOS and Android)

BlockCoreの作成方法を各Blockごとに説明する。

TriggerBlockCoreの作成

  • ERTriggerBlockExecutor を適用したクラスを作成する。
    クラス名は、作成する BlockCore の BlockJson 内にある、
    key名: executor の value と同じにする。

TriggerBlockCore の大まかな流れは以下の通りである。
1. createTrigger() で BlockCore 起動の下準備をする。
2. enable() で BlockCore を起動する。
3. トリガー発火させたい場所で ERTriggerBlockDelegate#didTrigger を呼び出す。

ERTriggerBlockExecutor のメソッド

  • createTrigger(blockJsonString: String, preferenceJson: Dictionary<String, Any>, applet: ERApplet) -> Bool
  • blockJsonString: BlockCore に対応した BlockJson の文字列。
    BlockJson 内の値を利用したい場合に使用する。
  • preferenceJson: ユーザが設定した BlockCore の preference 情報。
    preference 内の値を利用したい場合に使用する。
  • applet: BlockCore を動かしているERAppletインスタンス。
    applet 内の値を利用したい場合に使用する。

このメソッドでは、BlockCore の起動準備を行う。
BlockCore 内で使用するインスタンスの初期化などは本メソッドに記述する。
起動準備に成功したら true を返す。
起動準備に失敗したら false を返す。

  • enable(delegate: ERTriggerBlockDelegate) -> Bool
  • delegate: ERTriggerBlockDelegate プロトコルを実装したオブジェクト。
    この BlockCore を使用する ERApplet インスタンスが渡される。

このメソッドが呼ばれたら、BlockCore を起動する。
ERApplet より渡された delegate を BlockCore に紐づける。
その他、BlockCore を起動するのに必要な処理を記述する。
起動に成功したら true を返す。
起動に失敗したら false を返す。

  • disable() -> Void
    このメソッドが呼ばれたら、BlockCore を停止させる。
    delegate の解除や、不要なデータの解放を行う。

ERTriggerBlockExecutor の拡張機能

  • setService(service: Any) -> Void
  • service: BlockCore と アプリとを紐付けるインターフェース

ボタントリガーなど、UIを用いる BlockCore を作成する場合に使用する。
BlockCore で独自に定義したインタフェースでアプリと BlockCore を繋げる。
UI(アプリ側) と BlockCore を結びつける時などに用いる。

ERTriggerBlockDelegate

Trigger Block から依頼する処理を定義したプロトコル。

  • didTrigger(outputJson: Dictionary<String, Any>?) -> Void
  • outputJson: ServiceBlock に渡すJsonデータ。

デリゲートにトリガー発火したことを通知する。
このメソッドを呼び出さない限り、ServiceBlock に処理が移らない。

ServiceBlockCoreの作成

  • ERServiceBlockExecutor を適用したクラスを作成する。
    クラス名は、作成する BlockCore の BlockJson 内にある、
    key名: executor の value と同じにする。
  • execute メソッド内に具体的な処理を実装する。
    execute メソッドの引数の説明
  • appletId: この BlockCore を実行している Applet の ID。
  • blockJsonString: この BlockCore に対応した BlockJson の文字列。
    BlockJson 内の値を利用したい場合に使用する。
  • preferenceJson: ユーザが設定したこの BlockCore の preference 情報。
    preference の値を利用したい場合に使用する。
  • inputJson: 前の BlockCore が出力した結果を格納したデータ。
    前 Block が出力した結果によって動作を変えたい場合などに使用する。
  • completionHandler: BlockCore の処理が終了したことをERSDKに通知するコールバック
    • 正常終了: outputJson に BlockJson に定義されている output のデータを格納し、
      completionHandler に渡す。 error には nil を入れる。
      処理は正常に終了したが、出力結果が異常系だった場合は、空の Dictionary を
      completionHandler に渡す。
      【近くにあるカフェまでの距離を出力する BlockCore】を例に詳しく説明する。
      BlockJson 内の output が以下のように定義されていた時 "output": {
          "type": "object",
          "properties": {
              "distance": {
                  "type": "number",
                  "x-title": {
                      "ja": "近くのカフェとの距離"
                  }
              }
          }
      }
      
      現在地から 200 m の場所にカフェを見つけた時の outputJson {
          "distance": 200
      }
      
      現在地の付近にカフェが存在しなかった時の outputJson {}
    • 異常終了: error に ERSDKError の中から、エラーの原因に最も近しいものを選び、
      completionHandlerに渡す。 outputJson には nil を入れる。

ActionBlockCoreの作成

  • ERSActionBlockExecutor を適用したクラスを作成する。
    クラス名は、作成する BlockCore の BlockJson 内にある、
    key名: executor の value と同じにする。
  • 以下は ServiceBlockCore の作成に準ずる。

本SDKを使用する上での注意事項

  • 以下のモデルデータはSDK内のデータベースで管理しているデータである。その為、必ずメインスレッドから参照すること。
  • ERAppletMetadata
  • ERBlockMetadata
  • ERAppletが持つ各APIは内部でモデルデータを参照することがある。その為、必ずメインスレッドから呼び出すこと。