Created
December 9, 2021 11:18
-
-
Save cleardemon/4bdf27494f789cbcdf10e07f9a1c37ef to your computer and use it in GitHub Desktop.
How to send a push notification from C# console to Firebase
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Requires these packages to be included in the project (or whatever latest versions are available): | |
<PackageReference Include="FirebaseAdmin" Version="2.2.0" /> | |
<PackageReference Include="System.Text.Json" Version="6.0.0" /> | |
*/ | |
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Text.Json; | |
using System.Text.Json.Serialization; | |
using System.Threading.Tasks; | |
using FirebaseAdmin; | |
using FirebaseAdmin.Messaging; | |
using Google.Apis.Auth.OAuth2; | |
namespace FirebasePushTest | |
{ | |
class Program | |
{ | |
static void Main(string[] args) | |
{ | |
var configFilename = args.Length == 1 ? args[0] : "test-config.json"; | |
// parse json file containing configuration (not secrets) | |
var config = JsonSerializer.Deserialize<TestConfiguration>(File.OpenRead(configFilename)); | |
if(config is null) | |
{ | |
Fail("Couldn't parse config."); | |
return; | |
} | |
// create firebase app, parse services json for secrets | |
// you need to set the GOOGLE_APPLICATION_CREDENTIALS environment variable to point to the | |
// location of the JSON file on your computer for this to work (it must be a full path). | |
// if you don't have a JSON file, you need to get the private key from here: | |
// https://console.firebase.google.com/u/0/project/api-XXXXXXXX-XXXXXXX/settings/serviceaccounts/adminsdk | |
// and click "Generate new private key"... check with anyone on your team first if one has been created! | |
FirebaseApp.Create(new AppOptions { Credential = GoogleCredential.GetApplicationDefault() }); | |
// send notification | |
Console.WriteLine("Sending notification..."); | |
SendNotification(config).Wait(); | |
void Fail(string msg) | |
{ | |
Console.WriteLine($"ERROR: {msg}"); | |
Environment.Exit(1); | |
} | |
} | |
static async Task SendNotification(TestConfiguration configuration) | |
{ | |
// this is how you send metadata in a push notification via Firebase | |
// it is represented as a key/value string pair... | |
// on Android, this will appear in the intent Extras (e.g. intent.GetStringExtra("go")) | |
// on iOS, this will appear in the UserInfo NSDictionary in UNNotificationContent | |
// in this example, we use this metadata to tell the app about a deep/shallow link to navigate to | |
var data = new Dictionary<string, string>(); | |
if(!string.IsNullOrEmpty(configuration.DeepLink)) | |
{ | |
data.Add("go", configuration.DeepLink); | |
} | |
// multicast so it can be sent to more than one device | |
var message = new MulticastMessage | |
{ | |
Tokens = configuration.Tokens, | |
Notification = new Notification | |
{ | |
Title = configuration.Title, | |
Body = configuration.Body | |
}, | |
Data = data | |
}; | |
var response = await FirebaseMessaging.DefaultInstance.SendMulticastAsync(message); | |
Console.WriteLine("Notification sent."); | |
Console.WriteLine($"Success count: {response.SuccessCount}, failures: {response.FailureCount}"); | |
} | |
} | |
// this matches the test-config.json file, deserialised from JSON | |
class TestConfiguration | |
{ | |
[JsonPropertyName("tokens")] | |
public List<string> Tokens { get; set; } | |
[JsonPropertyName("title")] | |
public string Title { get; set; } | |
[JsonPropertyName("body")] | |
public string Body { get; set; } | |
[JsonPropertyName("deepLink")] | |
public string DeepLink { get; set; } | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"tokens": [ | |
// you can include one or more tokens here. dump it to console/logs in your app when Firebase tells you. | |
// on Android, this would be via the OnCompleteListener in FirebaseMessaging.Instance.GetToken(). | |
"<YOUR DEVICE TOKEN HERE>", | |
"<YOUR DEVICE TOKEN HERE>", | |
"<YOUR DEVICE TOKEN HERE>" | |
], | |
"title": "Test message", | |
"body": "This is a test message", | |
"deepLink": "/a/route/to/go/to?param=abc¶m2=123" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Please add apns code for ios device