• Stars
    star
    4,362
  • Rank 9,358 (Top 0.2 %)
  • Language
    C#
  • License
    Other
  • Created almost 12 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A server-side library for sending Push Notifications to iOS (iPhone/iPad APNS), Android (C2DM and GCM - Google Cloud Message), Windows Phone, Windows 8, Amazon, Blackberry, and (soon) FirefoxOS devices!

PushSharp v4.0

PushSharp is a server-side library for sending Push Notifications to iOS/OSX (APNS), Android/Chrome (GCM/FCM), Windows/Windows Phone, Amazon (ADM) and Blackberry devices!

PushSharp v3.0+ is a complete rewrite of the original library, aimed at taking advantage of things like async/await, HttpClient, and generally a better infrastructure using lessons learned from the old code.

PushSharp will now follow semver versioning, so major version numbers will go up as there are any breaking api changes.

Join the chat at https://gitter.im/Redth/PushSharp

AppVeyor CI Status

NuGet Version


Sample Usage

The API in v3.x+ series is quite different from 2.x. The goal is to simplify things and focus on the core functionality of the library, leaving things like constructing valid payloads up to the developer.

APNS Sample Usage

Here is an example of how you would send an APNS notification:

// Configuration (NOTE: .pfx can also be used here)
var config = new ApnsConfiguration (ApnsConfiguration.ApnsServerEnvironment.Sandbox, 
    "push-cert.p12", "push-cert-pwd");

// Create a new broker
var apnsBroker = new ApnsServiceBroker (config);
    
// Wire up events
apnsBroker.OnNotificationFailed += (notification, aggregateEx) => {

	aggregateEx.Handle (ex => {
	
		// See what kind of exception it was to further diagnose
		if (ex is ApnsNotificationException notificationException) {
			
			// Deal with the failed notification
			var apnsNotification = notificationException.Notification;
			var statusCode = notificationException.ErrorStatusCode;

			Console.WriteLine ($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");
	
		} else {
			// Inner exception might hold more useful information like an ApnsConnectionException			
			Console.WriteLine ($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
		}

		// Mark it as handled
		return true;
	});
};

apnsBroker.OnNotificationSucceeded += (notification) => {
	Console.WriteLine ("Apple Notification Sent!");
};

// Start the broker
apnsBroker.Start ();

foreach (var deviceToken in MY_DEVICE_TOKENS) {
	// Queue a notification to send
	apnsBroker.QueueNotification (new ApnsNotification {
		DeviceToken = deviceToken,
		Payload = JObject.Parse ("{\"aps\":{\"badge\":7}}")
	});
}
   
// Stop the broker, wait for it to finish   
// This isn't done after every message, but after you're
// done with the broker
apnsBroker.Stop ();

Apple Notification Payload

More information about the payload sent in the ApnsNotification object can be found here.

Apple APNS Feedback Service

For APNS you will also need to occasionally check with the feedback service to see if there are any expired device tokens you should no longer send notifications to. Here's an example of how you would do that:

var config = new ApnsConfiguration (
    ApnsConfiguration.ApnsServerEnvironment.Sandbox, 
    Settings.Instance.ApnsCertificateFile, 
    Settings.Instance.ApnsCertificatePassword);

var fbs = new FeedbackService (config);
fbs.FeedbackReceived += (string deviceToken, DateTime timestamp) => {
    // Remove the deviceToken from your database
    // timestamp is the time the token was reported as expired
};
fbs.Check ();

GCM/FCM Sample Usage

Here is how you would send a GCM/FCM Notification:

// Configuration GCM (use this section for GCM)
var config = new GcmConfiguration ("GCM-SENDER-ID", "AUTH-TOKEN", null);
var provider = "GCM";

// Configuration FCM (use this section for FCM)
// var config = new GcmConfiguration("APIKEY");
// config.GcmUrl = "https://fcm.googleapis.com/fcm/send";
// var provider = "FCM";

// Create a new broker
var gcmBroker = new GcmServiceBroker (config);
    
// Wire up events
gcmBroker.OnNotificationFailed += (notification, aggregateEx) => {

	aggregateEx.Handle (ex => {
	
		// See what kind of exception it was to further diagnose
		if (ex is GcmNotificationException notificationException) {
			
			// Deal with the failed notification
			var gcmNotification = notificationException.Notification;
			var description = notificationException.Description;

			Console.WriteLine ($"{provider} Notification Failed: ID={gcmNotification.MessageId}, Desc={description}");
		} else if (ex is GcmMulticastResultException multicastException) {

			foreach (var succeededNotification in multicastException.Succeeded) {
				Console.WriteLine ($"{provider} Notification Succeeded: ID={succeededNotification.MessageId}");
			}

			foreach (var failedKvp in multicastException.Failed) {
				var n = failedKvp.Key;
				var e = failedKvp.Value;

				Console.WriteLine ($"{provider} Notification Failed: ID={n.MessageId}, Desc={e.Description}");
			}

		} else if (ex is DeviceSubscriptionExpiredException expiredException) {
			
			var oldId = expiredException.OldSubscriptionId;
			var newId = expiredException.NewSubscriptionId;

			Console.WriteLine ($"Device RegistrationId Expired: {oldId}");

			if (!string.IsNullOrWhiteSpace (newId)) {
				// If this value isn't null, our subscription changed and we should update our database
				Console.WriteLine ($"Device RegistrationId Changed To: {newId}");
			}
		} else if (ex is RetryAfterException retryException) {
			
			// If you get rate limited, you should stop sending messages until after the RetryAfterUtc date
			Console.WriteLine ($"{provider} Rate Limited, don't send more until after {retryException.RetryAfterUtc}");
		} else {
			Console.WriteLine ("{provider} Notification Failed for some unknown reason");
		}

		// Mark it as handled
		return true;
	});
};

gcmBroker.OnNotificationSucceeded += (notification) => {
	Console.WriteLine ("{provider} Notification Sent!");
};

// Start the broker
gcmBroker.Start ();

foreach (var regId in MY_REGISTRATION_IDS) {
	// Queue a notification to send
	gcmBroker.QueueNotification (new GcmNotification {
		RegistrationIds = new List<string> { 
			regId
		},
		Data = JObject.Parse ("{ \"somekey\" : \"somevalue\" }")
	});
}
   
// Stop the broker, wait for it to finish   
// This isn't done after every message, but after you're
// done with the broker
gcmBroker.Stop ();

Components of a GCM/FCM Notification

GCM notifications are much more customizable than Apple Push Notifications. More information about the messaging concepts and options can be found here.

WNS Sample Usage

Here's how to send WNS Notifications:

// Configuration
var config = new WnsConfiguration ("WNS_PACKAGE_NAME", "WNS_PACKAGE_SID", "WNS_CLIENT_SECRET");

// Create a new broker
var wnsBroker = new WnsServiceBroker (config);

// Wire up events
wnsBroker.OnNotificationFailed += (notification, aggregateEx) => {

	aggregateEx.Handle (ex => {
	
		// See what kind of exception it was to further diagnose
		if (ex is WnsNotificationException notificationException) {
			Console.WriteLine ($"WNS Notification Failed: {notificationException.Message}");
		} else {
			Console.WriteLine ("WNS Notification Failed for some (Unknown Reason)");
		}

		// Mark it as handled
		return true;
	});
};

wnsBroker.OnNotificationSucceeded += (notification) => {
	Console.WriteLine ("WNS Notification Sent!");
};

// Start the broker
wnsBroker.Start ();

foreach (var uri in MY_DEVICE_CHANNEL_URIS) {
	// Queue a notification to send
	wnsBroker.QueueNotification (new WnsToastNotification {
		ChannelUri = uri,
		Payload = XElement.Parse (@"
			<toast>
				<visual>
					<binding template=""ToastText01"">
						<text id=""1"">WNS_Send_Single</text>
					</binding>  
				</visual>
			</toast>")
	});
}

// Stop the broker, wait for it to finish   
// This isn't done after every message, but after you're
// done with the broker
wnsBroker.Stop ();

How to Migrate from PushSharp 2.x to 3.x and higher

Please see this Wiki page for more information: https://github.com/Redth/PushSharp/wiki/Migrating-from-PushSharp-2.x-to-3.x

Roadmap

  • APNS - Apple Push Notification Service
    • Finish HTTP/2 support (currently in another branch)
  • GCM - Google Cloud Messaging
    • XMPP transport still under development
  • Other
    • More NUnit tests to be written, with a test GCM Server, and eventually Test servers for other platforms
    • New Xamarin Client samples (how to setup each platform as a push client) will be built and live in a separate repository to be less confusing

License

Copyright 2012-2016 Jonathan Dick

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

More Repositories

1

ZXing.Net.Mobile

Barcode Scanner for Xamarin.iOS, Xamarin.Android, UWP and Tizen
C#
1,067
star
2

dotnet-maui-check

.NET MAUI Check tool
C#
461
star
3

ZXing.Net.Maui

Barcode Scanning for MAUI?
C#
365
star
4

ResizetizerNT

Add SVG's and PNG's to your shared Xamarin Project
C#
322
star
5

APNS-Sharp

Apple Push Notification & Feedback Services Client C# Library
C#
255
star
6

FlamedTVLauncher

A replacement home launcher for Amazon FireTV
C#
189
star
7

Maui.VirtualListView

A slim ListView implementation for .NET MAUI that uses Platform virtualized lists / collections
C#
128
star
8

HttpTwo

A basic C# HTTP/2 client library
JavaScript
117
star
9

Maui.UITesting

Experimenting with UI Testing approaches for .NET / MAUI
C#
93
star
10

AndroidSdk.Tools

.NET Library + global tool for various Android SDK Manager, ADB, AVD, Emulator commands
C#
49
star
11

MAUI.AppLinks.Sample

Sample .NET MAUI app which supports deep linking
C#
47
star
12

MSSolutionLauncher

Launch multiple instances of Visual Studio for Mac and/or Xamarin Studio easily!
C#
46
star
13

Resizetizer

Easily automateable Image resizing for your Xamarin.iOS and Xamarin.Android app assets!
C#
46
star
14

FlatUI.Xamarin.Android

FlatUI Port for Xamarin.Android of CengaLabs FlatUI Kit by @eluleci
C#
46
star
15

Microsoft.Maui.Platform.Channels

A simple bridge for messaging between .NET and iOS/MacCatalyst/Android Platforms at runtime
C#
44
star
16

C2DM-Sharp

C# Client and Server Libraries for Android C2DM (Cloud 2 Device Messaging)
C#
42
star
17

Android.Signature.Tool

Simple GUI tool for Mac and Windows to help find the SHA1 and MD5 hashes of your Android keystore's and apk's
C#
38
star
18

Xamarin.Binding.Helpers

MSBuild Tasks to help with Binding projects for Xamarin Android and iOS
C#
36
star
19

AppleDev.Tools

.NET Library with useful Apple/Xcode tool wrappers and implementations for developers
C#
36
star
20

MonoDroid.UrlImageViewHelper

C# / Mono for Android Port of koush's UrlImageViewHelper
C#
35
star
21

WshLst

Wish List App for Xamarin Developer Showdown
C#
33
star
22

Xamarin.AppleSignIn.Sample

A sample of how to implement Apple Sign In in Xamarin.Forms for Android, iOS, and UWP
C#
32
star
23

Microsoft.Maui.Icons

Simple project to extract glyphs from icon fonts and generate consts for their names and unicode values
C#
23
star
24

GCM.Client

[DEPRECATED] Add Google Cloud Messaging to your Xamarin.Android application
C#
22
star
25

LogcatSharp

ADB Logcat viewer written in C# using Winforms
C#
22
star
26

GCMSharp

Google Cloud Messaging Client & Server Libraries ported to C#
C#
22
star
27

PassKitSharp

C# / .NET Library for Reading and Writing PassKit files
C#
21
star
28

XamarinEncapsulateNativeSample

An example of how to encapsulate native SDK's with easy bindings to simple API's
C#
18
star
29

xf-to-maui

C#
16
star
30

Xamarin.AspNetCore.Authentication

Add authentication to your Xamarin apps using Asp.Net Core's built in authentication and providers
C#
15
star
31

JabbRIsMobile

MvvmCross based set of mobile apps for JabbR
C#
14
star
32

EggsToGo

Xamarin Cross Platform mobile library for implementing Easter Eggs!
C#
13
star
33

Maui.Generators.Prototype

A playground with some conceptual generators that could be used in Maui / Single Project
C#
12
star
34

MonoTouch.UrlImageStore

A Url Image Store for Lazy Loading Images
C#
11
star
35

MavenNet

A C# Client for inspecting and interacting with Maven Repositories
C#
11
star
36

XamarinMultiWindowTesting

C#
11
star
37

Plugin.Maui.PoppedContentView

Simple popup control & service for .NET MAUI
C#
10
star
38

iOS.BackgroundFetch.Sample

Xamarin.iOS Recipe for implementing Background Fetching
C#
9
star
39

MonoDroid.UrlImageStore

A Url Image Store for Lazy Loading Images for MonoDroid
C#
9
star
40

AppStoreConnectNet

.NET Client Library for Apple's AppStoreConnect API's
C#
9
star
41

XamarinSingleProjectConcept

Working area for development a concept of what Single Projects could look like for Xamarin in net6
C#
9
star
42

Xamarin.AndroidBinderator

An engine to generate Xamarin Binding projects from Maven repositories with a JSON config and razor templates
C#
9
star
43

MauiExceptionsGottaCatchEmAll

Playing with exception handling in MAUI
C#
8
star
44

Svg2VectorDrawable.Net

C# port of Android Studio's Svg2Vector code
C#
7
star
45

NestSharp

A Portable NEST API Client for C#/.NET
C#
7
star
46

Google.Auth

Google OAuth Library for C#
C#
7
star
47

Xamarin.Android.Xposed

Xamarin bindings for the Android Xposed client
C#
7
star
48

Plugin.SocialAuth

Xamarin Plugin to assist with Native social authentication
C#
6
star
49

XamarinStudio.RedthsAddin

Redth's Addins. Extensions for MonoDevelop/Xamarin Studio to improve productivity.
C#
6
star
50

MonoTouch.ImageGallery

Image Gallery View Controller
6
star
51

Xamarin.Wear.WatchFace

An Android Wear watch face made with Xamarin
C#
6
star
52

MapboxSlimBindingDemo

Java
5
star
53

Wikitude.Xamarin

Xamarin.iOS and Xamarin.Android Bindings for Wikitude SDK
JavaScript
5
star
54

MavenRepoBrowser

Xamarin.Forms app for browsing a Maven Repo (Google's)
C#
4
star
55

GitHubReleaseNotesGenerator

A simple git/github based release notes generator
C#
4
star
56

Techorama-2014

My code, slides, etc. From Techorama 2014
C#
4
star
57

Talks

Objective-C
4
star
58

ZxingSharp.Mobile

Renamed to ZXing.Net.Mobile
4
star
59

Xamarin.ChromeCustomTabs

How to use Chrome Custom Tabs in your Xamarin.Android apps!
C#
4
star
60

UnitTests.HeadlessRunner

A platform agnostic netstandard20 unit test runner
C#
4
star
61

ImapiNet

IMAPI .NET Wrapper
C#
3
star
62

PushSharp.ClientSamples

Xamarin Client Samples for registering for Push notifications
C#
3
star
63

MauiIssueReproBrowser

C#
3
star
64

MauiAppCIPlayground

Just a place to play with building maui apps via CI
C#
3
star
65

PptxNotes

Easily export notes from a .pptx to .md and Import into your .pptx from .md
C#
3
star
66

MsiSneakAttack

List and remove those hard to clean .MSI installs!
C#
3
star
67

MAUI.Slim.Bindings

Examples of Slim binding patterns for use within .NET MAUI projects
3
star
68

dotNUT

.NET implementation of the NUT protocol
C#
3
star
69

Xamarin.PlatformMessaging

C#
2
star
70

JdwpDotNet

JDWP (Java Debug Wire Protocol) Implementation in .NET
C#
2
star
71

FbSharp.MonoTouch.Authorization

MonoTouch Facebook Authorization Controller
2
star
72

Xappium.Maui.Playground

Just a repo to start testing Xappium UITesting with MAUI apps
C#
2
star
73

Xamarin.CI

Simple code to test Continuous Integration
C#
2
star
74

NearbyMonkey

A sample app showing off the Nearby Messages API from Google
C#
2
star
75

Xamarin.PlatformMessaging.Sample

A Sample app using Platform Messaging features
C#
2
star
76

DotNet.Platform.SlimBindings

Slim bindings to native libraries for use with .NET iOS/Android & .NET MAUI apps
C#
2
star
77

TwilioXamarinBindings

Twilio Bindings for Xamarin apps
C#
2
star
78

NuGetXamarinCompatibility

Test project to test Microsoft NuGet Packages (HTTP Client, BCL, BCL.Build) compatibility with Xamarin.Android, Xamarin.iOS, and Xamarin PCL projects
C#
2
star
79

Cake.Xamarin.Build

Cake addin for Xamarin product builds
C#
2
star
80

Xamarin.HttpClient.Repro

C#
2
star
81

FbSharp

C# Library for Facebook Graph API
1
star
82

Zxing

Zxing pull from subversion
1
star
83

f50

C#
1
star
84

GoogleSignInMigration

Sample Xamarin.iOS showing how to use the new Google SignIn API's with the old Plus API's
C#
1
star
85

redth.github.com

Redth
1
star
86

Plugin.Maui.Dev

A helpful package for .NET MAUI Plugin authors to make their dev experience more delightful
1
star
87

homebridge-poolmath-automation

HomeBridge Plugin for PoolMath Automation Controller
TypeScript
1
star
88

CorsProxy

Simple CORS Proxy intended to help with development of WebAssembly apps
C#
1
star
89

AndroidSupportComponents

C#
1
star
90

xUnit.ResultWriter

Write xUnit v2 XML Result files without xUnit
C#
1
star
91

SingleAppEntryPointExperiments

C#
1
star
92

Cake.MonoApiTools

Mono API Tools (Info, Diff, HTML Diff)
C#
1
star
93

ZXing-bindings

MonoTouch bindings for the ZXing for iPhone
C#
1
star
94

try_git

1
star
95

VsCodeDotNetInterop

A nice example of using a dotnet exe from VSCode to invoke commands and return results
C#
1
star
96

Cloud9.Playground

Just a place to play with Cloud9
1
star
97

MauiCollectionViewGallery

Some usages of CollectionView in a MAUI app to test bugs / performance against
C#
1
star
98

StreamDeck.Sp108e

Stream Deck Plugin for the SP108E WiFi LED Controller
HTML
1
star
99

CvPlayground

Testing UICollectionView for learnings to apply to MAUI VirtualListView
C#
1
star
100

bitrise-steps-installrapp-deploy

InstallrApp Deploy Step for Bitrise.io
Go
1
star