首页 > 解决方案 > 尝试使用特定设备标签通过 Rest API 向 Azure Notification Hub 发送推送通知

问题描述

基本上,我希望能够将特定注册设备(使用标签)的推送通知发送到 Azure 通知中心,然后将通知发送到设备。我确实有一些 c# 代码可以做到这一点,但如果可能的话,我想使用 API。

我发现一篇文章(计算机重新启动,所以我没有链接)解释了如何使用 API 发送通知,但看起来它会将通知发送到每个在集线器注册的设备,所以我想看看它是否会易于修改正文甚至预请求脚本以包含特定的设备标签。

或者,如果你们中的任何一个聪明人知道通过 API 更简单的方法来做到这一点,那么我会全神贯注。

这是我目前拥有的代码(取自 Postman),用于向所有集线器设备发送通知。

POST 端点:https://{namespace_name}.servicebus.windows.net/{hub_name}/messages/?api-version=2015-01

标题

请求正文

{"data":
    {
        "gcm.notification.body":"Hi", 
        "gcm.notification.title":"Hi",
    }
}

预请求脚本

function getAuthHeader(resourceUri, keyName, key) {

    var d = new Date();
    var sinceEpoch = Math.round(d.getTime() / 1000);
    var expiry = (sinceEpoch + 3600);
    var stringToSign = encodeURIComponent(resourceUri) + '\n' + expiry;
    var hash = CryptoJS.HmacSHA256(stringToSign, key);
    var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
    var sasToken = 'SharedAccessSignature sr=' + encodeURIComponent(resourceUri) + '&sig=' + encodeURIComponent(hashInBase64) + '&se=' + expiry + '&skn=' + keyName;
    console.log(sasToken);

    return sasToken;
}
postman.setEnvironmentVariable('azure-authorization', getAuthHeader(request.url,"DefaultFullSharedAccessSignature", "<full_shared_access_signature>"));
postman.setEnvironmentVariable('current-date',new Date().toUTCString());

标签: azurerestapixamarin.formspush-notification

解决方案


用于发送通知的 REST API 是 /yourHub/messages 上的简单 POST,带有特殊的标头。当以平台原生格式发送通知时,正文是要发送的特定于平台的正文。额外的标题是:

  • ServiceBusNotification-Format:指定平台(如果发送本机通知)或“模板”要发送模板通知。
  • ServiceBusNotification-Tags(可选):指定定义目标注册集的标签(或标签表达式)。如果此标头不存在,则通知中心向所有注册广播。

特定于平台的功能支持其他标头,如通知中心 REST API文档中所述。

参考:从后端使用 REST API


推荐阅读