这适用于
Windows 10的应用程序.
我按照本教程:
https://msdn.microsoft.com/windows/uwp/controls-and-patterns/tiles-and-notifications-windows-push-notification-services–wns–overview
我按照本教程:
https://msdn.microsoft.com/windows/uwp/controls-and-patterns/tiles-and-notifications-windows-push-notification-services–wns–overview
SID
Secret
Uri(I got this on my application)
我得到的Uri是这个简单的代码:
channel=await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
我现在无法做的部分是将推送通知发送到应用程序.
关于如何使用Uri以及如何将信息发送给它的任何指示我都会很高兴,因为我有400错误,这与我的帖子消息有关.
此链接显示如何发送信息,但我没有得到任何有用的代码.
https://msdn.microsoft.com/library/windows/apps/hh465435
也:
我不拥有或使用任何基于云的Web服务.
我可以在发布或调试模式下获得推送通知吗?
解决方法
刚刚完成Jerrak0s的解决方案
鉴于您的Azure通知中心:
private static async void SendNotificationAsync() { //Setting\Access policies\DefaultFullSharedAccessSignature policy string connStr = "Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=xyz"; var util = new ConnectionStringUtility(connStr); //toast in XML var toast = "<toast> <visual> <binding template="ToastText01"> < text id = "1" > Test message </ text > </ binding > </ visual > </ toast >"; //call WNS var uri = "https://[namespace].servicebus.windows.net/[hub name]/messages/?api-version=2015-04"; using (var httpClient = new HttpClient()) { var request = new HttpRequestMessage(HttpMethod.Post,uri); request.Content = new StringContent(toast); request.Headers.Add("Authorization",util.getSaSToken(uri,1000)); //request.Headers.Add("ServiceBusNotification-Tags","TAG"); request.Headers.Add("ServiceBusNotification-Format","windows"); request.Headers.Add("X-WNS-Type","wns/toast"); var response = await httpClient.SendAsync(request); await response.Content.ReadAsstringAsync(); } }
用于解析端点和SAS令牌的Utility类:
public class ConnectionStringUtility { public string Endpoint { get; private set; } public string SasKeyName { get; private set; } public string Saskeyvalue { get; private set; } public ConnectionStringUtility(string connectionString) { //Parse Connectionstring char[] separator = { ';' }; string[] parts = connectionString.Split(separator); for (int i = 0; i < parts.Length; i++) { if (parts[i].StartsWith("Endpoint")) Endpoint = "https" + parts[i].Substring(11); if (parts[i].StartsWith("SharedAccessKeyName")) SasKeyName = parts[i].Substring(20); if (parts[i].StartsWith("SharedAccessKey")) Saskeyvalue = parts[i].Substring(16); } } public string getSaSToken(string uri,int minUntilExpire) { string targetUri = Uri.EscapeDataString(uri.ToLower()).ToLower(); // Add an expiration in seconds to it. long expiresOnDate = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; expiresOnDate += minUntilExpire * 60 * 1000; long expires_seconds = expiresOnDate / 1000; String toSign = targetUri + "\n" + expires_seconds; // Generate a HMAC-SHA256 hash or the uri and expiration using your secret key. MacAlgorithmProvider macAlgorithmProvider = MacAlgorithmProvider.OpenAlgorithm(MacAlgorithmNames.HmacSha256); BinaryStringEncoding encoding = BinaryStringEncoding.Utf8; var messageBuffer = CryptographicBuffer.ConvertStringToBinary(toSign,encoding); IBuffer keyBuffer = CryptographicBuffer.ConvertStringToBinary(Saskeyvalue,encoding); CryptographicKey hmacKey = macAlgorithmProvider.CreateKey(keyBuffer); IBuffer signedMessage = CryptographicEngine.Sign(hmacKey,messageBuffer); string signature = Uri.EscapeDataString(CryptographicBuffer.EncodetoBase64String(signedMessage)); return "SharedAccessSignature sr=" + targetUri + "&sig=" + signature + "&se=" + expires_seconds + "&skn=" + SasKeyName; } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。