0

Wie der Titel andeutet, muss ich eine VON eine UWP-App (geschrieben in C#) an meinen Azure-Hub senden (und von dort wird es an gesendet eine Android-App, die ich bereits erstellt habe). Ich verwende offensichtlich GCM, um Push-Benachrichtigungen an meine Android-App zu senden.Senden der Benachrichtigung an den Azure Notification Hub von der Universal Windows Platform (UWP) App

Nach unzähligen Stunden der Suche habe ich noch ein einziges Tutorial zu finden, das irgendwie von Nutzen wäre, da die meisten von ihnen eine Konsolenanwendung verwenden, um die Benachrichtigung zu senden, keine Universal Windows Platform App.

Wenn mir jemand helfen könnte, wäre ich wirklich dankbar.

+0

Könnten Sie zeigen den Code, den Sie verwenden? Das Senden einer Push-Benachrichtigung über C# ist immer gleich ... unabhängig davon, ob Sie UWP, WPF, Forms oder eine Konsolen-App verwenden. –

+0

@HeribertScharnagl Gerne. Hier ist der Link: https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-windows-store-dotnet-get-started/ ... Und für meine Android-App habe ich diese verwendet : https://azure.microsoft.com/en-us/documentation/articles/notification-hubs-android-get-started/ ... Alles, was ich tun muss, ist im Grunde die Funktionen zu übersetzen, die unter "(Optional) Send" stehen Push-Benachrichtigungen direkt von der App "in diesem Link zu C#. Aber das Problem ist, dass ich noch nie einen Code in C# geschrieben habe. – Kyle

Antwort

1

Ich werde meine eigene Frage hier beantworten, da viele Menschen mit diesem zu kämpfen wie ich. Hier ist ein Code, der eine Benachrichtigung von einer Universal Windows Platform (UWP) über einen Azure Notification Hub an eine Android App (mit GCM) sendet.

Bitte beachten Sie, dass leicht den Code ändern muss für sie auf Ihre eigene Benachrichtigung Nabe (weitere Einzelheiten finden Sie in den Kommentaren im Code) zu arbeiten

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(); 
      } 
     } 
    } 
}