Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
OS間でBluetooth処理を(一部)共通化している話
Search
n-seki
May 16, 2023
Technology
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OS間でBluetooth処理を(一部)共通化している話
Ebisu.mobile #2 / 2023.05.16
n-seki
May 16, 2023
More Decks by n-seki
See All by n-seki
2App, 1Repository
n_seki
0
52
10年もののバグを退治した話
n_seki
0
270
永続化、なに使おう?
n_seki
0
340
やってみようMaven!
n_seki
0
390
Try Android Health Connect
n_seki
0
100
Other Decks in Technology
See All in Technology
品質と信頼性を地続きにする
grimoh
2
820
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.3k
あけおめLINE 傾向とその対策
nasa9084
0
180
Reactの設計論
uhyo
24
14k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
670
Claude Code本って、 読む必要あるの?
oikon48
2
490
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
0
240
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
6
3.2k
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
160
リアーキテクチャ後の障害ゼロを目指したShadow Testingの取り組み
nihonbuson
PRO
1
160
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
960
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
260
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
First, design no harm
axbom
PRO
2
1.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
KATA
mclloyd
PRO
35
15k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
890
Optimizing for Happiness
mojombo
378
71k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
4 Signs Your Business is Dying
shpigford
187
23k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
Transcript
OS間でBluetooth処理を(一部)共 通化している話 n-seki / Ebisu.mobile #2 / 2023.05.16
自己紹介 • 上関直人(Uwaseki Naoto) ◦ GitHub @n-seki ◦ Twitter @_n_seki_
• STORES 決済 / Android エンジニア
STORES 決済
OS間でBluetooth処理を(一部) 共通化している話 STORES 決済 アプリで
STORES 決済 と Bluetooth端末 プリンター 10種類以上 MP-B20, SM-L200, mC-Print3, TM-P20…etc
決済端末(カードリーダ)
STORES 決済 と Bluetooth端末 プリンター 14台 MP-B20, SM-L200, mC-Print3, TM-P20…etc
決済端末(カードリーダ)
OS間でBluetooth処理を(一部) 共通化している話 STORES 決済 アプリで 決済端末(カードリーダー)の
決済端末(カードリーダー) • クレジットカードや電子マネーカードの読み取りができる • キーパッドや液晶モニター、LEDランプがついている • アプリとはBluetoothで接続している (決済に関わるいろいろなことが行われますがここでは省略)
アプリと決済端末 • アプリから決済端末にコマンドを送る ◦ たとえば、ディスプレイの表示内容を変更したり ◦ たとえば、カードタッチ待ち受け状態にしたり • 仕様に沿ったコマンドを作成する必要がある
アプリと決済端末 • 決済端末からレスポンスが返ってくる ◦ たとえば、ファームウェアのバージョンをコマンドで問い合わ せたときの結果 ◦ たとえば、カードタッチされたときの決済情報 • レスポンスも決まった形式のデータ構造をしている
アプリと決済端末 • (あたりまえだけど)コマンドもレスポンスも仕様に沿ったデータ、 データ形式になる • コマンドなら先頭 2バイトが命令で、次の2バイトがオプション で......のようなイメージ • レスポンスはTLVというデータ形式
TLV(ちょっと脱線) • Tag - Length - Value の略称 ◦ タグ、長さ、データ部
• 例)5A029000 (バイト配列) ◦ タグ -> 5A ◦ 長さ -> 02 = 2バイト ◦ データ -> 9000
TLV(ちょっと脱線) • クレジットカード決済(EMV)においてはTLVフォーマットのデータ がやりとりされる • この仕様はPublicなものなので、調べると TLVをパースするツー ルがいろいろ出てくる
アプリと決済端末 • コマンドもレスポンスもバイト配列を操作する必要があって複雑 • AndroidとiOSとでそれぞれ実装しても良いが......
アプリと決済端末 • データの操作なのでOSとは完全に独立した処理 • ロジックについてもOS間で差分はない ◦ というよりも、差分があってはいけない • 共通化できそう! →
社内ライブラリの誕生
社内ライブラリでやっていること • 決済端末に送るコマンドの作成 • 決済端末のレスポンス(バイト配列)をパースし、アプリ側で扱 いやすくしたデータ構造にする → アプリ側ではコマンドの具体的な中身だったり、バイト配列を直 接意識しなくてもOK
社内ライブラリの実装 • 言語はC++ ◦ AndroidアプリからはNDK, JNIでメソッド呼び出し • UnitTestが充実 • initial
commitは2015年
NDK, JNI • NDK ◦ AndroidでCやC++のコードを使用できるようにするツールセッ ト • JNI ◦
C/C++とJavaを相互運用するための仕組み ◦ Javaの世界とC/C++の世界を橋渡しする実装
メリット • (AndroidとiOSとの)コード重複がない • ミッションクリティカルな部分でOS間差分が存在しない • 共通化されていることから、チーム内で共通の言葉でコミュニ ケーションができる
デメリット • メンテナンスコストが追加で発生する ◦ メンバー全員がC++に慣れているわけではない ◦ Android向けにはJNIレイヤーを実装する必要がある ◦ 別リポジトリ管理
今後の展望 • KMM移行 ◦ 共通化のメリットはそのままで、より親しみのあるKotlinで実 装できる • Rust移行? • なににせよ移行コストは発生する
◦ メンテコスト/移行コストの相談
OS間でBluetooth処理を(一部) 共通化している話 JNI 社内ライブラリ 決済端末 EMV C/C++ Tag-Length-Value NDK
クレジットカード KMM