azure - 尝试使用特定设备标签通过 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
标题:
- 授权 - {{azure-authorization}}
- 内容类型 - 应用程序/json
- ServiceBusNotification 格式 - gcm
请求正文:
{"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());
解决方案
用于发送通知的 REST API 是 /yourHub/messages 上的简单 POST,带有特殊的标头。当以平台原生格式发送通知时,正文是要发送的特定于平台的正文。额外的标题是:
- ServiceBusNotification-Format:指定平台(如果发送本机通知)或“模板”要发送模板通知。
- ServiceBusNotification-Tags(可选):指定定义目标注册集的标签(或标签表达式)。如果此标头不存在,则通知中心向所有注册广播。
特定于平台的功能支持其他标头,如通知中心 REST API文档中所述。
推荐阅读
- regex - 正则表达式来计算和打印匹配的字符
- java - 如何在opencv中对齐文本并使其变为黑白?
- javascript - Express res.locals 和 pug 没有按预期工作
- python - 当列名是数字(不是字母)时,如何在 jupyter notebook 中导入列名?
- python - 查找与给定数字具有最接近值的行
- asp.net-core - 没有可用的架构 graphiql aspnet 核心
- node.js - 用户在节点 js 中提交后如何显示验证消息错误?
- shell - 匹配后删除字符串并排除空换行符
- docker-compose - 在 docker 中使用标签配置 traefik 不起作用?
- python - 我可以在不创建新列表的情况下缩短此冒泡排序吗?