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
56
10年もののバグを退治した話
n_seki
0
280
永続化、なに使おう?
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
Metadata - Section 1: HTML Basics
mohab1
0
120
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
120
AIがコードを書く時代に、エンジニアは何で自分の価値を証明するのか / In an era where AI writes code how do engineers prove their value
carta_engineering
3
1.1k
JAWSUG TOHOKU 青森支部 「LoGoチャット」のAWS移行で 乗り越えたこと
taketakekaho
0
350
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
200
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.8k
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
310
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
110
Classmethod Company Deck
satoshi7
1
740
夫婦で子育てするための育児標準化
codmoninc
PRO
0
460
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
180
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Mind Mapping
helmedeiros
1
400
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
710
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
30 Presentation Tips
portentint
PRO
1
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