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
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
450
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
SREは、MCPとAutopilotをこう使え!
kazumax55
3
950
What the customer really needed
kawaguti
PRO
3
220
AI coding 整合正規方法
philipz
0
490
Azure Serverless 2026:Production-ready な AI エージェント基盤 / Azure Serverless 2026: Production-Ready AI Agent Platform
miyake
2
530
おい、エージェントを使って終わらせろ
nwiizo
3
860
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
210
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.3k
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1k
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
240
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.6k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
550
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Navigating Team Friction
lara
192
16k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
For a Future-Friendly Web
brad_frost
183
10k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
700
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
Building AI with AI
inesmontani
PRO
1
1.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
430
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