Skip to content

fix: use versionName instead of versionCode for app version reporting#2569

Open
fadi-george wants to merge 1 commit into5.7-mainfrom
fix/app-version-use-versionName
Open

fix: use versionName instead of versionCode for app version reporting#2569
fadi-george wants to merge 1 commit into5.7-mainfrom
fix/app-version-use-versionName

Conversation

@fadi-george
Copy link
Contributor

Description

One Line Summary

Use versionName instead of versionCode in AndroidUtils.getAppVersion() to align with iOS behavior.

Details

Motivation

Android reports versionCode (integer build number) as the app version while iOS reports CFBundleShortVersionString (display version string). This causes inconsistent app_version values across platforms, especially for cross-platform frameworks like .NET MAUI where ApplicationVersion (build number) and ApplicationDisplayVersion (display version) are distinct.

Fixes OneSignal/OneSignal-DotNet-SDK#82

Scope

Only affects AndroidUtils.getAppVersion(). All existing call sites (OneSignalImp, SubscriptionOperationExecutor, LoginUserOperationExecutor, SubscriptionManager, CustomEventOperationExecutor, OtelPlatformProvider) will now receive the display version string instead of the build number. Falls back to versionCode.toString() if versionName is null.

Testing

Unit testing

Existing test in OtelPlatformProviderTest validates getAppVersion is non-null and non-empty, which still passes.

Manual testing

Not yet tested on device.

Affected code checklist

  • REST API requests
  • Public API changes

Checklist

Overview

  • I have filled out all REQUIRED sections above
  • PR does one thing
  • Any Public API changes are explained in the PR details and conform to existing APIs

Testing

  • I have included test coverage for these changes, or explained why they are not needed
  • All automated tests pass, or I explained why that is not possible
  • I have personally tested this on my device, or explained why that is not possible

Final pass

  • Code is as readable as possible.
  • I have reviewed this PR myself, ensuring it meets each checklist item

Made with Cursor

Aligns Android with iOS, which reports CFBundleShortVersionString (display version).
Previously Android reported versionCode (integer build number), causing
inconsistency for cross-platform frameworks like .NET MAUI.

Falls back to versionCode if versionName is null.

Made-with: Cursor
@fadi-george fadi-george force-pushed the fix/app-version-use-versionName branch from bbef266 to 67022c8 Compare March 10, 2026 20:44
@abdulraqeeb33
Copy link
Contributor

Is there any impact to this on the backend? maybe some reporting?

@nan-li nan-li self-requested a review March 10, 2026 20:50
Copy link
Contributor

@nan-li nan-li left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Blocking while I review, we're technically making an API change and clients may already be using the previous versioning style

@github-actions
Copy link
Contributor

📊 Diff Coverage Report

Diff Coverage Report (Changed Lines Only)

Threshold: 80%

Changed Files Coverage

  • SyncJobService.kt: 0/4 changed lines (0.0%) (31 changed lines)
    • ⚠️ Below threshold: 4 uncovered changed lines
  • AndroidUtils.kt: 4/9 changed lines (44.4%) (28 changed lines)
    • ⚠️ Below threshold: 5 uncovered changed lines
  • JSONUtils.kt: 30/30 changed lines (100.0%) (58 changed lines)
  • ⚠️ CoreModule.kt: Not in coverage report (may not be compiled/tested)
  • IParamsBackendService.kt: 0/8 changed lines (0.0%) (11 changed lines)
    • ⚠️ Below threshold: 8 uncovered changed lines
  • ParamsBackendService.kt: 0/8 changed lines (0.0%) (12 changed lines)
    • ⚠️ Below threshold: 8 uncovered changed lines
  • BackgroundManager.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • ConfigModel.kt: 0/14 changed lines (0.0%) (42 changed lines)
    • ⚠️ Below threshold: 14 uncovered changed lines
  • ConfigModelStore.kt: 0/1 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • ConfigModelStoreListener.kt: 0/2 changed lines (0.0%) (3 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • HttpClient.kt: 3/3 changed lines (100.0%) (5 changed lines)
  • OperationModelStore.kt: 0/1 changed lines (0.0%) (3 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • OperationRepo.kt: 3/3 changed lines (100.0%) (3 changed lines)
  • Time.kt: 0/1 changed lines (0.0%) (6 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • LogLevel.kt: 0/1 changed lines (0.0%) (48 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • OneSignalCrashHandlerFactory.kt: 0/5 changed lines (0.0%) (38 changed lines)
    • ⚠️ Below threshold: 5 uncovered changed lines
  • OneSignalCrashUploaderWrapper.kt: 0/17 changed lines (0.0%) (60 changed lines)
    • ⚠️ Below threshold: 17 uncovered changed lines
  • OtelAnrDetector.kt: 0/100 changed lines (0.0%) (221 changed lines)
    • ⚠️ Below threshold: 100 uncovered changed lines
  • OtelSdkSupport.kt: 0/4 changed lines (0.0%) (27 changed lines)
    • ⚠️ Below threshold: 4 uncovered changed lines
  • Logging.kt: 4/24 changed lines (16.7%) (75 changed lines)
    • ⚠️ Below threshold: 20 uncovered changed lines
  • AndroidOtelLogger.kt: 9/9 changed lines (100.0%) (26 changed lines)
  • OtelIdResolver.kt: 0/96 changed lines (0.0%) (247 changed lines)
    • ⚠️ Below threshold: 96 uncovered changed lines
  • OtelPlatformProvider.kt: 0/76 changed lines (0.0%) (164 changed lines)
    • ⚠️ Below threshold: 76 uncovered changed lines
  • OneSignalImp.kt: 0/5 changed lines (0.0%) (14 changed lines)
    • ⚠️ Below threshold: 5 uncovered changed lines
  • OtelConfigEvaluator.kt: 20/20 changed lines (100.0%) (68 changed lines)
  • OtelLifecycleManager.kt: 0/117 changed lines (0.0%) (240 changed lines)
    • ⚠️ Below threshold: 117 uncovered changed lines
  • ChannelTracker.kt: 63/81 changed lines (77.8%) (128 changed lines)
    • ⚠️ Below threshold: 18 uncovered changed lines
  • OutcomeEventsController.kt: 5/5 changed lines (100.0%) (5 changed lines)
  • OutcomeSourceBody.kt: 2/8 changed lines (25.0%) (13 changed lines)
    • ⚠️ Below threshold: 6 uncovered changed lines
  • SessionListener.kt: 3/4 changed lines (75.0%) (6 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • IUserManager.kt: 0/3 changed lines (0.0%) (11 changed lines)
    • ⚠️ Below threshold: 3 uncovered changed lines
  • ⚠️ UserModule.kt: Not in coverage report (may not be compiled/tested)
  • UserManager.kt: 4/6 changed lines (66.7%) (16 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • CustomEventBackendService.kt: 20/21 changed lines (95.2%) (53 changed lines)
  • CustomEventController.kt: 15/15 changed lines (100.0%) (36 changed lines)
  • CustomEventMetadata.kt: 16/16 changed lines (100.0%) (49 changed lines)
  • IdentityModelStore.kt: 0/1 changed lines (0.0%) (3 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • TrackCustomEventOperation.kt: 28/35 changed lines (80.0%) (90 changed lines)
  • CustomEventOperationExecutor.kt: 26/33 changed lines (78.8%) (71 changed lines)
    • ⚠️ Below threshold: 7 uncovered changed lines
  • SubscriptionOperationExecutor.kt: 0/9 changed lines (0.0%) (10 changed lines)
    • ⚠️ Below threshold: 9 uncovered changed lines
  • InAppMessagesManager.kt: 14/28 changed lines (50.0%) (48 changed lines)
    • ⚠️ Below threshold: 14 uncovered changed lines
  • InAppBackendService.kt: 1/1 changed lines (100.0%) (1 changed lines)
  • InAppDisplayer.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • InAppMessageView.kt: 0/3 changed lines (0.0%) (3 changed lines)
    • ⚠️ Below threshold: 3 uncovered changed lines
  • OneSignalBounceInterpolator.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • InAppHydrator.kt: 1/1 changed lines (100.0%) (1 changed lines)
  • TriggerController.kt: 1/1 changed lines (100.0%) (4 changed lines)
  • LocationManager.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • GmsLocationController.kt: 0/4 changed lines (0.0%) (5 changed lines)
    • ⚠️ Below threshold: 4 uncovered changed lines
  • HmsLocationController.kt: 0/7 changed lines (0.0%) (8 changed lines)
    • ⚠️ Below threshold: 7 uncovered changed lines
  • OneSignalHmsEventBridge.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • NotificationChannelManager.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • OSWorkManagerHelper.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • NotificationRepository.kt: 0/4 changed lines (0.0%) (10 changed lines)
    • ⚠️ Below threshold: 4 uncovered changed lines
  • NotificationGenerationProcessor.kt: 0/3 changed lines (0.0%) (4 changed lines)
    • ⚠️ Below threshold: 3 uncovered changed lines
  • NotificationLifecycleService.kt: 0/8 changed lines (0.0%) (9 changed lines)
    • ⚠️ Below threshold: 8 uncovered changed lines
  • PushTokenManager.kt: 2/2 changed lines (100.0%) (3 changed lines)
  • ReceiveReceiptProcessor.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • PushRegistratorADM.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • PushRegistratorAbstractGoogle.kt: 0/7 changed lines (0.0%) (7 changed lines)
    • ⚠️ Below threshold: 7 uncovered changed lines
  • PushRegistratorHMS.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • NotificationRestoreProcessor.kt: 0/1 changed lines (0.0%) (1 changed lines)
    • ⚠️ Below threshold: 1 uncovered changed lines
  • NotificationRestoreWorkManager.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • ADMMessageHandler.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • ADMMessageHandlerJob.kt: 0/2 changed lines (0.0%) (2 changed lines)
    • ⚠️ Below threshold: 2 uncovered changed lines
  • OneSignalOpenTelemetry.kt: 0/75 changed lines (0.0%) (148 changed lines)
    • ⚠️ Below threshold: 75 uncovered changed lines
  • OtelFactory.kt: 0/23 changed lines (0.0%) (112 changed lines)
    • ⚠️ Below threshold: 23 uncovered changed lines
  • OtelLoggingHelper.kt: 0/31 changed lines (0.0%) (65 changed lines)
    • ⚠️ Below threshold: 31 uncovered changed lines
  • OtelFieldsPerEvent.kt: 0/13 changed lines (0.0%) (35 changed lines)
    • ⚠️ Below threshold: 13 uncovered changed lines
  • OtelFieldsTopLevel.kt: 0/21 changed lines (0.0%) (42 changed lines)
    • ⚠️ Below threshold: 21 uncovered changed lines
  • OtelConfigCrashFile.kt: 0/19 changed lines (0.0%) (50 changed lines)
    • ⚠️ Below threshold: 19 uncovered changed lines
  • OtelConfigRemoteOneSignal.kt: 0/18 changed lines (0.0%) (57 changed lines)
    • ⚠️ Below threshold: 18 uncovered changed lines
  • OtelConfigShared.kt: 0/18 changed lines (0.0%) (58 changed lines)
    • ⚠️ Below threshold: 18 uncovered changed lines
  • OtelCrashHandler.kt: 0/46 changed lines (0.0%) (127 changed lines)
    • ⚠️ Below threshold: 46 uncovered changed lines
  • OtelCrashReporter.kt: 0/33 changed lines (0.0%) (63 changed lines)
    • ⚠️ Below threshold: 33 uncovered changed lines
  • OtelCrashUploader.kt: 0/29 changed lines (0.0%) (91 changed lines)
    • ⚠️ Below threshold: 29 uncovered changed lines
  • ⚠️ MockHelper.kt: Not in coverage report (may not be compiled/tested)

Overall Coverage (Changed Lines Only)

274/1211 changed lines covered (22.6%)

❌ Coverage Check Failed

Files below 80% threshold:

  • SyncJobService.kt: 0.0% (4 uncovered changed lines)

  • AndroidUtils.kt: 44.4% (5 uncovered changed lines)

  • IParamsBackendService.kt: 0.0% (8 uncovered changed lines)

  • ParamsBackendService.kt: 0.0% (8 uncovered changed lines)

  • BackgroundManager.kt: 0.0% (1 uncovered changed lines)

  • ConfigModel.kt: 0.0% (14 uncovered changed lines)

  • ConfigModelStore.kt: 0.0% (1 uncovered changed lines)

  • ConfigModelStoreListener.kt: 0.0% (2 uncovered changed lines)

  • OperationModelStore.kt: 0.0% (1 uncovered changed lines)

  • Time.kt: 0.0% (1 uncovered changed lines)

  • LogLevel.kt: 0.0% (1 uncovered changed lines)

  • OneSignalCrashHandlerFactory.kt: 0.0% (5 uncovered changed lines)

  • OneSignalCrashUploaderWrapper.kt: 0.0% (17 uncovered changed lines)

  • OtelAnrDetector.kt: 0.0% (100 uncovered changed lines)

  • OtelSdkSupport.kt: 0.0% (4 uncovered changed lines)

  • Logging.kt: 16.7% (20 uncovered changed lines)

  • OtelIdResolver.kt: 0.0% (96 uncovered changed lines)

  • OtelPlatformProvider.kt: 0.0% (76 uncovered changed lines)

  • OneSignalImp.kt: 0.0% (5 uncovered changed lines)

  • OtelLifecycleManager.kt: 0.0% (117 uncovered changed lines)

  • ChannelTracker.kt: 77.8% (18 uncovered changed lines)

  • OutcomeSourceBody.kt: 25.0% (6 uncovered changed lines)

  • SessionListener.kt: 75.0% (1 uncovered changed lines)

  • IUserManager.kt: 0.0% (3 uncovered changed lines)

  • UserManager.kt: 66.7% (2 uncovered changed lines)

  • IdentityModelStore.kt: 0.0% (1 uncovered changed lines)

  • CustomEventOperationExecutor.kt: 78.8% (7 uncovered changed lines)

  • SubscriptionOperationExecutor.kt: 0.0% (9 uncovered changed lines)

  • InAppMessagesManager.kt: 50.0% (14 uncovered changed lines)

  • InAppDisplayer.kt: 0.0% (1 uncovered changed lines)

  • InAppMessageView.kt: 0.0% (3 uncovered changed lines)

  • OneSignalBounceInterpolator.kt: 0.0% (1 uncovered changed lines)

  • LocationManager.kt: 0.0% (1 uncovered changed lines)

  • GmsLocationController.kt: 0.0% (4 uncovered changed lines)

  • HmsLocationController.kt: 0.0% (7 uncovered changed lines)

  • OneSignalHmsEventBridge.kt: 0.0% (1 uncovered changed lines)

  • NotificationChannelManager.kt: 0.0% (2 uncovered changed lines)

  • OSWorkManagerHelper.kt: 0.0% (2 uncovered changed lines)

  • NotificationRepository.kt: 0.0% (4 uncovered changed lines)

  • NotificationGenerationProcessor.kt: 0.0% (3 uncovered changed lines)

  • NotificationLifecycleService.kt: 0.0% (8 uncovered changed lines)

  • ReceiveReceiptProcessor.kt: 0.0% (1 uncovered changed lines)

  • PushRegistratorADM.kt: 0.0% (2 uncovered changed lines)

  • PushRegistratorAbstractGoogle.kt: 0.0% (7 uncovered changed lines)

  • PushRegistratorHMS.kt: 0.0% (2 uncovered changed lines)

  • NotificationRestoreProcessor.kt: 0.0% (1 uncovered changed lines)

  • NotificationRestoreWorkManager.kt: 0.0% (2 uncovered changed lines)

  • ADMMessageHandler.kt: 0.0% (2 uncovered changed lines)

  • ADMMessageHandlerJob.kt: 0.0% (2 uncovered changed lines)

  • OneSignalOpenTelemetry.kt: 0.0% (75 uncovered changed lines)

  • OtelFactory.kt: 0.0% (23 uncovered changed lines)

  • OtelLoggingHelper.kt: 0.0% (31 uncovered changed lines)

  • OtelFieldsPerEvent.kt: 0.0% (13 uncovered changed lines)

  • OtelFieldsTopLevel.kt: 0.0% (21 uncovered changed lines)

  • OtelConfigCrashFile.kt: 0.0% (19 uncovered changed lines)

  • OtelConfigRemoteOneSignal.kt: 0.0% (18 uncovered changed lines)

  • OtelConfigShared.kt: 0.0% (18 uncovered changed lines)

  • OtelCrashHandler.kt: 0.0% (46 uncovered changed lines)

  • OtelCrashReporter.kt: 0.0% (33 uncovered changed lines)

  • OtelCrashUploader.kt: 0.0% (29 uncovered changed lines)

📥 View workflow run

@fadi-george
Copy link
Contributor Author

Blocking while I review, we're technically making an API change and clients may already be using the previous versioning style

Could mark it as a breaking change I suppose, but developers should at the release notes and make according changes if it.

@nan-li
Copy link
Contributor

nan-li commented Mar 10, 2026

Blocking while I review, we're technically making an API change and clients may already be using the previous versioning style

Could mark it as a breaking change I suppose, but developers should at the release notes and make according changes if it.

App version is used beyond the SDK for things like segmentation, we just need to think about this carefully before release

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants