1

本番APNサーバーを使用してMDMプッシュ通知をiPadに送信しようとしています。ただし、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. 私が間違っていることはありますか?

デバイスはiOS6を実行しています。ペイロードの構造は次のとおりです。

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

6バイトの返されたbyte[]の値は次のとおりです8,8,0,0,0,1

4

2 に答える 2

1
  1. わかりません。PushSharpがAPNS内部をどのように処理するかについての詳細を調べたことがありません。

  2. 通知ペイロードで「aps」:{}の部分を送信しないでください。そのため、APNSが通知に失敗するのはそのためかもしれません。

私はMDM通知用に次のコードでPushSharp1.0.17を正常に使用しているので、一般的には間違いなく機能します。

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);
于 2013-01-20T17:58:27.803 に答える
0

PushSharp v3.0 +の場合、ApnsNotificationのペイロードに直接含めることができるはずです。

public void SendIosMdm(string deviceToken, string pushMagic)
    {
        _apnsBroker.QueueNotification(new ApnsNotification
        {
            DeviceToken = deviceToken,
            Payload = JObject.FromObject(new {
                mdm = pushMagic
            })
        });
    }
于 2017-02-22T01:52:34.460 に答える