-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
Description
I have multiple iOS apps using Firebase Cloud Messaging (FCM). One of the apps shows significantly lower user retention (around 15% lower) than the others. After careful comparison, we found the key difference lies in the version of Firebase Messaging SDK being used.
We suspect that Firebase Messaging SDK 11.4.0 may have issues with:
• FCM token generation/refresh
• Remote/silent push delivery
• Background message handling
These issues may lead to missed notifications and in turn, reduced engagement and retention.
Reproducing the issue
What we’ve verified
• FCM is properly configured with APNs.
• Remote notifications and Background fetch are enabled in Background Modes.
• APNs key is valid, and push works well on other apps with newer SDKs.
• Server-side delivery logs show no differences.
Firebase SDK Version
11.4
Xcode Version
16.4
Installation Method
CocoaPods
Firebase Product(s)
Messaging
Targeted Platforms
iOS
Relevant Log Output
If using Swift Package Manager, the project's Package.resolved
Expand Package.resolved
snippet
Replace this line with the contents of your Package.resolved.
If using CocoaPods, the project's Podfile.lock
Expand Podfile.lock
snippet
PODS:
- AFNetworking (4.0.1):
- AFNetworking/NSURLSession (= 4.0.1)
- AFNetworking/Reachability (= 4.0.1)
- AFNetworking/Security (= 4.0.1)
- AFNetworking/Serialization (= 4.0.1)
- AFNetworking/UIKit (= 4.0.1)
- AFNetworking/NSURLSession (4.0.1):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/Reachability (4.0.1)
- AFNetworking/Security (4.0.1)
- AFNetworking/Serialization (4.0.1)
- AFNetworking/UIKit (4.0.1):
- AFNetworking/NSURLSession
- AppAuth (1.7.6):
- AppAuth/Core (= 1.7.6)
- AppAuth/ExternalUserAgent (= 1.7.6)
- AppAuth/Core (1.7.6)
- AppAuth/ExternalUserAgent (1.7.6):
- AppAuth/Core
- AppCheckCore (11.2.0):
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- Apple-Cocoapod-KochavaCore (7.6.0)
- Apple-Cocoapod-KochavaTracker (7.6.0):
- Apple-Cocoapod-KochavaCore (~> 7.6.0)
- FBAEMKit (18.0.0):
- FBSDKCoreKit_Basics (= 18.0.0)
- FBSDKCoreKit (18.0.0):
- FBAEMKit (= 18.0.0)
- FBSDKCoreKit_Basics (= 18.0.0)
- FBSDKCoreKit_Basics (18.0.0)
- FirebaseABTesting (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseAnalytics (11.14.0):
- FirebaseAnalytics/Default (= 11.14.0)
- FirebaseCore (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseAnalytics/Default (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- GoogleAppMeasurement/Default (= 11.14.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- FirebaseCore (11.14.0):
- FirebaseCoreInternal (~> 11.14.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreExtension (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseCoreInternal (11.14.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseCrashlytics (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- FirebaseRemoteConfigInterop (~> 11.0)
- FirebaseSessions (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/Environment (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- FirebaseInstallations (11.14.0):
- FirebaseCore (~> 11.14.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- FirebaseRemoteConfig (11.14.0):
- FirebaseABTesting (~> 11.0)
- FirebaseCore (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- FirebaseRemoteConfigInterop (~> 11.0)
- FirebaseSharedSwift (~> 11.0)
- GoogleUtilities/Environment (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseRemoteConfigInterop (11.14.0)
- FirebaseSessions (11.14.0):
- FirebaseCore (~> 11.14.0)
- FirebaseCoreExtension (~> 11.14.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- PromisesSwift (~> 2.1)
- FirebaseSharedSwift (11.14.0)
- Google-Mobile-Ads-SDK (12.5.0):
- GoogleUserMessagingPlatform (>= 1.1)
- GoogleAdsOnDeviceConversion (2.0.0):
- GoogleUtilities/Logger (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/Core (11.14.0):
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/Default (11.14.0):
- GoogleAdsOnDeviceConversion (= 2.0.0)
- GoogleAppMeasurement/Core (= 11.14.0)
- GoogleAppMeasurement/IdentitySupport (= 11.14.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleAppMeasurement/IdentitySupport (11.14.0):
- GoogleAppMeasurement/Core (= 11.14.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/MethodSwizzler (~> 8.1)
- GoogleUtilities/Network (~> 8.1)
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- nanopb (~> 3.30910.0)
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleSignIn (8.0.0):
- AppAuth (< 2.0, >= 1.7.3)
- AppCheckCore (~> 11.0)
- GTMAppAuth (< 5.0, >= 4.1.1)
- GTMSessionFetcher/Core (~> 3.3)
- GoogleUserMessagingPlatform (3.0.0)
- GoogleUtilities/AppDelegateSwizzler (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Privacy
- GoogleUtilities/Environment (8.1.0):
- GoogleUtilities/Privacy
- GoogleUtilities/Logger (8.1.0):
- GoogleUtilities/Environment
- GoogleUtilities/Privacy
- GoogleUtilities/MethodSwizzler (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GoogleUtilities/Network (8.1.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Privacy
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (8.1.0)":
- GoogleUtilities/Privacy
- GoogleUtilities/Privacy (8.1.0)
- GoogleUtilities/Reachability (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GoogleUtilities/UserDefaults (8.1.0):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GTMAppAuth (4.1.1):
- AppAuth/Core (~> 1.7)
- GTMSessionFetcher/Core (< 4.0, >= 3.3)
- GTMSessionFetcher/Core (3.5.0)
- iCarousel (1.8.3)
- InMobiSDK (10.8.3)
- IQKeyboardManager (6.5.19)
- IronSourceAdMobAdapter (4.3.66.0):
- Google-Mobile-Ads-SDK (= 12.5.0)
- IronSourceSDK (~> 8.4)
- IronSourceAdQualitySDK (7.24.3)
- IronSourceInMobiAdapter (4.3.29.0):
- InMobiSDK (= 10.8.3)
- IronSourceSDK (~> 8.4)
- IronSourceOguryAdapter (4.3.3.0):
- IronSourceSDK (~> 8.4)
- OgurySdk (= 5.0.2)
- IronSourceSDK (8.9.0.0):
- IronSourceSDK/AdQuality (= 8.9.0.0)
- IronSourceSDK/Ads (= 8.9.0.0)
- IronSourceSDK/AdQuality (8.9.0.0):
- IronSourceAdQualitySDK (~> 7.24.3)
- IronSourceSDK/Ads (8.9.0.0)
- IronSourceUnityAdsAdapter (4.3.52.0):
- IronSourceSDK (~> 8.4)
- UnityAds (= 4.15.0)
- IronSourceVungleAdapter (4.3.45.0):
- IronSourceSDK (~> 8.4)
- VungleAds (= 7.5.1)
- Masonry (1.1.0)
- MBProgressHUD (1.2.0)
- MJExtension (3.4.2)
- MJRefresh (3.7.9)
- nanopb (3.30910.0):
- nanopb/decode (= 3.30910.0)
- nanopb/encode (= 3.30910.0)
- nanopb/decode (3.30910.0)
- nanopb/encode (3.30910.0)
- OguryAds (4.0.2):
- OguryAds/OMID (= 4.0.2)
- OguryCore (= 2.0.0)
- OguryAds/OMID (4.0.2):
- OguryCore (= 2.0.0)
- OguryCore (2.0.0)
- OgurySdk (5.0.2):
- OguryCore (= 2.0.0)
- OgurySdk/OguryAds (= 5.0.2)
- OgurySdk/OguryAds (5.0.2):
- OguryAds (= 4.0.2)
- OguryCore (= 2.0.0)
- PromisesObjC (2.4.0)
- PromisesSwift (2.4.0):
- PromisesObjC (= 2.4.0)
- SDWebImage (5.21.0):
- SDWebImage/Core (= 5.21.0)
- SDWebImage/Core (5.21.0)
- SVProgressHUD (2.3.1):
- SVProgressHUD/Core (= 2.3.1)
- SVProgressHUD/Core (2.3.1)
- UnityAds (4.15.0)
- VungleAds (7.5.1)
- ZipArchive (1.4.0)
DEPENDENCIES:
- AFNetworking
- Apple-Cocoapod-KochavaTracker
- FBSDKCoreKit
- FirebaseAnalytics
- FirebaseCrashlytics
- FirebaseMessaging
- FirebaseRemoteConfig
- GoogleSignIn
- iCarousel
- IQKeyboardManager
- IronSourceAdMobAdapter (= 4.3.66.0)
- IronSourceInMobiAdapter (= 4.3.29.0)
- IronSourceOguryAdapter (= 4.3.3.0)
- IronSourceSDK (= 8.9.0.0)
- IronSourceUnityAdsAdapter (= 4.3.52.0)
- IronSourceVungleAdapter (= 4.3.45.0)
- Masonry
- MBProgressHUD
- MJExtension
- MJRefresh
- SDWebImage
- SVProgressHUD
- ZipArchive
SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- AFNetworking
- AppAuth
- AppCheckCore
- Apple-Cocoapod-KochavaCore
- Apple-Cocoapod-KochavaTracker
- FBAEMKit
- FBSDKCoreKit
- FBSDKCoreKit_Basics
- FirebaseABTesting
- FirebaseAnalytics
- FirebaseCore
- FirebaseCoreExtension
- FirebaseCoreInternal
- FirebaseCrashlytics
- FirebaseInstallations
- FirebaseMessaging
- FirebaseRemoteConfig
- FirebaseRemoteConfigInterop
- FirebaseSessions
- FirebaseSharedSwift
- Google-Mobile-Ads-SDK
- GoogleAdsOnDeviceConversion
- GoogleAppMeasurement
- GoogleDataTransport
- GoogleSignIn
- GoogleUserMessagingPlatform
- GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- iCarousel
- InMobiSDK
- IQKeyboardManager
- IronSourceAdMobAdapter
- IronSourceAdQualitySDK
- IronSourceInMobiAdapter
- IronSourceOguryAdapter
- IronSourceSDK
- IronSourceUnityAdsAdapter
- IronSourceVungleAdapter
- Masonry
- MBProgressHUD
- MJExtension
- MJRefresh
- nanopb
- OguryAds
- OguryCore
- OgurySdk
- PromisesObjC
- PromisesSwift
- SDWebImage
- SVProgressHUD
- UnityAds
- VungleAds
- ZipArchive
SPEC CHECKSUMS:
AFNetworking: 3bd23d814e976cd148d7d44c3ab78017b744cd58
AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
Apple-Cocoapod-KochavaCore: b28f817d162ff95e913d29c228df7a58a90e1c02
Apple-Cocoapod-KochavaTracker: f9bf2ec1be118512f747e2350f4355a54994e246
FBAEMKit: e34530df538b8eb8aeb53c35867715ba6c63ef0c
FBSDKCoreKit: d3f479a69127acebb1c6aad91c1a33907bcf6c2f
FBSDKCoreKit_Basics: 017b6dc2a1862024815a8229e75661e627ac1e29
FirebaseABTesting: 13de5629e6d92a6a6c06429a6ddd9b19362de827
FirebaseAnalytics: d604dc875290f0213b9ead8a4692cf1e91e024d9
FirebaseCore: 8fb12caed934c900218ce66a419107db74214ade
FirebaseCoreExtension: 6af88594f639c1abb127bc096da32cf2c0dd69ff
FirebaseCoreInternal: 6a3b668197644aa858fc4127578637c6767ba123
FirebaseCrashlytics: 7f50df2871a788468825db11a6d845c363c2ad58
FirebaseInstallations: 863f2846bb124331b501d29c0f17f95caa2ef6bb
FirebaseMessaging: 61404edd221eaa09f9a733ce0fc9885f286705fe
FirebaseRemoteConfig: ded3fce28a1ba2bd339ff179e726211a06f05a0b
FirebaseRemoteConfigInterop: 7b74ceaa54e28863ed17fa39da8951692725eced
FirebaseSessions: e9a23024853074e56c9eca62be0e5ee243efd9c9
FirebaseSharedSwift: bdd5c8674c4712a98e70287c936bc5cca5d640f6
Google-Mobile-Ads-SDK: 6df9aadcee32bce0ff05bcad56ef2c88a4a5e82b
GoogleAdsOnDeviceConversion: 5c3c8de58786e7d0a4bdecbd32c16f87d815cc9f
GoogleAppMeasurement: 078fe9bfeed8e398253772ce81ef8690b0413b45
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4
GoogleUserMessagingPlatform: f8d0cdad3ca835406755d0a69aa634f00e76d576
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
iCarousel: d782f635afac190c49bb8ee455882284cff8b85f
InMobiSDK: 174c7910f27fb860e4f2204d621ef724efefc819
IQKeyboardManager: c8665b3396bd0b79402b4c573eac345a31c7d485
IronSourceAdMobAdapter: 1335af1f397c0e74cda186e2313e5b25cb7fe59a
IronSourceAdQualitySDK: 9974aea1ec73b24fd0eb7e74e7936bcae9fead1d
IronSourceInMobiAdapter: 90700f125036ec61427d38347d700e36ac7d0db4
IronSourceOguryAdapter: f69b6e694c3eb68abf2cc5563651afc305072b5d
IronSourceSDK: 285da6cf55cb80a1b258260ee27df8332552ec0d
IronSourceUnityAdsAdapter: 00c6c4141d1388531f93c4767f61e5580a22fa46
IronSourceVungleAdapter: 49fbf10fcffd6a0c58f60c4177afd8e16fb52b19
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406
MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
OguryAds: d9887cf3c756572175b22efadd08506d4b2f20fe
OguryCore: 1c7c2009f958b7026d5bca89e4c97dfa3fa9ef87
OgurySdk: 05f1a6433d0c291a62ea46b190cf0ab1b03ddee3
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
UnityAds: 5f487a7cf0b0cd162810cff51698f3ca0b4f8e68
VungleAds: f7143149d6160211c6d462453adce125160e4283
ZipArchive: e25a4373192673e3229ac8d6e9f64a3e5713c966
PODFILE CHECKSUM: 4d4c521776d62417c14a2b80ab8e9ba9646ad89c
COCOAPODS: 1.16.2