Device identifier documentation
Summary: Document how device identifiers are obtained and used to map apps and their running device. Reviewed By: passy, aigoncharov Differential Revision: D33431864 fbshipit-source-id: eff4475b3b5e796b58c04db872e814f3e7d5d79e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f265adc976
commit
d5f6e075af
46
docs/internals/device-identifiers.mdx
Normal file
46
docs/internals/device-identifiers.mdx
Normal file
@@ -0,0 +1,46 @@
|
||||
---
|
||||
id: device-identifiers
|
||||
title: Device Identifiers
|
||||
sidebar_label: Device Identifiers
|
||||
---
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
Flipper is capable of discovering and listing available devices for multiple platforms.
|
||||
On itself, it allows users to check for connected devices and quickly use a number of plugins:
|
||||
- Logs
|
||||
- Mobile Builds
|
||||
- Crash Reporter
|
||||
|
||||
Device information, including identifiers, are obtained using either `idb list-targets --json` on iOS or
|
||||
`adb devices` on Android.
|
||||
|
||||
On Flipper Desktop, apps are shown alongside the device it's running on.
|
||||
|
||||
It seems a trivial problem to solve. Unfortunately, this is not the case.
|
||||
On the client side, obtaining the device identifier is a problem.
|
||||
|
||||
### How does Flipper map connecting apps to their respective devices?
|
||||
|
||||
Over the years, both Apple and Google have locked down their APIs so that apps can't find any value that
|
||||
could be considered unique like a MAC address, serial numbers, etc., for privacy reasons. This means there's no OS API available.
|
||||
|
||||
|
||||
So, to obtain this device identifier, a two-way approached had to be used.
|
||||
|
||||
From the Flipper Desktop side, connected devices are discovered and listed using idb or adb as mentioned above, and it sees some tcp connections coming in from apps.
|
||||
It is during the certificate exchange process that we do the mapping from apps to device.
|
||||
|
||||
In this process, an app creates and sends a CSR to Flipper Desktop alongside some other data
|
||||
including the path in the application sandbox where this CSR was originally written.
|
||||
|
||||
When Flipper Desktop is processing the request, it effectively lists all possible connected devices and proceeds
|
||||
to try and pull the CSR from each device. The CSR is then compared with the one sent by the client. If there's a match,
|
||||
we have successfuly made the pairing and the device identifier is sent back to the client.
|
||||
|
||||
The client receives the device identifier and uses this information for subsequent secure tcp connections.
|
||||
|
||||
When a secure tcp connection is established, the device identifier is passed along and thus Flipper is able to map the connecting app to its running device.
|
||||
|
||||
The diagram below depicts this process.
|
||||
|
||||

|
||||
@@ -130,6 +130,7 @@ module.exports = {
|
||||
'extending/public-releases',
|
||||
'extending/testing-rn',
|
||||
'internals/linters',
|
||||
'internals/device-identifiers',
|
||||
...fbInternalOnly([
|
||||
'fb/release-infra',
|
||||
'fb/LauncherConfig',
|
||||
|
||||
BIN
website/static/img/sequence_device_id.png
Normal file
BIN
website/static/img/sequence_device_id.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 137 KiB |
Reference in New Issue
Block a user