Fixed
- Resolve APNS
:too_many_provider_token_updates
by moving token generation intoAPNS.Token
(#227). - Support HTTPoison 2.0. (#236)
- Fix
DispatcherWorker
missing a clause for{:stop, reason}
in the init function APNS.Config
keys now decode properly for PEMs generated with OpenSSL 3. (#248)- Add
ExpiredToken
as APNS error response. (#240) - Better handling of APNS token lifecycle between
:dev
/:prod
environments with the same key identifier. (#239)
Fixed
- Reset stream ID when connection is closed. (#216)
Changed
- Bump
goth
dependency to~> 1.3.0
. (#224) - Bump minimum supported Elixir version to
1.7
.
Changed
- Default JSON library set to Jason. (#182)
- Pigeon application module moved from
Pigeon
toPigeon.Application
. (#183) - Kadabra bumped to v0.5.0, and now a required dependency. (#184)
- Sending a list of pushes synchronously now actually sends them one at a time. For production
workloads, using the async
:on_response
callback is strongly suggested.
Fixed
- Removed Elixir 1.11 compile warnings. (#184)
Removed
:certfile
and:keyfile
are no longer valid options for APNS configurations. Instead, read the file before loading (e.g.cert: File.read!("cert.pem")
) (#183):debug_log
removed.
Added
-
JSON library made configurable. For backwards compatibility, Poison is still a required dependency. Override in your
config.exs
.config :pigeon, json_library: Jason
Fixed
- Handle FCM single message_id's on topic pushes.
- Bumped minimum Elixir version to 1.6
- Raise
Pigeon.ConfigError
when booting invalid config structs. See below for validated keys and error types. APNS.JWTConfig
now validates key p8 content before connecting.- Relaxed
gen_stage
dependency to allow~> 1.0
Validated config keys:
ADM.Config
-:client_id
,:client_secret
APNS.Config
-:cert
,:key
APNS.JWTConfig
-:team_id
,:key
,:key_identifier
FCM.Config
-:key
Possible error values:
{:error, {:invalid, value}}
{:error, {:nofile, value}}
apns-push-type
header support for iOS 13. An additional:push_type
key has been added to theAPNS.Notification
struct.
- Document workers configuration for run-time configuration of push workers.
- Modify run-time configuration of push workers so that multiple (or no) workers may be returned by the startup configuration.
- Joken dependency bumped to 2.1
- Support for FCM
content_available
,mutable_content
, andcondition
keys - Set
priority
of APNS notifications - Joken dependency bumped to 2.0.1
- Fixed ADM handling of connection timeouts
- Fixed APNS, FCM and ADM error response parse crashes. Error responses not
listed in the documentation are returned as
:unknown_error
- Fixed APNS handling of notification
expiration
- Added APNS support for
collapse_id
- FCM notifications can now handle
time_to_live
,collapse_key
,restricted_package_name
anddry_run
keys
- Support for APNS JWT configuration
- Bump
kadabra
dependency tov0.4.2
- Relax
gen_stage
dependency to~> 0.12
- Bump
kadabra
dependency tov0.3.7
- Fix: relax
httpoison
dependency to allow0.x
or1.0
- Fix:
:on_response
callbacks spawned as supervised task instead of running in theWorker
process - Fix: ADM token refresh failure returns updated notification instead of error tuple
- More robust FCM/APNS backpressure
- Bumped minimum Kadabra version to
v0.3.6
- Auto-restart connections if max stream ID is reached
- FCM/APNS Workers now use GenStage to queue pending pushes
- Bumped minimum Kadabra version to
v0.3.5
- Bumped minimum Kadabra version to
v0.3.4
- Minimum requirements now Elixir v1.4 and OTP 19.2 (Kadabra bumped
to
v0.3.0
) - Startup worker configs. Create a functions that return config
structs and specify them your
config.exs
with
config :pigeon, workers: [
{YourApp.Pigeon, :apns_config},
{YourApp.Pigeon, :fcm_config},
{YourApp.Pigeon, :adm_config},
...
]
APNS
APNS.Config.config/1
renamed toAPNS.Config.new/1
APNS.push/2
tagged tuples done away with in favor of a:response
key on the notification.- Override push server endpoint with
:uri
option inAPNS.Config.new/1
:use_2197
renamed to:port
:uri
config option for overriding push server endpoint:reconnect
now false by default
FCM
NotificationResponse
done away with in favor of a:response
key onNotification
- Override push server endpoint with
:uri
and:port
options inFCM.Config.new/1
:uri
and:port
config options for overriding push server endpoint
ADM
ADM.Config.config/1
renamed toADM.Config.new/1
ADM.push/2
tagged tuples done away with in favor of a:response
key on the notification.ADM.start_connection/1
andADM.stop_connection/1
added
- Fix: removed connection pinging from FCM.Worker (
:ping_period
option left in FCM config to not break API)
- Fixed proper handling of large FCM push batches
- Fixed FCM infinite
GOAWAY session_timed_out
loop
- Configurable
:ping_period
for FCM connections
- GCM migrated to FCM API (http2)
GCM
modules renamed toFCM
- Set priority of FCM notifications
APNSWorker
andADMWorker
renamed toAPNS.Worker
andADM.Worker
- Disable auto-reconnect for APNS workers with
reconnect: false
- Removed Chatterbox http2 client adapter
- Configurable
:ping_period
for APNS connections
- Various
chatterbox
client adapter fixes
- Configurable
Pigeon.Http2.Client
. Currently supportskadabra
andchatterbox
kadabra
bumped tov0.2.0
- APNS workers can be started and referenced with pids and/or atom names
- Fix: Push
:name
option renamed to:to
- Fix: GCM/ADM async pushes now use
spawn/1
instead ofTask.async/1
- Fix: cleaned up Elixir v1.4 warnings
- Fix: poison dependency version made optionally
~> 2.0 or ~> 3.0
- Fix: kadabra not started
- Migrated HTTP/2 client from
chatterbox
tokadabra
- Support for ADM (Amazon Android) push
- APNS pushes are now synchronous by default. For async pushes use the
new
on_response
option. GCM and ADM will have it in the next major release. - Bulk APNS pushing
- Handling of multiple APNS worker connections with different configs
- Re-implemented APNS socket pings to keep connections open
:invalid_jSON
corrected to:invalid_json
- Fixed GCM error response atom conversion
- Fixed :eaddrinuse error when restarting Pigeon too quickly with :apns_2197 enabled
- APNS topic made optional
- APNS
put_mutable_content
helper function added - GCM can be configured on a per-push basis
- Updated to use Macro.underscore
- Implemented Chatterbox as APNS HTTP2 client
- APNS server responses now caught asynchronously
- GCM support for
notification
anddata
payload keys (Pigeon.GCM.Notification.new
API changes)
- APNS cert/key configs can now either be a file path, full-text string,
or
{:your_app, "path/to/file.pem"}
(which looks in the/priv
directory of your app) - Fixed APNSWorker crash on
:ssl.send/2
timeout - Better error-handling for invalid APNS configs
Pigeon.APNS.Notification.new/3
returns%Pigeon.APNS.Notification{}
struct- Configure APNS to use SSL port 2197 with
apns_2197: true
in yourconfig.exs
- Error feedback symbols converted from
CamelCase
tosnake_case
- APNS expiration values supported with
expiration
key in%Pigeon.APNS.Notification{}
- Fixed bug where APNSWorker would hang up if SSL connection failed. Now retries the connection twice more before gracefully shutting down.
- GCM error responses return proper chunk of regstration IDs
Pigeon.GCM.Notification.new/2
returns%Pigeon.GCM.Notification{}
struct- Multiple registration IDs allowed in
Pigeon.GCM.push/2
- Remove
:gcm_worker