FCM (Firebase Cloud Messaging) Push Notification with Asp.Net

前端 未结 7 997
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-28 22:01

I have already push the GCM message to google server using asp .net in following method,

GCM Push Notification with Asp.Net

<
相关标签:
7条回答
  • 2020-11-28 22:37

    I don't believe there is any change in the way you are sending push notifications. In FCM also, you are going to make HTTP POST Request the same way you did for GCM:

    https://fcm.googleapis.com/fcm/send
    Content-Type:application/json
    Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
    
    { "data": {
        "score": "5x1",
        "time": "15:10"
      },
      "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
    }
    

    Read about FCM Server for more information.

    The only change I could see now, is the target Url. Period.

    0 讨论(0)
  • 2020-11-28 22:41

    Here is my VbScript sample for who prefers vb:

    //Create Json body
    posturl="https://fcm.googleapis.com/fcm/send"
    body=body & "{ ""notification"": {"
    body=body & """title"": ""Your Title"","
    body=body & """text"": ""Your Text"","
    body=body & "},"
    body=body & """to"" : ""target Token""}"
    
    //Set Headers :Content Type and server key
    set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
    xmlhttp.Open "POST",posturl,false
    xmlhttp.setRequestHeader "Content-Type", "application/json"
    xmlhttp.setRequestHeader "Authorization", "Your Server key"
    
    xmlhttp.send body
    result= xmlhttp.responseText
    //response.write result to check Firebase response
    Set xmlhttp = nothing
    
    0 讨论(0)
  • 2020-11-28 22:51

    C# Server Side Code For Firebase Cloud Messaging

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Web;
    using System.Web.Script.Serialization;
    
    namespace Sch_WCFApplication
    {
        public class PushNotification
        {
            public PushNotification(Plobj obj)
            {
                try
                {    
                    var applicationID = "AIza---------4GcVJj4dI";
    
                    var senderId = "57-------55";
    
                    string deviceId = "euxqdp------ioIdL87abVL";
    
                    WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
    
                    tRequest.Method = "post";
    
                    tRequest.ContentType = "application/json";
    
                    var data = new
    
                    {
    
                        to = deviceId,
    
                        notification = new
    
                        {
    
                            body = obj.Message,
    
                            title = obj.TagMsg,
    
                            icon = "myicon"
    
                        }    
                    };       
    
                    var serializer = new JavaScriptSerializer();
    
                    var json = serializer.Serialize(data);
    
                    Byte[] byteArray = Encoding.UTF8.GetBytes(json);
    
                    tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID));
    
                    tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
    
                    tRequest.ContentLength = byteArray.Length; 
    
    
                    using (Stream dataStream = tRequest.GetRequestStream())
                    {
    
                        dataStream.Write(byteArray, 0, byteArray.Length);   
    
    
                        using (WebResponse tResponse = tRequest.GetResponse())
                        {
    
                            using (Stream dataStreamResponse = tResponse.GetResponseStream())
                            {
    
                                using (StreamReader tReader = new StreamReader(dataStreamResponse))
                                {
    
                                    String sResponseFromServer = tReader.ReadToEnd();
    
                                    string str = sResponseFromServer;
    
                                }    
                            }    
                        }    
                    }    
                }        
    
                catch (Exception ex)
                {
    
                    string str = ex.Message;
    
                }          
    
            }   
    
        }
    }
    

    APIKey and senderId , You get is here---------as follow(Below Images) (go to your firebase App)

    0 讨论(0)
  • 2020-11-28 22:53
     public class Notification
    {
        private string serverKey = "kkkkk";
        private string senderId = "iiffffffffd";
        private string webAddr = "https://fcm.googleapis.com/fcm/send";
    
        public string SendNotification(string DeviceToken, string title ,string msg )
        {
            var result = "-1";
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
            httpWebRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
            httpWebRequest.Method = "POST";
    
            var payload = new
            {
                to = DeviceToken,
                priority = "high",
                content_available = true,
                notification = new
                {
                    body = msg,
                    title = title
                },
            };
            var serializer = new JavaScriptSerializer();
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = serializer.Serialize(payload);
                streamWriter.Write(json);
                streamWriter.Flush();
            }
    
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }
            return result;
        }
    }
    
    0 讨论(0)
  • 2020-11-28 22:54

    2019 Update

    There's a new .NET Admin SDK that allows you to send notifications from your server. Install via Nuget

    Install-Package FirebaseAdmin
    

    You'll then have to obtain the service account key by downloading it by following the instructions given here, and then reference it in your project. I've been able to send messages by initializing the client like this

    using FirebaseAdmin;
    using FirebaseAdmin.Messaging;
    using Google.Apis.Auth.OAuth2;
    ...
    
    public class MobileMessagingClient : IMobileMessagingClient
    {
        private readonly FirebaseMessaging messaging;
    
        public MobileMessagingClient()
        {
            var app = FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("serviceAccountKey.json").CreateScoped("https://www.googleapis.com/auth/firebase.messaging")});           
            messaging = FirebaseMessaging.GetMessaging(app);
        }
        //...          
    }
    

    After initializing the app you are now able to create notifications and data messages and send them to the devices you'd like.

    private Message CreateNotification(string title, string notificationBody, string token)
    {    
        return new Message()
        {
            Token = token,
            Notification = new Notification()
            {
                Body = notificationBody,
                Title = title
            }
        };
    }
    
    public async Task SendNotification(string token, string title, string body)
    {
        var result = await messaging.SendAsync(CreateNotification(title, body, token)); 
        //do something with result
    }
    

    ..... in your service collection you can then add it...

    services.AddSingleton<IMobileMessagingClient, MobileMessagingClient >();
    
    0 讨论(0)
  • 2020-11-28 22:56

    2020/11/28

    download this file from Firebase -> Settings -> Service accounts -> Firebase Admin SDK

    Move the downloaded file to Your dotnet Core Root folder then change it's name to key.json for example .

    then add this code to your .csproj file: YourProjectName.csproj in your project root folder :

      <ItemGroup>
        <None Update="key.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
      </ItemGroup>
    

    then add this code to your Program.cs in Main function :

    var defaultApp = FirebaseApp.Create(new AppOptions()
    {
      Credential = 
      GoogleCredential.FromFile(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
      "key.json")),
    });
    

    Last thing is the code that will push notification :

    public async Task SendNotificationAsync(string DeviceToken, string title ,string body){
     var message = new Message()
     {
      Notification = new FirebaseAdmin.Messaging.Notification
      {
         Title = title,
         Body = body
      },
      Token = DeviceToken,
     };
     var messaging = FirebaseMessaging.DefaultInstance;
     var result = await messaging.SendAsync(message);
    }
    

    Put it in any Controller then u can call it to send notification ...

    that is what i did to push notificaion and it is working very well and fast ...

    0 讨论(0)
提交回复
热议问题