push-notify-apn-0.2.0.1: Send push notifications to mobile iOS devices

Copyright(C) 2017 memrange UG
LicenseBSD3
MaintainerHans-Christian Esperer <hc@memrange.io>
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Network.PushNotify.APN

Description

Send push notifications using Apple's HTTP2 APN API

Synopsis

Documentation

newSession Source #

Arguments

:: FilePath

Path to the client certificate key

-> FilePath

Path to the client certificate

-> FilePath

Path to the CA

-> Bool

True if the apn development servers should be used, False to use the production servers

-> Int

How many messages will be sent in parallel? This corresponds to the number of http2 streams open in parallel; 100 seems to be a default value.

-> Int

How many connections to be opened at maximum.

-> ByteString

Topic (bundle name of the app)

-> IO ApnSession

The newly created session

Start a new session for sending APN messages. A session consists of a connection pool of connections to the APN servers, while each connection has a pool of workers that create HTTP2 streams to send individual push notifications.

newMessage Source #

Arguments

:: JsonApsMessage

The standard message to include

-> JsonAps

The resulting APN message

Prepare a new apn message consisting of a standard message without a custom payload

newMessageWithCustomPayload Source #

Arguments

:: JsonApsMessage

The message

-> Text

The custom payload

-> JsonAps

The resulting APN message

Prepare a new apn message consisting of a standard message and a custom payload

hexEncodedToken Source #

Arguments

:: Text

The base16 (hex) encoded unique identifier for a device (APN token)

-> ApnToken

The resulting token

Create a token from a hex encoded text

rawToken Source #

Arguments

:: ByteString

The bytestring that uniquely identifies a device (APN token)

-> ApnToken

The resulting token

Create a token from a raw bytestring

sendMessage Source #

Arguments

:: ApnSession

Session to use

-> ApnToken

Device to send the message to

-> JsonAps

The message to send

-> IO ApnMessageResult

The response from the APN server

Send a push notification message.

sendSilentMessage Source #

Arguments

:: ApnSession

Session to use

-> ApnToken

Device to send the message to

-> IO ApnMessageResult

The response from the APN server

Send a silent push notification

sendRawMessage Source #

Arguments

:: ApnSession

Session to use

-> ApnToken

Device to send the message to

-> ByteString

The message to send

-> IO ApnMessageResult

The response from the APN server

Send a raw payload as a push notification message (advanced)

alertMessage Source #

Arguments

:: Text

The title of the message

-> Text

The body of the message

-> JsonApsMessage

The modified message

Create a new APN message with an alert part

bodyMessage Source #

Arguments

:: Text

The body of the message

-> JsonApsMessage

The modified message

Create a new APN message with a body and no title

emptyMessage :: JsonApsMessage Source #

Create an empty apn message

setAlertMessage Source #

Arguments

:: Text

The title of the message

-> Text

The body of the message

-> JsonApsMessage

The message to alter

-> JsonApsMessage

The modified message

Set the alert part of an APN message

setMessageBody Source #

Arguments

:: Text

The body of the message

-> JsonApsMessage

The message to alter

-> JsonApsMessage

The modified message

Set the body of an APN message without affecting the title

setBadge Source #

Arguments

:: Int

The badge number to set. The badge number is displayed next to your app's icon. Set to 0 to remove the badge number.

-> JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Set the badge part of an APN message

setCategory Source #

Arguments

:: Text

The category to set

-> JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Set the category part of an APN message

setSound Source #

Arguments

:: Text

The sound to use (either "default" or something in the application's bundle)

-> JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Set a sound for an APN message

clearAlertMessage Source #

Arguments

:: JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Remove the alert part of an APN message

clearBadge Source #

Arguments

:: JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Clear the badge part of an APN message

clearCategory Source #

Arguments

:: JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Clear the category part of an APN message

clearSound Source #

Arguments

:: JsonApsMessage

The message to modify

-> JsonApsMessage

The modified message

Clear the sound for an APN message

addSupplementalField Source #

Arguments

:: ToJSON record 
=> Text

The field name

-> record

The value

-> JsonAps

The APN message to modify

-> JsonAps

The resulting APN message

Add a supplemental field to be sent over with the notification

NB: The field aps must not be modified; attempting to do so will cause a crash.

closeSession :: ApnSession -> IO () Source #

Manually close a session. The session must not be used anymore after it has been closed. Calling this function will close the worker thread, and all open connections to the APN service that belong to the given session. Note that sessions will be closed automatically when they are garbage collected, so it is not necessary to call this function.

isOpen :: ApnSession -> IO Bool Source #

Check whether a session is open or has been closed by a call to closeSession

data ApnSession Source #

A session that manages connections to Apple's push notification service

data JsonAps Source #

A push notification message

Instances
Show JsonAps Source # 
Instance details

Defined in Network.PushNotify.APN

Generic JsonAps Source # 
Instance details

Defined in Network.PushNotify.APN

Associated Types

type Rep JsonAps :: Type -> Type #

Methods

from :: JsonAps -> Rep JsonAps x #

to :: Rep JsonAps x -> JsonAps #

ToJSON JsonAps Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep JsonAps Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep JsonAps = D1 (MetaData "JsonAps" "Network.PushNotify.APN" "push-notify-apn-0.2.0.1-5OS6kJ5ChndFWKuLvfzIgT" False) (C1 (MetaCons "JsonAps" PrefixI True) (S1 (MetaSel (Just "jaAps") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 JsonApsMessage) :*: (S1 (MetaSel (Just "jaAppSpecificContent") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe Text)) :*: S1 (MetaSel (Just "jaSupplementalFields") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Map Text Value)))))

data JsonApsAlert Source #

The specification of a push notification's message body

Instances
Show JsonApsAlert Source # 
Instance details

Defined in Network.PushNotify.APN

Generic JsonApsAlert Source # 
Instance details

Defined in Network.PushNotify.APN

Associated Types

type Rep JsonApsAlert :: Type -> Type #

ToJSON JsonApsAlert Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep JsonApsAlert Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep JsonApsAlert = D1 (MetaData "JsonApsAlert" "Network.PushNotify.APN" "push-notify-apn-0.2.0.1-5OS6kJ5ChndFWKuLvfzIgT" False) (C1 (MetaCons "JsonApsAlert" PrefixI True) (S1 (MetaSel (Just "jaaTitle") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe Text)) :*: S1 (MetaSel (Just "jaaBody") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Text)))

data JsonApsMessage Source #

Push notification message's content

data ApnFatalError Source #

Instances
Eq ApnFatalError Source # 
Instance details

Defined in Network.PushNotify.APN

Show ApnFatalError Source # 
Instance details

Defined in Network.PushNotify.APN

Generic ApnFatalError Source # 
Instance details

Defined in Network.PushNotify.APN

Associated Types

type Rep ApnFatalError :: Type -> Type #

FromJSON ApnFatalError Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep ApnFatalError Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep ApnFatalError = D1 (MetaData "ApnFatalError" "Network.PushNotify.APN" "push-notify-apn-0.2.0.1-5OS6kJ5ChndFWKuLvfzIgT" False) ((((C1 (MetaCons "ApnFatalErrorBadCollapseId" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorBadDeviceToken" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorBadExpirationDate" PrefixI False) (U1 :: Type -> Type))) :+: (C1 (MetaCons "ApnFatalErrorBadMessageId" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorBadPriority" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorBadTopic" PrefixI False) (U1 :: Type -> Type)))) :+: ((C1 (MetaCons "ApnFatalErrorDeviceTokenNotForTopic" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorDuplicateHeaders" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorIdleTimeout" PrefixI False) (U1 :: Type -> Type))) :+: (C1 (MetaCons "ApnFatalErrorMissingDeviceToken" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorMissingTopic" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorPayloadEmpty" PrefixI False) (U1 :: Type -> Type))))) :+: (((C1 (MetaCons "ApnFatalErrorTopicDisallowed" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorBadCertificate" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorBadCertificateEnvironment" PrefixI False) (U1 :: Type -> Type))) :+: (C1 (MetaCons "ApnFatalErrorExpiredProviderToken" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorForbidden" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorInvalidProviderToken" PrefixI False) (U1 :: Type -> Type)))) :+: ((C1 (MetaCons "ApnFatalErrorMissingProviderToken" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorBadPath" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorMethodNotAllowed" PrefixI False) (U1 :: Type -> Type))) :+: (C1 (MetaCons "ApnFatalErrorUnregistered" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnFatalErrorPayloadTooLarge" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnFatalErrorOther" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text)))))))

data ApnTemporaryError Source #

Instances
Enum ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

Eq ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

Show ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

Generic ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

Associated Types

type Rep ApnTemporaryError :: Type -> Type #

FromJSON ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep ApnTemporaryError Source # 
Instance details

Defined in Network.PushNotify.APN

type Rep ApnTemporaryError = D1 (MetaData "ApnTemporaryError" "Network.PushNotify.APN" "push-notify-apn-0.2.0.1-5OS6kJ5ChndFWKuLvfzIgT" False) ((C1 (MetaCons "ApnTemporaryErrorTooManyProviderTokenUpdates" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnTemporaryErrorTooManyRequests" PrefixI False) (U1 :: Type -> Type)) :+: (C1 (MetaCons "ApnTemporaryErrorInternalServerError" PrefixI False) (U1 :: Type -> Type) :+: (C1 (MetaCons "ApnTemporaryErrorServiceUnavailable" PrefixI False) (U1 :: Type -> Type) :+: C1 (MetaCons "ApnTemporaryErrorShutdown" PrefixI False) (U1 :: Type -> Type))))

data ApnToken Source #

An APN token used to uniquely identify a device