Komunikacja w czasie rzeczywistym w Xamarin

Posted by Maciej Gos on Tuesday, December 20, 2016

TOC

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

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

[code lang=”csharp”]
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();
}
}
[/code]

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

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

[code lang=”csharp”]
var hubConnection = new HubConnection($"{Servers.NotificationHubServer}/signalr");
var hubProxy = hubConnection.CreateHubProxy(Hubs.NotificationHubName);

hubConnection.Start().Wait();

hubProxy.Invoke(Actions.SendNotification, notification);
[/code]

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?

Maciej Gos

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus