Komunikacja w czasie rzeczywistym w Xamarin

Komunikacja w czasie rzeczywistym w Xamarin

W dzisiejszym wpisie chciałbym zaprezentować jak wysyłać powiadomienia push przy użyciu biblioteki ASP.NET SignalR.

Komunikacja w czasie rzeczywistym – Czym jest SignalR

ASP.NET SignalR is a new library for ASP.NET developers that makes developing real-time web functionality easy. SignalR allows bi-directional communication between server and client. Servers can now push content to connected clients instantly as it becomes available. SignalR supports Web Sockets, and falls back to other compatible techniques for older browsers. SignalR includes APIs for connection management (for instance, connect and disconnect events), grouping connections, and authorization

Według definicji ze strony www.asp.net/signalr jest to biblioteka umożliwiająca komunikację w czasie rzeczywistym, wykorzystująca Websockets lub Ajax long polling do swojego działania.

A teraz mięso

W tym demo użyjemy SignalR hostowanego w aplikacji konsolowej. W tym celu należy zainstalować dwa pakiety NuGet

Install-Package Microsoft.AspNet.SignalR.SelfHost
Install-Package Microsoft.Owin.Cors

Następnie tworzymy Hub mający na celu przekazywanie wiadomości pomiędzy podłączonymi klientami

    public class NotificationHub : Hub
    {
        public void SendNotification(Notification notification)
        {
            Clients.All.sendNotification(notification);
        }

        public override Task OnConnected()
        {
            Console.WriteLine($"Connection with ID {Context.ConnectionId} connected");
            return base.OnConnected();
        }

        public override Task OnDisconnected(bool stopCalled)
        {
            Console.WriteLine($"Connection with ID {Context.ConnectionId} disconnected");
            return base.OnDisconnected(stopCalled);
        }

        public override Task OnReconnected()
        {
            Console.WriteLine($"Connection with ID {Context.ConnectionId} reconnected");
            return base.OnReconnected();
        }
    }

Back office i Frontend

Naszym klientem symulującym działanie back office jest aplikacja konsolowa wysyłająca mock powiadomień dla klienta. Klient mobilny został zrealizowany za pomocą Xamarin Forms.

W naszych klientach instalujemy pakiet NuGet

Install-Package Microsoft.AspNet.SignalR.Client

Żeby klient mógł użyć serwera SignalR należy napisać mały kawałek kodu

var hubConnection = new HubConnection($"{Servers.NotificationHubServer}/signalr");
var hubProxy = hubConnection.CreateHubProxy(Hubs.NotificationHubName);

hubConnection.Start().Wait();

hubProxy.Invoke<Notification>(Actions.SendNotification, notification);

Cały kod źródłowy demo jest dostępny na GitHub.

Zapraszam do komentowania. Jakie macie doświadczenia z użycia SignalR w aplikacjach mobilnych jakieś alternatywy?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *