Une présentation de Pushover a été faite dans un précèdent article : Ici
Un projet de test en .Net est disponible sur Github
Client Pushover
La classe PushoverClient permet de se connecter à l’API Pushover, et permet entre autres d’envoyer des notifications.
public class PushoverClient
{
public PushoverResponse SendNotification(string message)
public PushoverResponse SendNotification(PushoverRequest pushoverRequest)
public PushoverEmergencyResponse GetEmergencyStatus(string receiptId)
public PushoverCancelEmergencyResponse CancelEmergency(string receiptId)
}
Méthode du client Pushover
– SendNotification qui permet d’envoyer une notification sur un ou plusieurs devices.
– GetEmergencyStatus qui permet de récupérer le statut d’une notification de type Ermergency.
– CancelEmergency qui permet d’annuler une notification de type Emergency
Tokens
Il faut renseigner le Token de votre application et le Token de votre user pour pouvoir utiliser l’API (vous les trouverez sur votre compte Pushover)
Si vous utilisez le projet de test fourni, vous devez juste mettre vos Tokens dans le fichier de configuration, à la place du userKey et de la value du token.
<SoftFluent.Presence.Pushover.Configuration.PushoverConfigurationHandler url="https://api.pushover.net/1/{0}.json" userkey="ugpLUPszMqSYTyn62ME..." />
<SoftFluent.Presence.Pushover.Configuration.PushoverTokenConfigurationHandler>
<token name="presence" value="ac2SzxJVQKqtrnTXgU..." />
</SoftFluent.Presence.Pushover.Configuration.PushoverTokenConfigurationHandler>
Il est possible de définir plusieurs applications dans votre fichier de configuration. Pour cela, il vous faudra modifier le code de l’application.
Format de réponse
Il est possible de spécifier le format des réponses JSON ou XML. Il vous suffit seulement de mettre à la fin de l’URL de l’api Pushover ‘.json’ ou ‘.xml’.
Priorité des messages
Il existe 5 priorités pour l’envoi de message :
public enum PushoverPriorityNotificationType
{
LowestPriority = -2,
LowPriority = -1,
NormalPriority = 0,
HighPriority = 1,
EmergencyPriority = 2
}
– La priorité ‘LowestPriority’ ne génère aucune alerte sur le device, on peut voir le message dans la file des messages.
– La priorité ‘LowPriority’ envoie un message de priorité faible (pas de son, pas de vibration, seule une notification est affichée sur le device)
– La priorité ‘NormalPriority’ envoie un message avec du son, vibration et notification.
– La priorité ‘HighPriority’ envoie un message qui outrepasse la plage horaire renseignée par l’utilisateur.
– La priorité ‘EmergencyPriority’ envoie un message qui attend une confirmation de l’utilisateur.
Envoi d’une notification
Le code ci-dessous permet d’envoyer le message “first message” sur tous les devices en priorité normale avec comme titre le nom de l’application “Presence” qui a été définie lorsque vous avez déclaré l’application :
PushoverClient client = new PushoverClient();
client.SendNotification("first message");
Request Pushover
La classe PushoverRequest permet de définir un message dans lequel on pourra définir le titre, la priorité, le(s) device(s) de destination, une URL, un son spécifique et les propriétés ‘retry’ et ‘expire’ pour les messages de type ‘Emergency’.
public class PushoverRequest
{
public static PushoverRequest CreateRequest(string message, string title = null, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, PushoverPriorityNotificationType priority, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, PushoverPriorityNotificationType priority, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, int retry, int expire, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, int retry, int expire, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, PushoverPriorityNotificationType priority, PushoverSoundType? sound, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, PushoverPriorityNotificationType priority, PushoverSoundType? sound, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, int retry, int expire, PushoverSoundType? sound, params string[] devices)
public static PushoverRequest CreateRequest(string message, string title, string url, string urlTitle, int? retry, int? expire, PushoverPriorityNotificationType? priority, PushoverSoundType? sound, params string[] devices)
}
Le code ci-dessous permet d’envoyer le message “second message” seulement sur le device “Tel_Softfluent” avec une priorité faible, le titre du message sera SoftFluent.
PushoverClient client = new PushoverClient();
PushoverRequest request = PushoverRequest.CreateRequest("second message", "SoftFluent", PushoverPriorityNotificationType.LowPriority, "Tel_Softfluent");
client.SendNotification(request);
Emergency
Il est possible d’envoyer une notification de type Emergency. Cette notification va alerter l’utilisateur toutes les X secondes pendant Y secondes jusqu’à ce qu’il valide explicitement la notification en appuyant sur le bouton “validé” de la notification reçue sur un device.
On peut suivre l’état d’une notification Emergency, cela permet de savoir si elle a été validée ou non.
Callback
La classe “PushoverCallbackService” permet d’avoir un squelette pour utiliser cette fonctionnalité.
Test de la callback
Code C# permettant de démarrer le service de callback :
ServiceHost host = new ServiceHost(typeof(PushoverCallbackService));
host.Open();
La configuration à mettre dans le fichier de configuration :
<configuration>
...
<system.serviceModel>
<services>
<service name="SoftFluent.Presence.Pushover.PushoverCallbackService">
<endpoint address="http://localhost:8092/PresenceService" behaviorConfiguration="web" binding="webHttpBinding"
contract="SoftFluent.Presence.Pushover.IPushoverCallbackService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
...
</configuration>
Pour tester que le service est correctement configuré et démarré, on peut utiliser l’extension chrome Sense.
Cela permettra aussi de tester que le service est accessible depuis l’extérieur.
Voilà, vous savez tout pour envoyer des notifications sur des devices qui ne nécessitera aucun développement sur les devices cibles.