Невозможно отправить push-уведомление iOS MDM с помощью 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"}

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


person Heshan Perera    schedule 22.10.2012    source источник


Ответы (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);
person Ingo    schedule 20.01.2013
comment
Можете ли вы привести пример PushSharp 4.0? - person PC.; 19.08.2016

Для PushSharp v3.0+ вы должны иметь возможность включать непосредственно в полезную нагрузку ApnsNotification.

public void SendIosMdm(string deviceToken, string pushMagic)
    {
        _apnsBroker.QueueNotification(new ApnsNotification
        {
            DeviceToken = deviceToken,
            Payload = JObject.FromObject(new {
                mdm = pushMagic
            })
        });
    }
person jessek    schedule 22.02.2017