**Agent ID:** SA-022 **Binary:** `./analysis/facebook/345.0/Facebook.app/Frameworks/FBSharedFramework.framework/FBSharedFramework` **Date:** 2025-12-30
Executive Summary
Analysis of FBSharedFramework reveals a multi-layered configuration push architecture that enables Facebook to remotely control audio behavior through multiple pathways. The investigation confirms four distinct config update mechanisms working in coordination, with the sound toggle setting changes broadcast via `NSNotification` to all listening components.
1. Config Update Paths Identified
1.1 MQTT Push (Primary Real-time)
**Classes involved:**
- undefined
**Key methods:**
handleIncomingMQTTMessage: offset 0x020fbbbf
addMQTTListeners: offset 0x0211eebc
removeMQTTListeners: offset 0x0211eebc
_onMQTTConnectionStatusChange: offset 0x020f352e
startWithMQTTInterface:shouldStartBgTask: offset 0x0211ee80
**Evidence strings:**
- undefined
1.2 GraphQL Realtime Subscriptions (Secondary)
**Service Status Protocol:** `FBGraphQLRealtimeServiceStatus`
**Active Subscription Types found:**
| Subscription | String Offset |
|---|---|
| `FBSnacksTraySubscription` | 0x01dfc9b3 |
| `FBFeedbackLikeCoreSubscription` | 0x01dacb86 |
| `FBAllTypingNotificationsSubscription` | 0x01dc624e |
| `FBVideoLiveStatusUpdateWithoutFeedbackSubscription` | 0x01e921fd |
| `FBSnacksTraySuggestedBucketsQuery` | 0x01dee749 |
**Token management:**
- undefined
1.3 Background Fetch
**Methods found:**
backgroundFetchCadenceInSeconds offset 0x01f973dc
_backgroundFetchInterval offset 0x02144a2a
_backgroundFetchIntervalStep offset 0x02144a43
_backgroundFetchManager offset 0x0214d183
_backgroundFetchObserverHandle offset 0x02163c33
_backgroundFetchObserverHandling: offset 0x020a3a5c
**Key string:** `backgroundFetch` (offset 0x01d8835c)
Background fetch allows config synchronization even when app is not actively in use.
1.4 Force Fetch (Manual Refresh)
**Primary implementation:** `FBMediaUploadQualitySettingsService.forceFetchSettingsFromServer`
- undefined
**Full class signature:**
class FBMediaUploadQualitySettingsService
initWithSession: offset 0x0021b588
forceFetchSettingsFromServer offset 0x00ca19cc
_syncSettingsIfNeeded offset 0x0021b720
_didPullSettings:requestContext: offset 0x0046d730
_didPushMediaSettings: offset 0x00f6272c
handleWarmStart offset 0x00359e0c
addListener: offset 0x00a55a4c
removeListener: offset 0x00ca74d0
**Force fetch disassembly shows:**
- undefined
2. Notification Chain - Sound Toggle
2.1 Primary Notifications
| Notification Key | String Offset | Purpose |
|---|---|---|
| `kFeedSoundToggleSettingChangeNotification` | 0x01dfb2a5 | Main audio state change broadcast |
| `kFeedSoundToggleSettingStoreVolumeRockerNotification` | 0x01e0c30d | Volume rocker triggered state change |
| `FBSoundOnSettingNotification` | 0x01dfb2cf | Sound-on state notification |
| `kFBAutoPlaySettingsChangedNotification` | 0x01dcde1f | Autoplay settings changed |
| `FBFeedClientRankingGraphQLConnectionsForceRefreshNotification` | 0x01dcf064 | Feed force refresh |
2.2 Sound Toggle Setting States
SoundToggleSettingOff offset 0x01e69f0d
SoundToggleSettingOnByToggle offset 0x01e69f23
SoundToggleSettingOnByToggleManual offset 0x01e69f40
SoundToggleSettingOnByPreference offset 0x01e69f63
SoundToggleSettingOnByIgnoreHWSwitch offset 0x01e69f84 <- CRITICAL
SoundToggleSettingOnByVolumeRocker offset 0x01e69fa9
SoundToggleSettingOnProgrammatically offset 0x01e69fcc <- CRITICAL
SoundToggleSettingUnset offset 0x01e69ff1
SoundToggleSettingUnsetByCasting offset 0x01e6a009
SoundToggleSettingUnsetByBackgroundAudio offset 0x01e6a02a
**Critical states:**
- undefined
2.3 Sound Toggle Plugin Setting Store
**Class:** `FBVideoSoundTogglePluginSettingStore` (offset 0x01c69b08)
class FBVideoSoundTogglePluginSettingStore
initWithSession: offset 0x001c9990
currentSetting offset 0x00015f4c
updateCurrentSetting: offset 0x004214c4
updateCurrentSettingAndNotify: offset 0x004be9f8
logMuteStateChanged:isMuted:withMuteReason:forVideoID: offset 0x004a9ebc
audioSessionManagerUpdatedAudioSession: offset 0x0020402c
audioSessionManagerFinishedRouteChange: offset 0x003b1da4
_unmuteOnVolumeChange: offset 0x0053a4c0 <- CRITICAL
_applicationDidBecomeActive: offset 0x00299d44
_applicationWillEnterForeground: offset 0x0020dfc0
_applicationDidEnterBackground: offset 0x0020d88c
_startFunnel offset 0x001c9ea8
_didStartBugReport: offset 0x009bc324
**Critical method:** `_unmuteOnVolumeChange:` - Automatically unmutes on volume change
2.4 Sound Toggle Listener
**Class:** `FBSoundToggleListener` (offset 0x01c243c8)
class FBSoundToggleListener
initWithSoundConfig: offset 0x00c8c6f4
dealloc offset 0x00c800b0
shouldTurnOnSound offset 0x000237e8
_updateVideoMuteStateFromSettingStoreIfAllowed offset 0x00d64024
_subscribeToSettingStoreNotifications offset 0x00dbac20
_unsubscribeFromSettingStoreNotifications offset 0x00dbabd4
3. A/B Test Targeting Mechanism
3.1 Experiment Manager
**Class:** `FBMCExperimentManager` (offset 0x01cab0a8)
class FBMCExperimentManager
initWithUserSession: offset 0x00802d74
isFeatureEnabled: offset 0x0080c100
isFeatureEnabledWithoutLogging: offset 0x0080c09c
getFeatureIntValue: offset 0x0003788c
getFeatureIntValueWithoutLogging: offset 0x0003788c
**isFeatureEnabled: disassembly analysis:**
- undefined
3.2 MobileConfig System
**Class:** `FBMobileConfigStartupConfigs` (offset 0x01c7ac78)
class FBMobileConfigStartupConfigs
init offset 0x01318530
getBool:withDefault: offset 0x0131865c
getInt64:withDefault: offset 0x013186b0
getDouble:withDefault: offset 0x01318704
getString:withDefault: offset 0x01318760
getParamInfo: offset 0x013187dc
isOverrideValue: offset 0x01318834
getLoggingID: offset 0x01318874
hasValue: offset 0x013188b4
toJSON offset 0x01318944
setOverrideForParam:andValue: offset 0x01318a58
removeOverrideForParam: offset 0x01318a58
clearOverrides offset 0x01318b3c
getInstance offset 0x013185ec (class method)
**Related MobileConfig classes:**
- undefined
3.3 Experiment Context Classes
FNFExperimentContext offset 0x01c42e68
FNFDashAssetExperimentContext offset 0x01c42e18
FNFMp3ExperimentContext offset 0x01c42f08
4. Config Did Change Handler
**Method string found:** `oldConfig:configDidChange:` (offset 0x0203fdbe)
This method signature suggests a delegate pattern where objects receive both the old and new config values, allowing them to:
- undefined
**Related:** `_configDidChange` (offset 0x020ff95e) - Private notification handler
5. Feed Refresh Notifications
| Notification | Purpose |
|---|---|
| `FBFeedClientRankingGraphQLConnectionsForceRefreshNotification` | Forces feed reconnection |
| `FBFeedDeliveryCoordinatorClearCacheNotification` | Clears cached content |
| `didReceiveForceRefreshNotification` | Handler for force refresh |
6. Critical Findings
6.1 Remote Audio Control Capability
The architecture enables Facebook to remotely enable audio through:
- undefined
6.2 Hardware Switch Override
Evidence of deliberate hardware mute switch bypass:
- undefined
6.3 Automatic Unmute Triggers
- undefined
6.4 A/B Testing Integration
The `FBMCExperimentManager.isFeatureEnabled:` method gates features, meaning audio behavior changes can be:
- undefined
7. Notification Flow Diagram
Server Push (MQTT/GraphQL)
|
v
+------------------+
| Config Service |
| (MobileConfig) |
+--------+---------+
|
v
+-------------------+
| FBVideoSoundToggle|
| PluginSettingStore|
+--------+----------+
|
| updateCurrentSettingAndNotify:
v
+-----------------------------+
| NSNotificationCenter post: |
| kFeedSoundToggle |
| SettingChangeNotification |
+--------+--------------------+
|
+----+----+----+----+
| | | | |
v v v v v
[All FBSoundToggleListener instances]
|
| _updateVideoMuteStateFromSettingStoreIfAllowed
v
[Audio State Changed]
8. Recommendations for Further Analysis
- undefined
Appendix: Key Offsets
| Symbol | Offset |
|---|---|
| FBVideoSoundTogglePluginSettingStore | 0x01c69b08 |
| FBSoundToggleListener | 0x01c243c8 |
| FBMCExperimentManager | 0x01cab0a8 |
| FBMobileConfigStartupConfigs | 0x01c7ac78 |
| FBMediaUploadQualitySettingsService | 0x01c36d98 |
| kFeedSoundToggleSettingChangeNotification | 0x01dfb2a5 |
| SoundToggleSettingOnByIgnoreHWSwitch | 0x01e69f84 |
| SoundToggleSettingOnProgrammatically | 0x01e69fcc |