通过通知中心向所有用户发送推送通知

Posted

技术标签:

【中文标题】通过通知中心向所有用户发送推送通知【英文标题】:Send push notification via notification hub to all users 【发布时间】:2018-03-18 19:26:15 【问题描述】:

我一直试图弄清楚如何在我的 asp.net web api 中发送推送通知。我看到有多种方法可以通过设备本身和后端在集线器中注册设备。我想使用第一种方法,并找到了一些教程,但我不知道如何从后端发送请求。我尝试了以下代码,但它给了我 401 Unauthorized 错误:

[HttpGet]
    public async Task<HttpResponseMessage> NotTry()
    
        NotificationOutcome outcome;
        HttpStatusCode ret = HttpStatusCode.InternalServerError;
        string notif = " \"data\" : \"message\":\"hello\"";
        outcome = await Notifications.Instance.Hub.SendGcmNativeNotificationAsync(notif);
        if (outcome != null)
        
            if (!((outcome.State == NotificationOutcomeState.Abandoned) ||
                (outcome.State == NotificationOutcomeState.Unknown)))
            
                ret = HttpStatusCode.OK;
            
        

        return Request.CreateResponse(ret);
    

如果有人能给我一个方向,我将不胜感激。我正在失去理智寻找解决方案......

【问题讨论】:

【参考方案1】:

但我不知道如何从后端发送请求。我尝试了以下代码,但它给了我 401 Unauthorized 错误

根据您的描述,您正在使用 Microsoft.Azure.NotificationHubs 进行 Microsoft Azure 通知中心后端操作。

NotificationHubClient Hub = NotificationHubClient.CreateClientFromConnectionString("<your hub's DefaultFullSharedAccessSignature>","<hub name>"); 
await hub.SendGcmNativeNotificationAsync("payload");

我建议您在通过方法CreateClientFromConnectionString 构造NotificationHubClient 时检查通知集线器连接,并确保连接字符串具有正确的完全访问权限。您可以使用上面的 nuget 包创建一个控制台应用程序来发送通知,并使用 fiddler 来捕获详细的错误响应以缩小此问题的范围。此外,您可以关注Diagnose dropped notifications in Notification Hubs。

【讨论】:

我可以发誓我没有改变任何东西,我只是删除了连接字符串(我确信这是正确的)并重新输入它们,神奇地它起作用了。还是谢谢。 很高兴听到您解决了这个问题。对于401,表示你的凭证不正确,默认生成DefaultFullSharedAccessSignature策略。也许您之前的连接字符串有其他无效字符。

以上是关于通过通知中心向所有用户发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何从通知中心 Swift 中删除特定的推送通知

向所有用户发送推送通知

在 PHP 中向特定用户推送通知

如何在特定时间从 iOS 通知中心自动删除推送通知?

一次通话向所有订阅者发送网络推送通知

如何向 Azure 通知中心注册的每个设备发送不同的推送通知?