К сожалению, топиков-ссылок на Хабре давно нет, так что придётся что-то написать о замечательной библиотеке PushSharp.
Умеет отправлять iOS, Android, Windows Phone и Windows 8 Push Notifications (в описании этого нет, но в исходном коде присутствует папка PushSharp.Blackberry, так что может быть и для этой платформы уже работает). B использовании проще уже совсем некуда:
Также авторы не поленились поработать над документацией и примерами. Пошаговая инструкция настройки push notifications для iOS оттуда просто замечательна.
Nuget package у этой библиотеки, конечно, есть.
И добавлю от себя, как получить device token при разработке под iOS. После установки Push provision profile, в ваш AppDelegate нужно будет добавить метод:
Для сохранения device token я использую NSUserDefaults (минусов в этом подходе пока не вижу). Единственное, что нужно учесть, — token приходит в вышеуказанный метод в виде NSData (при приведении к строке мы получим что-то вроде "<asdfasdf asdfasdf 12341234 wertwert 1234asdf ewrt3456 asdfasfd asdfasdf>"), а нам он нужен будет в виде строки («asdfasdfasdfasdf12341234wertwert1234asdfewrt3456asdfasfdasdfasdf»).
То есть методы для сохранения и получения токена будут выглядеть так:
Также, кроме установки сертификата, нужно зарегистрировать приложение для push notifications в вашем AppDelegate:
Умеет отправлять iOS, Android, Windows Phone и Windows 8 Push Notifications (в описании этого нет, но в исходном коде присутствует папка PushSharp.Blackberry, так что может быть и для этой платформы уже работает). B использовании проще уже совсем некуда:
//Create our push services broker
var push = new PushBroker();
//Registering the Apple Service and sending an iOS Notification
var appleCert = File.ReadAllBytes("ApnsSandboxCert.p12"));
//isProduction - используете ли вы development или ad-hoc/release сертификат
push.RegisterAppleService(new ApplePushChannelSettings(isProduction, appleCert, "pwd"));
push.QueueNotification(new AppleNotification()
.ForDeviceToken("DEVICE TOKEN HERE")
.WithAlert("Hello World!")
.WithBadge(7)
.WithSound("sound.caf"));
//Registering the GCM Service and sending an Android Notification
push.RegisterGcmService(new GcmPushChannelSettings("theauthorizationtokenhere"));
//Fluent construction of an Android GCM Notification
//IMPORTANT: For Android you MUST use your own RegistrationId here that gets generated within your Android app itself!
push.QueueNotification(new GcmNotification().ForDeviceRegistrationId("DEVICE REGISTRATION ID HERE")
.WithJson("{\"alert\":\"Hello World!\",\"badge\":7,\"sound\":\"sound.caf\"}"));
Также авторы не поленились поработать над документацией и примерами. Пошаговая инструкция настройки push notifications для iOS оттуда просто замечательна.
Nuget package у этой библиотеки, конечно, есть.
И добавлю от себя, как получить device token при разработке под iOS. После установки Push provision profile, в ваш AppDelegate нужно будет добавить метод:
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
//тут сохраняем deviceToken, а потом используем при обращении к вашему серверу
}
Для сохранения device token я использую NSUserDefaults (минусов в этом подходе пока не вижу). Единственное, что нужно учесть, — token приходит в вышеуказанный метод в виде NSData (при приведении к строке мы получим что-то вроде "<asdfasdf asdfasdf 12341234 wertwert 1234asdf ewrt3456 asdfasfd asdfasdf>"), а нам он нужен будет в виде строки («asdfasdfasdfasdf12341234wertwert1234asdfewrt3456asdfasfdasdfasdf»).
То есть методы для сохранения и получения токена будут выглядеть так:
+(NSString*)getUserDeviceToken{
return [[NSUserDefaults standardUserDefaults] stringForKey:_deviceTokenKey];
}
+(void)setUserDeviceToken:(NSData*)tokenData{
NSCharacterSet *charactersToRemove = [NSCharacterSet characterSetWithCharactersInString:@"<> "];
NSString *result = [[[NSString stringWithFormat:@"%@",tokenData] componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString: @""];
[[NSUserDefaults standardUserDefaults] setValue:result forKey:_deviceTokenKey];
}
Также, кроме установки сертификата, нужно зарегистрировать приложение для push notifications в вашем AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
return YES;
}