Невозможно отправить iOS MDM Push-уведомление с помощью Push Sharp
Я пытаюсь отправить push-уведомление MDM на iPad с помощью производственного сервера APN. Однако Push Sharp сообщает, что уведомление не удалось, потому что идентификатор равен 1. Следующий код из базы кода PushSharp иллюстрирует, как он приходит к такому выводу...
//We now expect apple to close the connection on us anyway, so let's try and close things
// up here as well to get a head start
//Hopefully this way we have less messages written to the stream that we have to requeue
try { stream.Close(); stream.Dispose(); }
catch { }
//Get the enhanced format response
// byte 0 is always '1', byte 1 is the status, bytes 2,3,4,5 are the identifier of the notification
var identifier = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(readBuffer, 2));
int failedNotificationIndex = -1;
SentNotification failedNotification = null;
//Try and find the failed notification in our sent list
for (int i = 0; i < sentNotifications.Count; i++)
{
var n = sentNotifications[i];
if (n.Identifier.Equals(identifier))
{
failedNotificationIndex = i;
failedNotification = n;
break;
}
}
По сути, после записи полезной нагрузки в поток он пытается закрыть соединение, в течение которого он ожидает ответа от службы APN, которую, я думаю, он называет идентификатором уведомления.
Я подключил устройство к утилите "Конфигурация устройства iPhone", но в консоли ничего не отображается, поэтому я предполагаю, что оно никогда не получит это уведомление.
Мои вопросы...
- Что это за идентификатор, который он ожидает?
- Есть что-то, что я делаю не так?
Устройство работает под управлением iOS 6. Структура полезной нагрузки выглядит следующим образом...
{"aps":{},"mdm":"80369651-5802-40A2-A0AE-FCCF02F99589"}
Значения в возвращенном байте [] из 6 байтов следующие 8,8,0,0,0,1
2 ответа
Понятия не имею, я никогда не изучал детали того, как PushSharp работает с внутренностями APNS.
Не следует отправлять часть "aps":{} в полезную нагрузку уведомления, так что, возможно, именно поэтому APNS отказывает в уведомлении.
Я успешно использую PushSharp 1.0.17 со следующим кодом для уведомлений MDM, так что он определенно работает в целом.
var pushService = new PushService();
// attach event listeners
// override the production/development auto-detection as it doesn't
// work for MDM certificates
var cert = null; // load your push client certificate
var channel = new ApplePushChannelSettings(true, cert, true);
pushService.StartApplePushService(channel);
// create and send the notification
var notification = NotificationFactory
.Apple()
.ForDeviceToken("your-device-token-received-from-checkin")
.WithExpiry(DateTime.UtcNow.AddDays(1))
.WithCustomItem("mdm", "your-push-magic-received-in-checkin");
pushService.QueueNotification(notification);
Для PushSharp v3.0+ вы должны иметь возможность включить его непосредственно в полезную нагрузку уведомления Apns.
public void SendIosMdm(string deviceToken, string pushMagic)
{
_apnsBroker.QueueNotification(new ApnsNotification
{
DeviceToken = deviceToken,
Payload = JObject.FromObject(new {
mdm = pushMagic
})
});
}