2

我正尝试使用Azure通知集线器向客户端发送推送通知。我读过这篇文章,它使用标签来识别每个用户。通过Azure通知集线器使用注册ID发送推送通知

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

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

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

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

回答

2

其实NH只限制标签数量每个注册但每个集线器您可以根据需要拥有尽可能多的注册,每个注册可能都有唯一的标签,您可以使用它来路由通知。

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

+0

如果您查看层表(https://azure.microsoft.com/en-us/pricing/details/notification-hubs/),则将#个标记(广播组)限制为3 K.如果我的答案的第一部分是正确的,那么你说的这个限制是每个用户?如果是的话,这对我来说是惊人的高。 我在这里要做的是发送推送通知,而不使用标签,而是发送注册ID。那可能吗? –

+0

PS。也许这对我来说还不够清楚。标签是每个平台的NH或PN服务的一部分? –

+0

没关系,我在你的答案中找到了我的解答 http://stackoverflow.com/questions/27098667/azure-notification-hub-tag-limits –

1

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

要做到这些,你应该按照下面的步骤逐一;

  • 作为客户端,使用spesific标签来选择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.HubListenConnectionString, 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服务方法(邮差,提琴手或其他人)。

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

就是这样。