通过Azure通知中心使用注册ID发送推送通知

我正尝试使用Azure通知中心向客户端发送推送通知。 我阅读这篇文章,使用标签来识别每个用户。

https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-aspnet-backend-windows-dotnet-notify-users/

它做的工作,但标签的数量是有限的。 我正在考虑存储和使用Hub返回的注册ID。

有没有办法使用这个ID发送通知?

另一种方法是使用由WNS返回的Channel.URI。 这可以以某种方式实施吗?

实际上,NH只限制每个注册的标签数量,但是每个中心可以根据您的需要注册尽可能多的注册,每个注册可能都有唯一的标签,您可以使用它来路由通知。

此外,还有新的适用于通知中心的安装API,我认为这对您更合适。 它还没有很好的记录,但做得好,可以随时使用。 在这里你可以找到如何使用该API的简短说明。 自述文件是关于Java的,但.NET SDK具有几乎相同的功能(最终都调用相同的REST API)。

关键字是TAG ! 如果您使用Android,IOS,Windows操作系统等注册设备的任何特定标签,您可以发送通知给任何特定的设备。

要做到这一点,你应该按照以下步骤逐一进行;

  • 作为客户端,使用特定标签向选定的Azure通知中心注册设备

Android的客户端示例:

`/*you don't have to use Firebase infrastructure. You may use other ways. It doesn't matter.*/` String FCM_token = FirebaseInstanceId.getInstance().getToken(); NotificationHub hub = new NotificationHub(NotificationSettings.HubName, NotificationSettings.HublistnConnectionString, context); String registrationID = hub.register(FCM_token, "UniqueTagForThisDevice").getRegistrationId(); 

就像您所看到的,我们已经为选定的Android设备使用了唯一的标签调用"UniqueTagForThisDevice"

  • 作为服务器端,您应该使用该TAG调用"UniqueTagForThisDevice"发送通知。

服务器使用Web API发送推送所选Android设备的示例:

  [HttpGet] [Route("api/sendnotification/{deviceTag}")] public async Task<IHttpActionResult> sendNotification(string deviceTag) { //deviceTag must be "UniqueTagForThisDevice" !!! NotificationHubClient Hub = NotificationHubClient.CreateClientFromConnectionString("<DefaultFullSharedAccessSignature>"); var notif = "{ \"data\" : {\"message\":\"Hello Push\"}}"; NotificationOutcome outcome = await Notifications.Instance.Hub.SendGcmNativeNotificationAsync(notif,deviceTag); if (outcome != null) { if (!((outcome.State == NotificationOutcomeState.Abandoned) || (outcome.State == NotificationOutcomeState.Unknown))) { return Ok("Push sent successfully."); } } //Push sending is failed. return InternalserverError(); } 
  • 最后,您应该使用来自任何助手平台(邮差,提琴手或其他)的"UniqueTagForThisDevice"标签,调用上面的Web API Service方法。

注意: TAG不一定是deviceToken或类似的东西。 它只需要每个设备spesific。 但是,我建议你,如果你使用WebAPI,它与Owin midlleware有关,你可能更喜欢用户名作为唯一的标签。 我认为,这更适用于应用场景。 通过这种方式,您可以将唯一设备的通知发送给唯一的用户;)

就这样。