[aerogear-dev] Internal 'API' change for the different Senders?

Karel Piwko kpiwko at redhat.com
Tue May 27 08:28:25 EDT 2014


+1

On Fri, 23 May 2014 11:24:03 +0200
Matthias Wessendorf <matzew at apache.org> wrote:

> Hello,
> 
> looking at the Senders, I'd like to re-introduce an interface which they
> all extend:
> 
> /**
>  * Each implementation deals with the specific of the underlying push
> network, including transforming the content of the
>  * {@link UnifiedPushMessage} to the proper message format of the
> actual push network and maintaining the connection to it.
>  */
> public interface PushNotificationSender {
> 
>     /**
>      * Sends the {@link UnifiedPushMessage} to the given clients,
> identified by a collection of tokens, the underlying push network.
>      *
>      * @param variant contains details for the underlying push
> network, e.g. API Keys/Ids
>      * @param clientIdentifiers platform specific collection of client
> identifiers
>      * @param pushMessage payload to be send to the given clients
>      * @param senderCallback invoked after submitting the request to
> the underlying push network to indicate the status
>      *                       of the request (<code>success</code> or
> <code>error</code>
>      */
>     void sendPushMessage(Variant variant, Collection<String>
> clientIdentifiers, UnifiedPushMessage pushMessage,
> NotificationSenderCallback senderCallback);
> }
> 
> What's really new here is passing in a 'callback'
> (NotificationSenderCallback) that gives the caller of an
> PushNotificationSender implementation a hint if we could submit the
> messages to the push network, or not:
> 
> /**
>  * A simple Callback interface used when sending {@link
> org.jboss.aerogear.unifiedpush.message.UnifiedPushMessage} to
>  * an actual push network.
>  */
> public interface NotificationSenderCallback {
> 
>     /**
>      * Simple indicator which will be called on a successful to
> deliver to the push network. However, the invocation of
>      * this callback does <b>NOT</b> mean the messages have been sent
> out to the mobile devices. The invocation simply means
>      * the {@link
> org.jboss.aerogear.unifiedpush.message.sender.PushNotificationSender}
> was able to send the messages to
>      * the push network for its further processing
>      */
>     void onSuccess();
> 
>     /**
>      * Simple indicator which will be called on any type of error that
> occurred while sending the payload to the
>      * underlying push network.
>      */
>     void onError();
> }
> 
> The reason why I'd like to do that is this give me better access to the
> state of the request (for submitting messages). That is generally a nice
> thing to be aware of the request-state. For our new "push history" overview
> (see related threads), this comes handy, as I have all the needed
> information in a more centralized place, instead of injecting a 'Metrics'
> service into all the PushNotificationSender implementations:
> 
> ...
> // save APNs-delivery timestamp to metrics-database
> // save number of APNs tokens to metrics-database
> myAPNsSender.sendPushMessage(variant, collectionOfTokensForVariant,
> upsMessage, new NotificationSenderCallback() {
>     @Override
>     public void onSuccess() {
>         // save success status for the given variant to metrics-database
>     }
> 
>     @Override
>     public void onError() {
>         // save failure status for the given variant to metrics-database
>     }
> });
> 
> 



More information about the aerogear-dev mailing list