2016-05-20 55 views
4

这是适用于Windows 10 应用我跟着这个教程: https://msdn.microsoft.com/windows/uwp/controls-and-patterns/tiles-and-notifications-windows-push-notification-services--wns--overviewUWP推送通知

在这一点上我得到了右侧的下一个值:

SID

秘密

URI(我得到这个在我的应用程序)

的URI我是用这个简单的代码:

channel=await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

随着线以上我有一个URL,它是将在大约一个月内有用。

现在不适合我做的部分是将推送通知发送到应用程序。

关于如何使用Uri以及如何将信息发送给它的任何提示我会很高兴,因为我的400错误,这是关于我的帖子信息有问题。

此链接显示如何发送信息,但我没有得到任何有用的代码。 https://msdn.microsoft.com/library/windows/apps/hh465435

我不拥有或使用任何基于云的Web服务。

我可以在发布或调试模式下获得推送通知吗?

用正确的Uri推送通知可以用PHP完成吗?

+0

这个问题真的很有帮助http://stackoverflow.com/questions/36601278/notificationhub-send-notification-in-registered-tag-uwp – GeralexGR

+1

这个问题实际上帮助了我。这[link](https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-started-wns-push-notification/)特别有用,但它文档上有一些错误。 – miphos

回答

-1

就完成了从Jerrak0s

的解决方案考虑您的Azure的通知中心: enter image description here

使用REST来发送推送通知的代码:

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令牌来自:

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; 
    } 
} 
+0

我要试试这个,看起来很有用。 – miphos