Pushsharp APNS production: учетные данные, поставляемые в пакет, не были признаны (разработка работает нормально, хотя)
мое приложение только что готово к продаже в App Store, но ни одно из моих производственных устройств (устройств, которые установили приложение из App Store) не получает push-уведомлений. Когда я пытаюсь отправить push-уведомление на производственное устройство, я получаю эту ошибку:
"The credentials supplied to the package were not recognized"
(System.ComponentModel.Win32Exception)
это исключение внутренне брошено и поймано в бесконечный цикл:
бросается на строку 539 из :
try
{
stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates,
System.Security.Authentication.SslProtocols.Ssl3, false);
//stream.AuthenticateAsClient(this.appleSettings.Host);
}
catch (System.Security.Authentication.AuthenticationException ex)
{
throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex);
}
это выход приложение в выводе Visual Studio:
...
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
...(it keeps getting thrown until I stop it manually)
вот что я пробовал:
- проверил, что ID устройства я пытаюсь зарегистрирован с производства маркер устройства.
- отозван и восстановлен производственный сертификат APNS, экспортирован с закрытым ключом в новый
.p12
file, и попробовал снова с новым сертификатом. (У меня была такая же проблема с уведомлениями о разработке, и это решило мою проблема) - изменен протокол SSL с
Ssl3
toTls
. (несколько дней назад возникла проблема с версией протокола, и она временно исправила проблему. Не должно быть необходимости в этом, но ошибка, которую я получаю, такая же, как и та, которую я получал до этого) - проверено, что я фактически пытаюсь подключиться к производственному серверу с производственным сертификатом вместо сервера/сертификата разработки.
- проверено, что я могу получить доступ сервер APNS напрямую (мой ASP.NET приложение живет внутри Parallels VM Windows 8.1 на моем Mac, вот вывод с моего Mac, просто чтобы избежать путаницы:
(выходной терминал ) Edit: я пинговал сервер песочницы, я пинговал производственный сервер, я проверяю, что я тоже могу подключиться к нему, поэтому это не проблема.
can$ sudo nmap -p 2195 gateway.sandbox.push.apple.com
Starting Nmap 6.40-2 ( http://nmap.org ) at 2014-04-28 00:06 EEST
Nmap scan report for gateway.sandbox.push.apple.com (17.149.34.189)
Host is up (0.49s latency).
Other addresses for gateway.sandbox.push.apple.com (not scanned): 17.149.34.187 17.149.34.188
PORT STATE SERVICE
2195/tcp open unknown
почему PushSharp не ведет переговоры с серверами APNS?
6 ответов
Я понял, проблема. Я снова отозвал и восстановил сертификат, и на этот раз я экспортировал только закрытый ключ (без сертификата). В Keychain access я экспортировал как .p12
и использовать новый файл и он работал. По какой-то причине PushSharp не играл хорошо с .p12
когда в файле присутствуют как сертификат, так и закрытый ключ.
исключение"учетные данные, предоставленные пакету, не были распознаны" обычно указывает, что у пользователя, выполняющего код, недостаточно разрешений.
при отправке push-уведомлений из Azure web app или webjob не загружайте сертификат APNS из файла или строки, закодированной в base64. Перейдите на портал Azure и добавьте сертификат на веб-сайт. Обратите внимание на отпечаток.
далее добавить WEBSITE_LOAD_CERTIFICATES параметр и установить его в *
(звездочка).
теперь сертификат APNS можно использовать из кода C#:
string thumbprint = "YOUR THUMBPRINT";
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(
X509FindType.FindByThumbprint, thumbprint, validOnly: false)
.Cast<X509Certificate2>().SingleOrDefault();
var apnsConfig = new ApnsConfiguration(
ApnsConfiguration.ApnsServerEnvironment.Production, certificate);
ссылки
ни один из ответов работал для меня. В конце концов я закончил тем, что импортировал сертификат и закрытый ключ в хранилище сертификатов Windows, а затем экспортировал как .pfx
.
Я проверял его снова и снова.
преобразование до pem
формат, и он будет работать с ограниченными пользователями IIS и, возможно, с Azure....
Я получал то же исключение, и в моем случае мне пришлось добавить разрешение для моего сертификата Push-сервисов IOS.
щелкните правой кнопкой мыши сертификат в mmc - > все задачи - > Управление закрытыми ключами... Я добавил сетевую службу, потому что пул приложений iis моего веб-приложения использовал эту учетную запись.
Подробнее см.:http://blog.falafel.com/apple-push-notifications-certificates-and-iis/
при использовании хранилища сертификатов windows (imho-самый простой способ управления сертификатами на рабочем сервере) обязательно установите правильные разрешения на закрытый ключ.