In my last post, I talked about creating a CookieProvider for handling OAuth Bearer Tokens from an HTTP Cookie. Now that we have this capability, we can make a secure connection to SignalR using a Cookie store rather than adding our tokens to the Authorization HTTP Header.
By using cookies instead of the HTTP Header, we can now use a full Websocket connection rather than being forced into long polling. Using websockets increases speed of messages received and messages sent.
So here’s the quick bit of code for making a secure SignalR Websocket connection:
SignalRConnectionService.cs
public class SignalRConnectionService
{
private HubConnection _connection;
public IHubProxy AppHubProxy { get; set; }
public SignalRConnectionService()
{
_connection = new HubConnection(YOUR_SIGNALR_URL);
AppHubProxy = _connection.CreateHubProxy("AppHub");
}
public async Task StartAsync()
{
try
{
if(_connection.State != ConnectionState.Disconnected)
{
_connection.Stop();
}
_connection.CookieContainer = new CookieContainer();
_connection.CookieContainer.Add(new Uri(THE_BASE_URL_OF_YOUR_SERVER), new Cookie("BearerToken", YOUR_ACCESS_TOKEN));
await _connection.Start();
}
public void Stop()
{
_connection.Stop();
}
}
Now we have the full speed of websockets enabled in our Xamarin, Mac, and Windows applications!
If you like what you see, don’t forget to follow me on twitter @Suave_Pirate, check out my GitHub, and subscribe to my blog to learn more mobile developer tips and tricks!
One thought on “Xamarin.Tips – Sending Authorized SignalR Requests”