Я использую версию 2.1.2 PushSharp. Приложение .NET 4.5.1 (хотя я также пытался ориентироваться на .NET 4.5 и .NET 4)
Я пытаюсь, но не могу отправлять push-сообщения через песочницу Apple APNS.
Я успешно отправляю сообщения с помощью PHP-скрипта, предоставленного здесь, в пошаговом руководстве Рэя Вендерлиха с использованием того же сертификата и отправкой на тот же идентификатор устройства, что и для моего приложения PushSharp.
Я проверил, экспортировав заполненный сертификат как p12 из цепочки для ключей. Экспорт готового сертификата и ключа. Экспорт закрытого ключа. Также по методу, использованному здесь. Когда я комбинирую сертификат и ключ для использования в сценарии PHP, у меня нет проблем.
Я импортировал сертификат p12 на машины, которые я тестировал - похоже, это не имеет значения.
Я попытался изменить флаг IsProduction при регистрации push-службы Apple в push-брокере. Нет ошибки, когда он установлен как производственный (даже если это сертификат песочницы), однако в этом случае он, очевидно, не доходит до устройства.
Ни одно из моих сообщений не пройдет, все получат служебное исключение, которое выглядит следующим образом:
System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The message received was unexpected or badly formatted
--- End of inner exception stack trace ---
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
at PushSharp.Apple.FeedbackService.Run(ApplePushChannelSettings settings, CancellationToken cancelToken)
at PushSharp.Apple.ApplePushService.<>c__DisplayClass4.<.ctor>b__1(Object state)
Вот как выглядит мой код:
var push = new PushBroker();
// register event handlers for channel create/destroy/exception, notificationrequeue, serviceexception, notification sent
var appleCert = File.ReadAllBytes(ConfigurationManager.AppSettings["CertAddress"]);
push.RegisterAppleService(new ApplePushChannelSettings(false, appleCert, ConfigurationManager.AppSettings["CertPassword"]));
var pn = new AppleNotification().ForDeviceToken(item.SendToDeviceIdentifier).WithAlert(item.AlertMessage).WithBadge(item.Badges);
push.QueueNotification(pn);
Я получаю вызов события канала, а затем исключение службы.
В некоторых связанных вопросах упоминается, что эта ошибка может быть связана с проблемой брандмауэра - я протестировал свое приложение в 2 разных сетях, которые могут отправлять push-уведомления (1 из которых в настоящее время использует приложение PushSharp).
Любое понимание будет высоко оценено.