2016-06-02 11 views
1

Ich muss eine GCM-Benachrichtigung auf eine Schaltfläche klicken Sie in der Android-Anwendung durch Xamarin.So senden Sie eine Remote-Benachrichtigung auf einer Schaltfläche Klicken Sie auf? Xamarin.Android C#

Ich habe dieses Tutorial gefolgt https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/android/remote_notifications_in_android/

Button btnCLick = Findviewbyid<button>(resource.id.btnclikc); 
btnCLick.Click += btnCLick_CLICK; 
void btnCLick_Click (object sender, System.EventArgs e) 
{ 
// Here i need to send my notification. I am not able to get it. 
} 

Ich benutze eine MessageSender.exe meine Benachrichtigung zu senden, aber ich kann es nicht in meine Anwendung machen.

using System; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Text; 
using System.Threading.Tasks; 
using Newtonsoft.Json.Linq; 

namespace MessageSender 

{ 
class Program 
{ 
    public const string API_KEY = "API_KEY"; 
    public const string MESSAGE = "MESSAGE"; 

    static void Main(string[] args) 
    { 
     var jGcmData = new JObject(); 
     var jData = new JObject(); 

     jData.Add("message", MESSAGE); 
     jGcmData.Add("to", "/topics/global"); 
     jGcmData.Add("data", jData); 

     var url = new Uri("https://gcm-http.googleapis.com/gcm/send"); 
     try 
     { 
      using (var client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json")); 

       client.DefaultRequestHeaders.TryAddWithoutValidation(
        "Authorization", "key=" + API_KEY); 

       Task.WaitAll(client.PostAsync(url, 
        new StringContent(jGcmData.ToString(), Encoding.Default, "application/json")) 
         .ContinueWith(response => 
         { 
          Console.WriteLine(response); 
          Console.WriteLine("Message sent: check the client device notification tray."); 
         })); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Unable to send GCM message:"); 
      Console.Error.WriteLine(e.StackTrace); 
     } 
    } 
    } 
} 

Ich brauche dies in meine Anwendung Schaltfläche klicken in xamarin.Android machen Wie sollte ich das tun ??

+0

ist es, dass Sie versuchen, eine Nachricht von Ihrer Android App zu senden? –

+0

Yeah a Push Notification –

+0

Hat Ihre Client-Anwendung das globale Thema abonniert? Könnten Sie diesen Code in Ihre Frage aufnehmen? –

Antwort

0

Eigentlich habe ich das gleiche wie in der Frage angegeben.

 string API_KEY = "APIKEY"; 
     var jGcmData = new JObject(); 
     var jData = new JObject(); 
     jData.Add("message", message); 
     jGcmData.Add("to", "/topics/global"); 
     jGcmData.Add("data", jData); 

     var url = new Uri("https://gcm-http.googleapis.com/gcm/send"); 
     try 
     { 
      using (var client = new HttpClient()) 
      { 
       client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json")); 

       client.DefaultRequestHeaders.TryAddWithoutValidation(
        "Authorization", "key=" + API_KEY); 

       Task.WaitAll(client.PostAsync(url, 
        new StringContent(jGcmData.ToString(), Encoding.Default, "application/json")) 
         .ContinueWith(response => 
         { 
          Console.WriteLine(response); 
          Console.WriteLine("Message sent: check the client device notification tray."); 
         })); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Unable to send GCM message:"); 
      Console.Error.WriteLine(e.StackTrace); 
     } 

Es hat funktioniert. Danke für Ihre Hilfe. Brother @ZverevEugene

0

Wenn ich Ihre Frage richtig als Ihre brauchen eine plattformübergreifende HttpClient Nutzung Implementierung für Xamarin, richtig?

Versuchen Sie Folgendes: Consuming a RESTful Web Service. Das Thema könnte ein bisschen irreführend sein, aber Sie sollten nur den Code HttpClient erhalten, den Sie benötigen.

async void MyNotificationPost(Uri uri, string json) 
{ 
    HttpClient client = new HttpClient(); 
    var content = new StringContent (json, Encoding.UTF8, "application/json"); 
    HttpResponseMessage response = await client.PostAsync(uri, content); 

    ... 

    if (response.IsSuccessStatusCode) 
    { 
     ... 
    } 
} 

In diesem Beispiel werden die Cross-Plattform-Microsoft HTTP Client Libraries verwendet. Wenn Sie das nicht mögen, können Sie das herkömmliche HttpWebRequest verwenden, das auf Lager verfügbar ist.

Task<WebResponse> HTTPRequestSend(
     Uri uri, 
     byte[] bodyData, 
     CancellationToken cancellationToken) 
    { 
     HttpWebRequest request = WebRequest.CreateHttp(uri); 
     request.Method = "POST"; 
     request.Headers["Accept"] = "application/json"; 

     return Task.Factory.FromAsync<Stream>(
      request.BeginGetRequestStream, 
      request.EndGetRequestStream, 
      null).ContinueWith(
       reqStreamTask => 
       { 
        using (reqStreamTask.Result) 
        { 
         reqStreamTask.Result.Write(bodyData, 0, bodyData.Length); 
        } 

        return Task.Factory.FromAsync<WebResponse>(
         request.BeginGetResponse, 
         request.EndGetResponse, 
         null).ContinueWith(
          resTask => 
          { 
           return resTask.Result; 
          }, 
          cancellationToken); 
       }, 
       cancellationToken).Unwrap(); 
    } 

Wenn Sie das synchrone benötigen, seien Sie sehr vorsichtig, nicht in einem Deadlock stecken zu bleiben. Vergessen Sie nicht, ConfigureAwait(false) oder ähnliches zu verwenden.

P.S. Ich sehe, Sie verwenden die ContinueWith und kümmern sich nicht um ihre Gefahr. Schauen Sie hier: ContinueWith is Dangerous, Too und verpassen Sie nicht den Hauptartikel: StartNew is Dangerous

+0

Ich kann es nicht Sir machen! Bitte, wenn Sie mir ein Beispiel dafür geben können! Ich werde Froh zu dir sein! –

+0

@Bakshi Habe ich nicht das Beispiel gegeben? Was ist dein Problem jetzt genau? –

+0

Eigentlich. Ich bin nicht in der Lage, es zu benutzen. Die Benachrichtigung sollte an topics/global gesendet werden, da ich sie nicht verwenden kann. –

Verwandte Themen