如何通过Web App向Azure Notification Hub注册远程设备

时间:2018-01-30 21:37:55

标签: c# asp.net-mvc azure push-notification xamarin.forms

一些背景......我正在构建一个Xamarin.Forms移动应用程序,以允许监视来自位于用户家中的设备的能量数据(被推送到后端并每分钟存储一次)。从我的(Azure Worker Role)后端,我希望能够通过Azure Notification Hub发送推送通知。有时我会想要推送到所有设备,有时候,推送到群组,有时推送到单个设备(我相信'标签'是这样做的方式)。我目前已配置Azure通知中心,我可以将测试消息(从Azure门户)发送到我用于测试的所有iOS设备。

我正在做的事情是弄清楚如何使用通知中心注册每个设备。我想要发生的是,当用户登录移动应用程序时,设备“句柄”(或设备令牌)将传递回服务器。然后可以将其保存在后端,并使用基于https://msdn.microsoft.com/en-us/library/azure/dn743807.aspxRegistering device on Azure Notification Hub from ASP.NET提供的示例的代码注册设备,以及更改后端上的关联“标记”。然后,如果我需要向单个设备或一组设备发送通知,我可以从工作者角色中获取设备句柄。

我找到了许多例子,似乎都缺少了让我能够正常工作的重要信息。我发现的大多数示例似乎都依赖于使用Azure移动应用程序(以及MobileServiceClient类),但我使用的是“常规”MVC5 ASP.NET Web应用程序。我已经注意到移动应用程序和Web应用程序Azure门户允许我配置“推送”,所以我可以支持从两者推送。我尝试将RegisterController添加到我的Web App中,但这在调用时似乎没有帮助:

var push = PushNotificationsManager.DefaultManager.CurrentClient.GetPush();
push.RegisterAsync(deviceToken, templates); 

基于代码示例提供:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started-push#create-hub。推客户端在哪里:

client = new MobileServiceClient("http://mywebapp.azurewebsites.net");

RegisterAsync尝试呼叫的端点是什么?我没有错。

Registering device on Azure Notification Hub from ASP.NET似乎建议我需要在我的Web App中添加RegisterController,但是它没有显示Xamarin.Forms代码来调用它。

那么,如何通过MVC5 Web应用程序从带有Azure通知中心的Xamarin.Forms应用程序注册移动设备?

2 个答案:

答案 0 :(得分:1)

根据您的描述,我假设您使用的是App Service Push配置,这是Azure Portal提供的功能。您只需登录Azure门户,选择您的App Service,然后单击“设置>推送”以配置您的通知中心。

对于您的Xamarin.Form客户端,您需要安装包Microsoft.Azure.Mobile.Client,然后在MobileServiceClientExtensions.cs下使用GetPush的扩展方法IMobileServiceClient注意< / strong>:这适用于UWP)和PushHttpClient.cs针对App Service Push提供的内置端点push/installations发送注册请求。

根据您的代码,您是以正确的方式完成的。我建议您在注册设备时利用fiddler捕获网络跟踪。此外,您可以利用VS下的服务器资源管理器来检查您现有的注册,您可以关注的详细信息here

此外,您还可以创建自定义Web API端点以注册通知。有关更多详细信息,您可以按Azure Notification Hubs Notify Users with .NET backend创建后端以及客户端项目的相关代码。此外,我建议您按照Registration management更好地了解注册和安装模型,以实现您的目的。

答案 1 :(得分:1)

你要找的是这样的。

在您的网络API中获取用户Ios设备的令牌。

   var _hubClient=NotificationHubClient.CreateClientFromConnectionString(YourConnectionstring here)
   //this is notification hub client  
   var registrationId= await _hubClient.CreateRegistrationIdAsync();

上面的代码会为你创建一个registrationId。之后

   var registration = new GcmRegistrationDescription(devicetoken)
        {
            RegistrationId = RegistrationId ,  //one we got in previous 
                                                call.
            Tags = new HashSet<string>
            {
                "YourDesiredTag"
            }
        };

     //this completes registration of your device with desired tags.   
    _hubClient.CreateOrUpdateRegistrationAsync(registration);

现在您的注册已完成。您只需发送来自您的工作人员角色的通知即可定位标记,并且通知应该会到达所需的设备。

 _hubClient.SendGcmNativeNotificationAsync(notifPayload, tags)

您应该在https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-registration-management

获取更多信息

上面的代码可能对gcm / android有效,但是可以遵循的标准。