Registering device on Azure Notification Hub from ASP.NET

瘦欲@ 提交于 2019-12-11 12:51:14

问题


I want to make use of Azure notification hub service. In all their examples. The clients directly register with azure to give the service their device token.

I want to change this model slightly in order to gain central control and also due to compatibility with existing clients.

I want all my clients to register with GCM or APNS and obtain their Token. I then want to send that token off to my own api. ASP.NET Web API. The api will then fire off a request to the Azure notification service and register on behalf of the device.

Can I achieve this? and how would I go about registering a device from the asp.net api.

In their Documentation examples it contains code to send the actual push notifications from an asp.net app. But not how to register a device (being of any type) from asp.net

Unless im being daft and missing something...


回答1:


You can find this in the official documentation: Registering from your App Backend.

public class RegisterController : ApiController
{

    private NotificationHubClient hub;

    public RegisterController()
    {
        hub = NotificationHubClient.CreateClientFromConnectionString("Endpoint=sb://buildhub-ns.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=DuWV4SQ08poV6HZly8O/KQNWv3YRTZlExJxu3pNCjGU=", "build2014_2");
    }

    public class DeviceRegistration
    {
        public string Platform { get; set; }
        public string Handle { get; set; }
        public string[] Tags { get; set; }
    }

    // POST api/register
    // This creates a registration id
    public async Task<string> Post()
    {
        return await hub.CreateRegistrationIdAsync();
    }

    // PUT api/register/5
    // This creates or updates a registration (with provided PNS handle) at the specified id
    public async void Put(string id, DeviceRegistration deviceUpdate)
    {
        // IMPORTANT: add logic to make sure that caller is allowed to register for the provided tags

        RegistrationDescription registration = null;
        switch (deviceUpdate.Platform)
        {
            case "mpns":
                registration = new MpnsRegistrationDescription(deviceUpdate.Handle);
                break;
            case "wns":
                registration = new WindowsRegistrationDescription(deviceUpdate.Handle);
                break;
            case "apns":
                registration = new AppleRegistrationDescription(deviceUpdate.Handle);
                break;
            case "gcm":
                registration = new GcmRegistrationDescription(deviceUpdate.Handle);
                break;
            default:
                throw new HttpResponseException(HttpStatusCode.BadRequest);
        }

        registration.RegistrationId = id;
        registration.Tags = new HashSet<string>(deviceUpdate.Tags);

        try
        {
            await hub.CreateOrUpdateRegistrationAsync(registration);
        } catch (MessagingException e) {
            ReturnGoneIfHubResponseIsGone(e);
        }
    }

    // DELETE api/register/5
    public async void Delete(string id)
    {
        await hub.DeleteRegistrationAsync(id);
    }


    private static void ReturnGoneIfHubResponseIsGone(MessagingException e)
    {
        var webex = e.InnerException as WebException;
        if (webex.Status == WebExceptionStatus.ProtocolError)
        {
            var response = (HttpWebResponse)webex.Response;
            if (response.StatusCode == HttpStatusCode.Gone)
                throw new HttpRequestException(HttpStatusCode.Gone.ToString());
        }
    }
}


来源:https://stackoverflow.com/questions/32219530/registering-device-on-azure-notification-hub-from-asp-net

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!