Android SDK Changelog


A reference of bug fixes and improvements made to the Pushy Android SDK.

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


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 thread when invoking Pushy.setEnterpriseConfig()

v1.0.114


  • Fixed rare case of ForegroundServiceStartNotAllowedException when foreground service functionality is enabled

v1.0.113


  • Added DNS anti-caching compatibility for Pushy.setEnterpriseConfig() (Pushy Enterpise only)

v1.0.112


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 NullPointerException in PushyJobService.acquireWakeLock() due to cross-thread access

v1.0.109


  • Fixed rare case of NullPointerException in PushyJobService.acquireWakeLock() due to cross-thread access

v1.0.108


  • Fixed PushyJobService crash introduced in 1.0.107

v1.0.107


  • Optimized PushyJobService MQTT connection reliability
  • Fixed rare case of IllegalStateException in PushySocketService (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 NullPointerException in getForegroundNotification() 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 ForegroundServiceDidNotStartInTimeException when 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 PushyJobService and PushyUpdateReceiver

v1.0.96


  • Started using PushySocketService on Android 7.0 (API level 24) and older
  • Fix #2 for rare NullPointerException crash due to race condition in PushyJobService.main()

v1.0.95


  • Fixed rare NullPointerException crash due to race condition in PushyJobService.main()

v1.0.94


  • Fixed fdsan_error() tombstone (not a crash) on Android 13 and up
  • Fixed rare NullPointerException crash in PushyUpdateReceiver.onReceive()

v1.0.93


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 PushyJobService when app is whitelisted from power optimizations

v1.0.89


  • Fixed rare ANR in PushySocketService (Android 5 only)

v1.0.88


  • Fixed rare case of NullPointerException in ClientComms.shutdownConnection()

v1.0.87


To display the notification permission dialog for your users on Android 13 and up:

  1. Please declare the android.permission.POST_NOTIFICATIONS permission in your AndroidManifest.xml:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  1. The notification permission dialog will automatically be displayed when calling Pushy.register(). Please only call Pushy.register() after the user has had a chance to explore your app, to increase the chance they will consent to receiving notifications.

  2. Please ensure you are passing an Activity context to Pushy.register() instead of an Application context for the notification permission dialog to be displayed.

  3. To check whether the notification permission dialog was denied in the past and needs to be displayed again, call Pushy.isPermissionGranted() and if it returns false you may call Pushy.requestNotificationPermission() to prompt the user again. Until the user consents, Pushy.isRegistered() will also return false.

  4. 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 NullPointerException in ClientState.quiesce()

v1.0.85


  • Fixed rare bug when calling PushySocketService.setForegroundNotification()
  • Removed the android.permission.SCHEDULE_EXACT_ALARM permission 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 PushyJobService on Android 6.0 and up (API level 23)
  • Fix #6 for NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.81


  • Fix #5 for NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.80


  • Fixed JobService memory 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 31 and up (Android 12+)

v1.0.77


  • Fixed crash #1 when compiling with targetSdkVersion 31 and up (Android 12+)

v1.0.76


  • FCM Fallback Delivery: added support for multiple FCM <service> declarations with action com.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 JobService memory leak detected by LeakCanary (#17)
  • Fixed UntaggedSocketViolation in StrictMode (VmPolicy) (#18)

v1.0.72


  • Added Pushy.setJobServiceInterval() for customizing the default JobService maintenance interval

v1.0.71


  • Fix #4 for NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.70


  • Added support for firebase-messaging:22.0.0 breaking changes
  • Fixed rare bug with PushyJobService entering a 15-second keep alive loop

v1.0.69


  • Migrated from the jCenter() repository to mavenCentral()

v1.0.68


  • Fixed rare crash when invoking PushySocketService.setForgroundNotification()

v1.0.67


  • Fixed rare case of ANR in PushyJobService due to SharedPreferences invocation

v1.0.66


  • Fix #3 for NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.65


  • Fix #2 for NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.64


  • Added __json intent extra for accesssing the raw JSON data payload in your BroadcastReceiver

v1.0.63


  • Fixed rare case of NullPointerException in PushyBroadcastManager due to race condition

v1.0.62


  • Fixed NullPointerException in PushyJobService due to AOSP platform bug (Android 5)

v1.0.61


  • Started using PushyJobService on Android 5.0 and up (API level 21)

v1.0.60


  • Fixed rare case of ANR in PushySocketService due to SharedPreferences invocation

v1.0.59


  • Fixed bug where configuring a foreground service would result in an IllegalStateException

v1.0.58


  • The android.permission.WRITE_EXTERNAL_STORAGE permission is no longer used by the SDK
  • You may remove this permission from your AndroidManifest.xml and 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


v1.0.53


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 BroadcastReceiver declarations in AndroidManifest.xml

v1.0.49


  • Fixed delayed delivery of notifications to the push BroadcastReceiver in 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 NullPointerException in 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 PushyJobService maintenance 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_REPLACED for 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.legacy dependency

v1.0.37


  • Added support for passing a NotificationCompat.Builder to Pushy.setNotificationChannel()

v1.0.36


v1.0.35


  • Added support for targetSdkVersion >= 26 (please define PushyJobService in your AndroidManifest.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.jackson inside 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 SSLSocketFactory warning when StrictMode is enabled

v1.0.17


  • Miscellaneous usability improvements

v1.0.16


  • Fixed minor bug when calling Pushy.toggleNotifications() after Pushy.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.jackson JSON parsing library in a separate .jar file

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 AndroidManifest permission verification

v1.0.5


  • Improved notification persistence mechanism

v1.0.4


  • Fixed NullPointerException when network connectivity is unstable

v1.0.3


  • Improved socket reconnection algorithm

v1.0.2


  • The android.permission.WRITE_EXTERNAL_STORAGE permission is now optional

v1.0.1


  • Improved token persistence between app reinstalls
  • Added AndroidManifest permission verification for troubleshooting

v1.0.0


  • Initial release