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