0

正如標題所示,我需要發送通知 UWP應用程序(用C#編寫)到我的Azure集線器(並從那裏發送到我已經創建了一個Android應用程序)。我明顯使用GCM來發送推送通知給我的Android應用程序。從通用Windows平臺(UWP)應用程序發送通知到Azure通知集線器

搜索我還沒有找到一個單一的教程,會在一定程度是有用的,因爲他們大多數用在爲了一個控制檯應用程序發送通知,而不是一個通用的Windows平臺的應用程序的無數個小時後。

如果任何人都可以請幫我,我會真的感謝。

+0

你能告訴你使用的代碼工作?無論您使用UWP,WPF,Forms還是控制檯應用程序,通過c#發送推送通知都是一樣的。 –

+0

@HeribertScharnagl很高興。這裏的鏈接:https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-started/ ...和我的Android應用程序,我用這個:https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-android-get-started/ ...我需要做的只是基本翻譯下面的功能「(可選)發送直接從應用程序推送通知「的鏈接到C#。但問題是我從來沒有用C#寫過代碼。 – Kyle

回答

1

我會在這裏回答我的問題,因爲很多人有這種奮鬥像我這樣的。因此,這是一個通過Azure通知中心將通知從通用Windows平臺(UWP)發送到Android應用程序(使用GCM)的代碼。

請注意,必須稍微改變代碼爲它在自己通知中心(參見代碼中的註釋瞭解詳細信息)

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Net.Http; 
using System.Runtime.InteropServices.WindowsRuntime; 
using System.Text; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.Security.Cryptography; 
using Windows.Security.Cryptography.Core; 
using Windows.Storage.Streams; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 


namespace SendNotification 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainPage() 
     { 
      this.InitializeComponent(); 
      this.sendNotification(); 
     } 

     string Endpoint = ""; 
     string SasKeyName = ""; 
     string SasKeyValue = ""; 

     public void 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; 
     } 


     public async void sendNotification() 
     { 
      //insert your HubFullAccess here (a string that can be copied from the Azure Portal by clicking Access Policies on the Settings blade for your notification hub) 
      ConnectionStringUtility("YOURHubFullAccess"); 

      //replace YOURHUBNAME with whatever you named your notification hub in azure 
      var uri = Endpoint + "YOURHUBNAME" + "/messages/?api-version=2015-01"; 
      string json = "{\"data\":{\"message\":\"" + "Hello World!" + "\"}}"; 


      //send an HTTP POST request 
      using (var httpClient = new HttpClient()) 
      { 
       var request = new HttpRequestMessage(HttpMethod.Post, uri); 
       request.Content = new StringContent(json); 

       request.Headers.Add("Authorization", getSaSToken(uri, 1000)); 
       request.Headers.Add("ServiceBusNotification-Format", "gcm"); 
       var response = await httpClient.SendAsync(request); 
       await response.Content.ReadAsStringAsync(); 
      } 
     } 
    } 
} 
相關問題