firebase / firebase/firebase-cpp-sdk
[Bug] [iOS] App delegate swizzler has no UIScene equivalent — cold-launch & universal links miss Analytics/Dynamic Links on scene-based apps
- Lenguaje dominante
- C++
- Estrellas
- 326
- Forks
- 137
- Merge medio
- 3 d 9 h
- PR fusionados (30 d)
- 5
Descripción
### Environment
- Platform: iOS (scene-based lifecycle, UIWindowSceneDelegate)
- Firebase C++ SDK version: (also consumed via Firebase Unity SDK 12.10.1)
- Installed via: Unity (FirebaseCppApp / FirebaseCppAnalytics), with FirebaseAnalytics/FirebaseCore pods 11.14.0, GoogleUtilities 8.1.2
- Relevant products: Analytics (campaign attribution)
### Problem Description
The C++ SDK's iOS app-delegate swizzler (app/src/invites/ios/invites_ios_startup.mm, hooking installed via +load → RunOnAppDelegateClasses → HookAppDelegateMethods) only replaces UIApplicationDelegate methods:
- application:openURL:options:
- application:openURL:sourceApplication:annotation:
- application:continueUserActivity:restorationHandler:
- applicationDidBecomeActive:
There is no UISceneDelegate/UIWIndowSceneDelegate handling anywhere in the C++ SDK (looking at unity-v12.10.1 and v13.10.0)
On modern scene-based apps (UIWindowSceneDelegate), URL/NSUserActivity delivery moves off the app delegate onto the scene delegate. The C++ SDK adds nothing on top. As a result these link-delivery paths reach neither the C++ Dynamic Links machinery nor Analytics:
- scene:willConnectToSession:options: — cold-launch deep links (connectionOptions.URLContexts) and cold-launch universal links (connectionOptions.userActivities)
- scene:openURLContexts: — deep links delivered while the scene is already connected
- scene:continueUserActivity: — universal links delivered while the scene is already connected
**Impact:** on scene-based iOS apps, cold-launch deep/universal links and connected-scene universal links are silently dropped by the SDK.
#### Steps to reproduce:
1. Scene-based iOS app (Unity export uses UnityScene : UIWindowSceneDelegate in their latest Editor versions).
2. Register a Dynamic Link / campaign URL.
3. Cold-launch the app via a universal link → delivered to scene:willConnectToSession:options:.
4. Observe: no firebase::/GUL frame in the stack for that delivery; no Dynamic Link resolution; no Analytics campaign event. (Same for scene:continueUserActivity: or scene:openURLContexts: while connected.)
#### Question for maintainers:
- Is scene-delegate support planned for the C++ SDK's swizzler?
#### Workaround we're using (and would like validated):
We swizzle only the three uncovered scene methods on the scene delegate and forward to [FIRAnalytics handleOpenURL:] / [FIRAnalytics handleUserActivity:], chaining to the original implementation so the engine's own deep-link handling is preserved. Is this the recommended approach, and is there any double-handling risk if the SDK later completes scene coverage?
Guía de contribución
Línea de trabajo
Comienza en app/src/invites/ios/invites_ios_startup.mm, leyendo RunOnAppDelegateClasses y HookAppDelegateMethods junto con los hooks de UIApplicationDelegate indicados. Sigue las rutas de entrega del delegado de escena descritas en el issue y determina cómo podría llegar la cobertura a Dynamic Links y Analytics preservando la implementación original; el trabajo estará terminado cuando las rutas de URL y user-activity de cold-launch y escenas conectadas indicadas en el informe ya no se descarten silenciosamente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- cpp, firebase, ios, unity
- Área
- analytics, mobile-dev
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Activo
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 45/100