APNS-Sharp отправлено успешно, но устройство не получает
Я использую APNS-SHARP для отправки уведомлений. Я использую среду распространения и производственный сертификат с токеном. Ниже приведена часть моего кода.
try
{
Response.Write(notifications.Count.ToString());
bool useSandbox = false;
string p12FilePath = Server.MapPath("/Notification/PushNotification.p12");
string p12FilePassword = "password";
using (NotificationChannel channel = new NotificationChannel(useSandbox, p12FilePath, p12FilePassword))
{
channel.SendNotifications(notifications.ToArray());
}
log.Info("Send Successful: " + recipientList.Count + " Record Sent.");
}
catch (Exception ex)
{
log.Info("Send Error: " + ex.ToString());
}
Есть одна странная вещь, независимо от того, является ли песочница bool истинной или ложной. Я всегда получаю сообщение "Send Succesful" внутри файла журнала. Однако на устройство не поступило никаких уведомлений.
Я также пытался использовать PushSharp для отправки уведомления с тем же сертификатом. Ниже мой код:
try
{
if (notifications.Count > 0)
{
bool useProduction = true;
string p12FilePath = Server.MapPath("/Notification/ESchoolProPushNotification.p12");
string p12FilePassword = "password1";
PushBroker push = new PushBroker();
push.OnNotificationSent += NotificationSent;
push.OnChannelException += ChannelException;
push.OnServiceException += ServiceException;
push.OnNotificationFailed += NotificationFailed;
push.OnDeviceSubscriptionExpired += DeviceSubscriptionExpired;
push.OnDeviceSubscriptionChanged += DeviceSubscriptionChanged;
push.OnChannelCreated += ChannelCreated;
push.OnChannelDestroyed += ChannelDestroyed;
push.RegisterAppleService(new ApplePushChannelSettings(useProduction, p12FilePath, p12FilePassword));
foreach(AppleNotification an in notifications)
{
push.QueueNotification(new AppleNotification()
.ForDeviceToken("cedb76c24773c0f1f7688c3175a96959e5b434475501c09c4e17a2ff32706826")
.WithAlert("Hello World!")
.WithBadge(1)
.WithSound("default"));
}
push.StopAllServices();
log.Info("Send Successful: " + recipientList.Count + " IOS Record Sent.");
}
else
{
log.Info("No IOS Record Sent.");
}
Код застрянет в функции QueueNotification очень долго и не сможет обрабатывать дальше, но не вернет никакой ошибки. Я должен остановить отладку вручную, чтобы закончить.
Кстати, я следую этим шагам, чтобы создать сертификат p12.
- Преобразовать apn_developer_identity.cer (der format) в pem: openssl x509 -in apn_developer_identity.cer -inform DER -out apn_developer_identity.pem -outform PEM}
- Затем преобразуйте закрытый ключ p12 в pem (требуется ввести минимум 4 пароля): openssl pkcs12 -nocerts -out private_dev_key.pem -in private_dev_key.p12
- (Необязательно): если вы хотите удалить пароль из закрытого ключа: openssl rsa -out private_key_noenc.pem -in private_key.pem
- Возьмите сертификат и ключ (с паролем или без него) и создайте файл формата PKCS#12: openssl pkcs12 -export -in apn_developer_identity.pem -inkey private_key_noenc.pem -certfile CertificateSigningRequest??. CertSigningRequest -name "apn_developer_identity" -out apn_developer_identity "-out apn_developer_identity" -out apn_developer_identity "-out apn_developer_identity" -out apn_developer_identity "-out apn_developer_identity" -out apn_developer_identity "-out apn_developer_identity" -out apn_developer_identity "-out apn_developer_identity" -out apn_developer_identity ".p12
Это проблема с сертификатом p12?