Невозможно отправить 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", но в консоли ничего не отображается, поэтому я предполагаю, что оно никогда не получит это уведомление.

Мои вопросы...

  1. Что это за идентификатор, который он ожидает?
  2. Есть что-то, что я делаю не так?

Устройство работает под управлением iOS 6. Структура полезной нагрузки выглядит следующим образом...

{"aps":{},"mdm":"80369651-5802-40A2-A0AE-FCCF02F99589"}

Значения в возвращенном байте [] из 6 байтов следующие 8,8,0,0,0,1

2 ответа

Решение
  1. Понятия не имею, я никогда не изучал детали того, как PushSharp работает с внутренностями APNS.

  2. Не следует отправлять часть "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
            })
        });
    }
Другие вопросы по тегам