Сертификат производства APN не признается PushSharp
Я разработал приложение iOS, которое получает Push Notifications. Я отправляю их из среды .NET с помощью PushSharp. Все прошло красиво, развиваясь, и Pushs были успешно отправлены:
var push = new PushBroker();
var appleCert = File.ReadAllBytes(@"Utils\Cert.Development.p12");
push.RegisterAppleService(new ApplePushChannelSettings(false, appleCert, "*******"));
push.QueueNotification(new AppleNotification()
.ForDeviceToken(token)
.WithContentAvailable(1)
);
push.StopAllServices();
Теперь приложение одобрено, и оно находится в AppStore. Я создал правильный производственный сертификат:
var push = new PushBroker();
var appleCert = File.ReadAllBytes(@"Utils\Cert.Production.p12");
push.RegisterAppleService(new ApplePushChannelSettings(true, appleCert, "*******"));
push.QueueNotification(new AppleNotification()
.ForDeviceToken(token)
.WithContentAvailable(1)
);
push.StopAllServices();
но когда я пытаюсь отправить push из PushSharp, он выдает следующее исключение:
You have selected the Production server, yet your Certificate does not appear to be the Production certificate! Please check to ensure you have the correct certificate!
Я уверен, что выполнил все шаги. Я загрузил производственный сертификат, связанный с файлом инициализации, установленным в приложении для публикации. Открыл его и экспортировал .p12.
Я также уверен, что я не использую разработку один случайно, потому что, если я установил PushSharp для разработки, используя этот последний сертификат, он выдает следующую ошибку:
You have selected the Development/Sandbox (Not production) server, yet your Certificate does not appear to be the Development/Sandbox (Not production) certificate! Please check to ensure you have the correct certificate!
Как сертификат не может быть ни Development, ни Production?
Я могу проверить файл? Пожалуйста, дайте мне немного по этому поводу, поскольку я не знаю, с чего начать
Ответы
Ответ 1
Apple изменила название. Перейдите в ApplePushChannelSettings.cs и измените имя, как показано ниже.
С
if (production && !subjectName.Contains("Apple Production IOS Push Services"))
Для
if (production && !subjectName.Contains("Apple Push Services"))
Мне нужно сделать это, когда я обновляю свой истекший сертификат вчера. Измените имя, перестройте его и загрузите на сервер, затем снова запустите.
Ответ 2
Apple представила новый универсальный push-сертификат, который позволяет подключаться к средам производства и разработки APN. Из-за чего общее имя производственного сертификата было изменено с Apple Production IOS Push Services на Apple Push Services.
Вы должны изменить код на сервере-провайдере провайдера, чтобы он совместим с новым общим именем.
Ответ 3
Когда вы создаете производственный сертификат (.p12) для .NET, всегда экспортируйте, как только выберите сертификат. см. прикрепленное изображение
http://davidbits.blogspot.in/2016/02/error-you-have-selected-production.html
![введите описание изображения здесь]()
Ответ 4
Проблема была в библиотеке PushSharp, просто обновите ее до версии .3 Это связано с тем, что Apple изменило имя Push-сертификата с (Apple Push Push Service) на (Apple Push Service)
и pushSharp проверить имя сертификата:
(производство &! subjectName.Contains( "Apple Push Services" )).
Ответ 5
Ошибка: вы выбрали сервер Production, а пока ваш сертификат не является производственным сертификатом!
Пожалуйста, проверьте убедитесь, что у вас есть правильный сертификат!
Решение: (production && !subjectName.Contains("Apple Push Services"))
Ответ 6
Чтобы создать сертификат SSL для производства, выполните следующие действия в следующей ссылке:
Как создать сертификат APNS
Если это не сработало, дважды проверьте свой код, убедитесь, что вы читаете из правильного файла сертификата, и вы проходите True
до ApplePushChannelSettings
Ответ 7
Я бы рекомендовал использовать что-то из 3.0 nuget предварительных версий. Эта проблема исправлена в этих версиях и не будет передана в 2.x.
Ответ 8
PushSharp 2.x > Push.Apple > ApplePushChannelSettings.cs
В ApplePushChannelSettings.cs найдите DetectProduction() и CheckProductionCertificateMatching() и замените ".Contains(" Apple IOS Push Services Services ") на ".Contains(" Apple Push Services") "
Это происходит из-за того, что яблоко изменило имя сертификата из "Apple Production IOS Push Services" на "Apple Push Services", PushSharp идентифицирует тип (производство/разработку) по имени сертификата.