2023-01-02 00:38:55

This is a minor release that adds support for live activity notifications and push-to-talk notifications. It also updates a number of dependencies and clarifies documentation around serializing notification payloads to JSON.

For a complete list of changes, please see the v0.15.2 milestone.

2022-02-27 00:01:06

This is a minor release that adds support for the location push type introduced in iOS 15 (thank you, @fairEnough83) and fixes an issue with token handling that could lead to notifications getting rejected with TooManyProviderTokenUpdates under certain circumstances. This release also updates Pushy's dependency on Netty to use the latest version (4.1.74).

2021-08-22 23:32:35

This is a major release that includes several new features and, importantly, a few breaking API changes. Please see the v0.15.0 milestone for a complete list of changes.

New features and bug fixes

  • Mock servers can once again bind to an OS-selected port and now return the bound port when the server starts up
  • Simplified authentication-related exceptions
  • Authentication tokens are now shared between connections to reduce the frequency of token changes
  • Fixed a bug where connections could stay open after receiving a GOAWAY frame from the APNs server
  • Fixed an issue where channels may not have been cleaned up as expected after an exception
  • Fixed various packaging issues
  • Enabled TLS hostname verification
  • HTTP status codes are now included in responses from the APNs server
  • Rejection reasons inresponses from the APNs server are now Optional instead of @Nullable
  • Literal and localized alert content may now co-exist in the same notification payload
  • Added support for new payload fields (relevance-score and interruption-level) introduced in iOS 15
  • Added JPMS automatic module names to all project artifacts
  • Updated to Netty 4.1.67/netty-tcnative 2.0.41

Breaking changes

Some new features, fixes, and general maintenance have led to breaking API changes that Pushy users may need to address in their own code. In particular:

  • Starting a mock server now returns a CompletableFuture<Integer> instead of CompletableFuture<Void>
  • Creating a new AuthenticationToken from a signing key no longer throws checked exceptions
  • The PushNotificationResponse interface now includes a getStatusCode method
  • Rejection reasons inresponses from the APNs server are now Optional instead of @Nullable
  • Behavior of setters for alert content in payload builders has changed; literal and localized content may now co-exist in the same payload
2020-10-22 00:35:34

This is a maintenance release that fixes a few small issues and adds some new logging to help us debug two outstanding issues (#811 and #816). Changes in this release include:

  • Fix a JSON parsing bug that would only affect folks who were trying to use the JSON parser for something other than parsing responses from the APNs server
  • Update to Netty 4.1.53/netty-tcnative 2.0.34
  • Add more logging when creating/closing connections
  • Fix a bug that could cause us to keep sending pings after a channel should have closed
  • Add SNI support
  • Identify which channels are affected by token changes in log messages

For a complete list of changes, please see the v0.14.2 milestone.

2020-06-04 21:33:53

This release is a grab-bag of fixes, cleanup, and improvements. The highlights:

  • Fixed a potential bug where we'd continue to try to recover from an expired authentication token even if the server considered the connection permanently invalid
  • Significantly improved the performance of our JSON parser
  • Use Optional to convey that timestamps in push notification responses won't always be present

For a complete list of changes, please see the v0.14.1 milestone.

2020-05-10 05:02:03

This is a very small maintenance release that back-ports a NullPointerException fix from v0.14.0 so folks can get the fix without going through a major migration effort.

2020-05-10 03:52:39

This is a big release with lots of breaking API changes. Please be prepared for non-trivial migration work before upgrading from v0.13 to v0.14. That said, Pushy v0.14.0 introduces lots of exciting changes and improvements! Here are some highlights:

  • Pushy now requires Java 8 or newer
  • Pushy now returns CompletableFutures instead of Netty Futures in its public API
  • We now use java.time types where appropriate
  • We now use lambdas internally and in some examples for increased readability
  • Pushy now uses JUnit 5 for tests
  • We no longer depend on GSON (or any other external JSON library)
  • Pushy now offers Gson- and Jackson-based payload builders as separate modules

We also fixed a handful of bugs related to error handling, including a NullPointerException that could happen if we failed to open an HTTP/2 stream.

For a complete list of changes, please see the v0.14.0 milestone.

2020-02-29 10:45:58

This release fixes a number of issues and adds a handful of new features and performance enhancements. Lots of people contributed to this release; thank you!

Please note that Pushy is now an independent project and is no longer sponsored by Turo. The project is still maintained by @jchambers, but package names and Maven coordinates have changed. Please see the mailing list for additional context and discussion.

With all that said, the most notable changes in this release are:

  • Pushy is now an independent project and has new package names and Maven coordinates
  • Fixed an issue where pending channels might not be closed cleanly when a channel pool was shutting down (thanks, @ylgrgyq!)
  • Added OSGi metadata and changed package type from jar to bundle (thanks, @arunan-interlink!)
  • Dropped support for OIO transport
  • Fixed an issue where, due to an upstream behavior change, clients using token-based authentication would see a radical drop in throughput after tokens were rotated (thanks, @extraSix, @janzar, and @helle!)
  • Fixed some broken links to external API docs from the Pushy API documentation
  • Removed some duplicative logging statements
  • Fixed a memory leak when using lots of clients with a single event loop group (thanks, @eugeneseppel!)
  • Added factory methods to construct HTTP proxies based on global JVM settings (thanks, @arunan-interlink!)
  • Updated to the latest version of Netty to resolve some (non-applicable!) security warnings
  • Various minor performance enhancements

For a complete list of changes, please see the v0.13.11 milestone.

2019-10-14 03:51:40

This release adds support for new apns-push-type header values and the target-content-id payload field introduced in iOS 13. For a complete list of changes, please see the v0.13.10 milestone.

2019-07-08 10:04:54

This release includes support for the new apns-push-type header introduced in (and required by) iOS 13/watchOS 6. It also includes a fix for an upstream issue where round-robin DNS resolvers wouldn't close the UDP ports they opened, leading to a leak.

For a complete list of changes, please see the v0.13.9 milestone.