Releases: jchambers/pushy
v0.6.1 - Bug fixes, connection longevity improvements
This release:
- Fixes a bug where exceptions caught while connecting were mis-reported and sometimes caused the connection future to not fire. See #261; thanks, @ylgrgyq!
- Sends HTTP/2
PING
frames when the connection is idle to prevent connections from closing unexpectedly (see #266).
For a complete list of changes, please see the v0.6.1 milestone.
v0.6 - Proxy support and metrics
This release adds a handful of new features and enhancements that have been on the list of feature requests for some time. The highlights:
ApnsClient
s can now connect to APNs servers through an HTTP, SOCKS4, or SOCKS5 proxy. Please see the "Using a proxy" section of the README for details.- Users can assign an
ApnsClientMetricsListener
to anApnsClient
to gather metrics that provide insight into the client's performance and behavior. Please see the "Metrics" section of the README for details. - For users looking to squeeze the most performance possible out of Pushy,
ApnsClient
s may now be set to useepoll
by passing anEpollEventLoopGroup
to theApnsClient
constructor.
For a complete list of changes, please see the v0.6 milestone.
v0.5.2 - More HTTP/2 bug fixes!
This is another minor release that contains fixes for two bugs:
- Fixed a
NullPointerException
that could prevent connectionFutures
from firing as expected if the connection attempt failed very quickly (#228) - Fixed incorrectly-parsed timestamps when a notification was rejected due to an unregistered token (#237)
It also includes a handful of small improvements:
- Updated to Netty 4.1.0 CR2 (#231)
- Added additional logging to indicate whether Pushy will try to use the JDK SSL provider or a native SSL provider via
netty-tcnative
(#230) - Added
InputStream
-based constructors toApnsClient
for those of you who get your certificates viagetResourceAsStream
(#235)
For a complete list of changes, please see the v0.5.2 milestone.
v0.5.1 - HTTP/2 bug fixes
This is a minor bug fix release that addresses issues identified in the initial HTTP/2 release (v0.5). Specifically:
- Removed a duplicate and potentially-conflicting dependency (#216)
- Correctly handle
null
passwords when loading .p12 files without password protection (#217) - Increased default maximum payload size from 2kB to 4kB (#220)
- Regrettably, dropped our claim that Pushy works under Java 6, which turns out to simply not be true (#224)
For a complete list of changes, please see the v0.5.1 milestone.
v0.5 - HTTP/2
This is a massive update that moves Pushy from using Apple's old Binary Notification Format to using their new, HTTP/2-based APNs protocol. This change has a number of implications, but the most significant is that we now know whether notifications were sent successfully.
Much of Pushy's design prior to 0.5 was driven by the complexities of not knowing whether notifications were sent successfully, and this change means that Pushy's design is now considerably simpler. Please see the README and API documentation for details.
Please note that this version of Pushy—and, for that matter, almost any software written in Java that intends to communicate via HTTP/2—carries some new and non-trivial system requirements. Please see the system requirements section of the README for details.
v0.4.3 - Unprocessed notification fix
This is mainly a bug fix release to address problems introduced in v0.4.2, but also includes some minor enhancements:
v0.4.2 - New payload fields, improved handling for bogus sequence numbers
This release includes updates to handle a couple upstream changes:
- Added support for the
title
,title-loc-key
, andtitle-loc-args
introduced in iOS 8.2 (#148—thanks, @matzew!) - Added a workaround for new upstream behavior where the APNs gateway will incorrectly send a sequence number of
0
when receiving a malformed notification like the one we use to close connections (#152—thanks, @U-238!)
Additionally, Pushy now depends on Netty 4.0.25, the latest release at the time of writing, to take advantage of upstream improvements and bug fixes (#147—thanks again, @matzew!).
For additional details, please see the v0.4.2 milestone.
v0.4.1 - Memory usage fix
This release makes no changes to Pushy itself, but updates the required version of Netty to 4.0.24. Netty 4.0.24 includes two changes of interest to Pushy users:
- netty/netty#3058 fixes #138, an issue where Pushy would eventually run out of memory when sending lots of notifications.
- netty/netty#3031 disables SSLv3; this wasn't an issue for Pushy (since Apple is disabling SSLv3 on the server side), but is another nail in the coffin for those concerned about the POODLE vulnerability
v0.4 - Exciting new technologies
This release includes features to take advantage of new upstream features and works around some limitations in the APNs protocol. Major new features:
- Pushy now uses the Binary Notification Format to send push notifications. This allows senders to specify a delivery priority when sending notifications. (#64)
- Pushy now supports features announced at WWDC 2014 (though those features still haven't been documented in the official APNs guide):
- To work around protocol-level design decisions that prevent us from knowing whether a connection is still alive, connections can now be configured to close after a fixed number of attempts to send push notifications or after a period of inactivity. (#116, #117, #118)
- Requesting expired tokens from the feedback service is now an asynchronous process and no longer blocks other threads (oops). (#124)
- Callers can now assign names to push managers. (#119)
- Due to upstream design decisions concerning long-lived threads and
ThreadLocal
instances, we no longer recommend using Pushy in a container environment (though this recommendation change is not accompanied by any functional change).
Push managers, push notification connections, and feedback service connections are all now much more configurable. To accommodate the new options, we've retired PushManagerFactory
and instead introduced a notion of configuration objects. This change is all but guaranteed to break existing PushManager
construction. Callers should now [construct PushManager
instances directly](http://relayrides.github.io/pushy/apidocs/0.4/com/relayrides/pushy/apns/PushManager.html#PushManager%28com.relayrides.pushy.apns.ApnsEnvironment, javax.net.ssl.SSLContext, io.netty.channel.nio.NioEventLoopGroup, java.util.concurrent.ExecutorService, java.util.concurrent.BlockingQueue, com.relayrides.pushy.apns.PushManagerConfiguration, java.lang.String%29), and configuration options can be passed to push managers via a PushManagerConfiguration
object.
v0.3 - New features for larger applications
This is a very significant release for Pushy. We've significantly reworked the internals to make Pushy easier to read and maintain (and also much more efficient!). We've fixed numerous reported and potential bugs, and strongly recommend upgrading to v0.3 at your earliest convenience. Some key changes in v0.3:
- Added support for the
content-available
flag toApnsPayloadBuilder
(#30) - Switched to a factory pattern for creating
PushManager
instances - Allowed callers to supply their own
BlockingQueue
for passing notifications to thePushManager
(#20) - Fixed a problem where exceptions thrown while processing a rejected notification could go un-handled (#37)
RejectedNotificationListener
s are now stored as strong references instead of weak references (#40)PushManager
instances now drain their internal retry queue before shutting down (#24)- Added a
FailedConnectionListener
interface so applications can decide to stop reconnecting in the event of a permanent connection failure (i.e. `SSLHandshakeException) (#32) - Added support for custom
SSLContext
s (#36) - Fixed a bug where the sent notification buffer wasn't being cleared properly, which could result in re-sending previously-successful notifications (#42)
PushManagers
now use one additional thread perPushManager
instance instead of one thread per connection- Fixed a bug where shutting down could hang if the shutdown process began while a connection attempt was in progress (#58)