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有關,你可能更喜歡用戶名作爲唯一標籤。我認爲,這更適用於應用場景。通過這種方式,您可以將唯一設備的通知發送給唯一用戶;)

就是這樣。