Сертификат производства APN не признается PushSharp - программирование

Сертификат производства 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?

Я могу проверить файл? Пожалуйста, дайте мне немного по этому поводу, поскольку я не знаю, с чего начать

4b9b3361

Ответ 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.

Вы должны изменить код на сервере-провайдере провайдера, чтобы он совместим с новым общим именем.

Ответ 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 идентифицирует тип (производство/разработку) по имени сертификата.