Android SDK Changelog
A reference of bug fixes and improvements made to the Pushy Android SDK.
v1.0.125
- Fixed rare crash in
PushySocketServicewhen using the SDK in foreground service mode on some Xiaomi, Oppo, and Vivo devices running Android 8 and 9
v1.0.124
- Fixed
PushyJobServicewarning "Job has a deadline with functional constraints and an extremely short time window of 0 ms"
v1.0.123
- No changes (migrated publishing from Nexus OSSRH to Maven Central)
v1.0.122
- No changes (migrated publishing from Nexus OSSRH to Maven Central)
v1.0.121
- Fixed rare ANR in
PushyServiceManager.stop() - Disabled notification badge number when foreground service is enabled
v1.0.120
- Fixed rare infinite reconnection loop caused by race condition in
PushyJobService
v1.0.119
- Fixed rare ANRs in
PushyJobService
v1.0.118
- Doze mode compatibility improvements
Please declare the android.permission.SCHEDULE_EXACT_ALARM permission in your AndroidManifest.xml when building your app with targetSdkVersion 31 (Android 12) or higher.
v1.0.117
- Improved connection handling during Doze mode when foreground service is enabled
v1.0.116
- Fixed rare case of sound playback for foreground notifications when foreground service is enabled
v1.0.115
- Fixed rare case of
Can't create handler inside threadwhen invokingPushy.setEnterpriseConfig()
v1.0.114
- Fixed rare case of
ForegroundServiceStartNotAllowedExceptionwhen foreground service functionality is enabled
v1.0.113
- Added DNS anti-caching compatibility for
Pushy.setEnterpriseConfig()(Pushy Enterpise only)
v1.0.112
- Added foreground service type compatibility for
targetSdkVersion 34(AndroidManifest changes)
v1.0.111
- Fixed rare race condition when calling
Pushy.setEnterpriseConfig()which caused the SDK to enter a disconnected state on certain Android builds
v1.0.110
- Fix #2 for rare case of
NullPointerExceptioninPushyJobService.acquireWakeLock()due to cross-thread access
v1.0.109
- Fixed rare case of
NullPointerExceptioninPushyJobService.acquireWakeLock()due to cross-thread access
v1.0.108
- Fixed
PushyJobServicecrash introduced in1.0.107
v1.0.107
- Optimized
PushyJobServiceMQTT connection reliability - Fixed rare case of
IllegalStateExceptioninPushySocketService(Oppo devices only)
v1.0.106
- Optimized wake lock release timing (thanks Eberth Cruz)
- Optimized variable keep alive mechanism for aggressive routers and cellular carriers
- Fixed rare case of
NullPointerExceptioningetForegroundNotification()when foreground service functionality is enabled
v1.0.105
- Optimized wake lock release timing (thanks Eberth Cruz)
v1.0.104
- Added
Pushy.setCustomDeviceId()to pass in a custom device identifier instead of relying on the device's ANDROID_ID (in the rare case of collisions)
v1.0.103
- Removed unused code in third party library
v1.0.102
- Fixed wake lock handle leak in
PushyUpdateReceiver(thanks Eberth Cruz)
v1.0.101
- Fixed foreground service notification grouping issue
v1.0.100
- Fixed rare case of
ForegroundServiceDidNotStartInTimeExceptionwhen foreground service functionality is enabled
v1.0.99
- Added
Pushy.toggleForegroundService()for enabling built-in foreground service functionality
v1.0.98
- Fixed rare reconnection bug when calling
Pushy.toggleNotifications(false)when device Internet is disconnected
v1.0.97
- Fixed rare ANRs in
PushyJobServiceandPushyUpdateReceiver
v1.0.96
- Started using
PushySocketServiceon Android 7.0 (API level 24) and older - Fix #2 for rare
NullPointerExceptioncrash due to race condition inPushyJobService.main()
v1.0.95
- Fixed rare
NullPointerExceptioncrash due to race condition inPushyJobService.main()
v1.0.94
- Fixed
fdsan_error()tombstone (not a crash) on Android 13 and up - Fixed rare
NullPointerExceptioncrash inPushyUpdateReceiver.onReceive()
v1.0.93
- Added
Pushy.getFCMToken()for accessing the underlying FCM Fallback Delivery device token
v1.0.92
- Attempted to fix rare
fdsan_error()tombstone (not a crash) on Android 13 and up
v1.0.91
- Fixed rare bug when calling
PushySocketService.setForegroundNotification()
v1.0.90
- Added variable keep alive mechanism for custom heartbeat intervals over 5 minutes
- Improved battery usage of
PushyJobServicewhen app is whitelisted from power optimizations
v1.0.89
- Fixed rare ANR in
PushySocketService(Android 5 only)
v1.0.88
- Fixed rare case of
NullPointerExceptioninClientComms.shutdownConnection()
v1.0.87
- Added compatibility with the new Android 13 notification runtime permission scheme.
To display the notification permission dialog for your users on Android 13 and up:
- Please declare the android.permission.POST_NOTIFICATIONS permission in your
AndroidManifest.xml:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
- The notification permission dialog will automatically be displayed when calling
Pushy.register(). Please only callPushy.register()after the user has had a chance to explore your app, to increase the chance they will consent to receiving notifications. - Please ensure you are passing an
Activitycontext toPushy.register()instead of anApplicationcontext for the notification permission dialog to be displayed. - To check whether the notification permission dialog was denied in the past and needs to be displayed again, call
Pushy.isPermissionGranted()and if it returnsfalseyou may callPushy.requestNotificationPermission()to prompt the user again. Until the user consents,Pushy.isRegistered()will also returnfalse. - Android 13 will only prompt the user twice (once if
targetSdkVersion < 33). Beyond that, you will need to instruct your Android 13 users to manually toggle notifications on for your app in the App Settings to receive notifications.
v1.0.86
- Fixed rare cases of
NullPointerExceptioninClientState.quiesce()
v1.0.85
- Fixed rare bug when calling
PushySocketService.setForegroundNotification() - Removed the
android.permission.SCHEDULE_EXACT_ALARMpermission requirement
Please undeclare the android.permission.SCHEDULE_EXACT_ALARM permission in your AndroidManifest.xml as Google Play may no longer approve releases declaring this permission.
v1.0.84
- Additional reliability fixes for
PushySocketService(Android 5 only)
v1.0.83
- Multiple reliability fixes for
PushySocketService(Android 5 only)
v1.0.82
- Started using
PushyJobServiceon Android 6.0 and up (API level 23) - Fix #6 for
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.81
- Fix #5 for
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.80
- Fixed
JobServicememory leak detected by LeakCanary (#20)
v1.0.79
- Doze mode compatibility improvements
- Fixed rare infinite reconnection loop caused by race condition
- Chinese manufacturer power saving compatibility improvements
Please declare the android.permission.SCHEDULE_EXACT_ALARM permission in your AndroidManifest.xml when building your app with targetSdkVersion 31 (Android 12) or higher.
v1.0.78
- Fixed crash #2 when compiling with
targetSdkVersion 31and up (Android 12+)
v1.0.77
- Fixed crash #1 when compiling with
targetSdkVersion 31and up (Android 12+)
v1.0.76
- FCM Fallback Delivery: added support for multiple FCM
<service>declarations with actioncom.google.firebase.MESSAGING_EVENT
v1.0.75
- Fix #2 for rare bug with
Pushy.setAppId()when external storage permission is granted
v1.0.74
- Fixed rare bug with
Pushy.setAppId()when external storage permission is granted
v1.0.73
- Fixed
JobServicememory leak detected by LeakCanary (#17) - Fixed
UntaggedSocketViolationin StrictMode (VmPolicy) (#18)
v1.0.72
- Added
Pushy.setJobServiceInterval()for customizing the default JobService maintenance interval
v1.0.71
- Fix #4 for
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.70
- Added support for
firebase-messaging:22.0.0breaking changes - Fixed rare bug with
PushyJobServiceentering a 15-second keep alive loop
v1.0.69
- Migrated from the
jCenter()repository tomavenCentral()
v1.0.68
- Fixed rare crash when invoking
PushySocketService.setForgroundNotification()
v1.0.67
- Fixed rare case of ANR in
PushyJobServicedue toSharedPreferencesinvocation
v1.0.66
- Fix #3 for
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.65
- Fix #2 for
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.64
- Added
__jsonintent extra for accesssing the raw JSONdatapayload in yourBroadcastReceiver
v1.0.63
- Fixed rare case of
NullPointerExceptioninPushyBroadcastManagerdue to race condition
v1.0.62
- Fixed
NullPointerExceptioninPushyJobServicedue to AOSP platform bug (Android 5)
v1.0.61
- Started using
PushyJobServiceon Android 5.0 and up (API level 21)
v1.0.60
- Fixed rare case of ANR in
PushySocketServicedue toSharedPreferencesinvocation
v1.0.59
- Fixed bug where configuring a foreground service would result in an
IllegalStateException
v1.0.58
- The
android.permission.WRITE_EXTERNAL_STORAGEpermission is no longer used by the SDK - You may remove this permission from your
AndroidManifest.xmland stop displaying a permission dialog if your app doesn't need access to external storage -
The SDK now makes use of the device's
ANDROID_ID, in combination with the device manufacturer and model name, for unique device recognition between app reinstalls
v1.0.57
- Added the option to run as a foreground service to prevent background service interruption
v1.0.56
- Improved MQTT connection resiliency on Chinese manufacturer devices
v1.0.55
- Added invocation of
BufferedReader.close()to fix Strict Mode warning (thanks @FutureGUIs)
v1.0.54
- Added support for FCM high priority fallback delivery to burst through Android power saving mode
v1.0.53
- MQTT connection security and performance improvements (see updated firewall requirements)
v1.0.52
- Dropped support for legacy devices without an auth key
v1.0.51
- Added
Pushy.isConnected()for checking whether the underlying MQTT connection is established
v1.0.50
- Added support for multiple push
BroadcastReceiverdeclarations inAndroidManifest.xml
v1.0.49
- Fixed delayed delivery of notifications to the push
BroadcastReceiverin rare scenarios
v1.0.48
- Added
Pushy.setEnterpriseCertificate()for self-signed certificate support in Pushy Enterprise
v1.0.47
- Added
Pushy.toggleExternalStoragePersistence()for enabling/disabling device token persistence in the external storage
v1.0.46
- Fixed rare
NullPointerExceptionin internal MQTT connectivity library
v1.0.45
- Fixed bug where calling
Pushy.toggleNotifications(false)would execute network I/O on main thread
v1.0.44
- Fixed bug where calling
Pushy.setAppId()would clear a device's saved token on app reinstallation
v1.0.43
- Added an option to customize the
PushyJobServicemaintenance interval
v1.0.42
- Fixed bug that prevented socket reconnection when switching from cellular to Wi-Fi
v1.0.41
- Added the option to proxify requests for strict firewalls (contact us for more info)
v1.0.40
- Migrated to
android.intent.action.MY_PACKAGE_REPLACEDfor app update broadcasts (Android O)
v1.0.39
- Fixed rare bug that would prevent reconnection when keepalive mechanism fails
v1.0.38
- Removed
org.apache.http.legacydependency
v1.0.37
- Added support for passing a
NotificationCompat.BuildertoPushy.setNotificationChannel()
v1.0.36
- Added
Pushy.setNotificationChannel()for automatically configuring a Notification Channel for your notifications (example usage)
v1.0.35
- Added support for
targetSdkVersion >= 26(please definePushyJobServicein yourAndroidManifest.xml)
v1.0.34
- Added
Pushy.setAppId()for overriding package name dashboard app identification
v1.0.33
- Minor reliability improvements in rare scenarios
v1.0.32
- Added
Pushy.unregister(Context)for clearing the device registration token
v1.0.31
- Fixed crash related to Android O background execution limits
v1.0.30
- Added a 15-second timeout for all SDK network requests
v1.0.29
- Added
PushyLogger.setLogListener()for listening to the SDK logcat output
v1.0.28
- Added
Pushy.toggleWifiPolicyCompliance()for complying with the device's Wi-Fi sleep policy
v1.0.27
- Bundled
com.fasterxml.jacksoninside the SDK
v1.0.26
- Fixed minor bug with
Pushy.setEnterpriseConfig()for enterprise apps
v1.0.25
- Fixed minor bug with device authentication
v1.0.24
- Added topic subscribe/unsubscribe methods
v1.0.23
- Improved device token validation logic
v1.0.22
- Improved persisted token verification
v1.0.21
- Improved device authentication security
v1.0.20
- Improved the performance of the SDK
v1.0.19
- Improved migration compatibility for Enterprise apps
v1.0.18
- Fixed
SSLSocketFactorywarning whenStrictModeis enabled
v1.0.17
- Miscellaneous usability improvements
v1.0.16
- Fixed minor bug when calling
Pushy.toggleNotifications()afterPushy.listen()
v1.0.15
- Improved MQTT reconnection logic in unstable networks
v1.0.14
- Added
Pushy.setHeartbeatInterval()to modify the default socket keep-alive interval
v1.0.13
- Miscellaneous reliability improvements
v1.0.12
- Reimplemented MQTT connection logic to improve overall reliability
v1.0.11
- Added
Pushy.toggleNotificationsEnabled()to enable or disable push notifications for the device
v1.0.10
- Improved notification delivery reliability when app is running in the background
v1.0.9
- Improved token persistence algorithm for better device token tracking
- Bundled the
com.fasterxml.jacksonJSON parsing library in a separate.jarfile
v1.0.8
- Fixed bug with double/float values in push payloads
v1.0.7
- Fixed crash for Android 2.2 (Froyo) devices
v1.0.6
- Fixed ANR in background service (transparent to users)
- Added the option to disable
AndroidManifestpermission verification
v1.0.5
- Improved notification persistence mechanism
v1.0.4
- Fixed
NullPointerExceptionwhen network connectivity is unstable
v1.0.3
- Improved socket reconnection algorithm
v1.0.2
- The
android.permission.WRITE_EXTERNAL_STORAGEpermission is now optional
v1.0.1
- Improved token persistence between app reinstalls
- Added
AndroidManifestpermission verification for troubleshooting
v1.0.0
- Initial release