[Bug] [iOS] App delegate swizzler has no UIScene equivalent — cold-launch & universal links miss Analytics/Dynamic Links on scene-based apps
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 需要澄清
- 活跃度
- 活跃
- 技术栈
- cpp, firebase, ios, unity
- 领域
- analytics, mobile-dev
调研方向
从 app/src/invites/ios/invites_ios_startup.mm 开始,阅读 RunOnAppDelegateClasses 和 HookAppDelegateMethods,以及列出的 UIApplicationDelegate hooks。跟踪 issue 中描述的 scene delegate 传递路径,并确定如何在保留原始实现的同时让覆盖范围触达 Dynamic Links 和 Analytics;完成的标准是,报告中的 cold-launch 和已连接 scene 的 URL 及 user-activity 路径不再被静默丢弃。
由索引模型根据 Issue 内容生成。
描述
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:
- Scene-based iOS app (Unity export uses UnityScene : UIWindowSceneDelegate in their latest Editor versions).
- Register a Dynamic Link / campaign URL.
- Cold-launch the app via a universal link → delivered to scene:willConnectToSession:options:.
- 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?
- 主要语言
- C++
- 星标
- 326
- 派生
- 138
- 平均合并
- 2 天 16 小时
- 30 天内合并 PR
- 3
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
firebase/firebase-cpp-sdk 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
firebase/firebase-cpp-sdk#1905 · 2 条评论 ·
-
api: firestore
难度 5/5 一周以上 新手友好度 35/100
firebase/firebase-cpp-sdk#1920 · 3 条评论 ·
-
难度 3/5 1-2 天 新手友好度 70/100
firebase/firebase-cpp-sdk#1904 · 1 条评论 ·
-
nightly-testing
难度 4/5 3-5 天 新手友好度 25/100
firebase/firebase-cpp-sdk#1859 ·
-
nightly-testing
难度 4/5 3-5 天 新手友好度 30/100
firebase/firebase-cpp-sdk#1858 ·
查看 firebase/firebase-cpp-sdk 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
google/libultrahdr#485 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
godotengine/godot#123776 ·
-
bug
难度 1/5 1 小时以内 新手友好度 60/100
-
good first issue
难度 1/5 1 小时以内 新手友好度 90/100
-
good first issue
难度 2/5 1-3 小时 新手友好度 75/100
ros2/common_interfaces#344 ·