0

私はVS C#Webプロジェクトで以下のコードでiOSデバイスにプッシュ通知を送信しようとしています。C#でプッシュ通知を送信

実際には何もエラーなしでコーディングしていますが、私のデバイスでは通知を受け取りませんでした。ありがとう。

static void Main(string[] args) 
    { 
     var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, @"D:\Share\Certificates_Prod.p12", ""); 

     // Create a new broker 
     var apnsBroker = new ApnsServiceBroker(config); 

     // Wire up events 
     apnsBroker.OnNotificationFailed += (notification, aggregateEx) => { 

      aggregateEx.Handle(ex => { 

       // See what kind of exception it was to further diagnose 
       if (ex is ApnsNotificationException) 
       { 
        var notificationException = (ApnsNotificationException)ex; 

        // Deal with the failed notification 
        var apnsNotification = notificationException.Notification; 
        var statusCode = notificationException.ErrorStatusCode; 

        Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}"); 

       } 
       else 
       { 
        // Inner exception might hold more useful information like an ApnsConnectionException   
        Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}"); 
       } 

       // Mark it as handled 
       return true; 
      }); 
     }; 

     apnsBroker.OnNotificationSucceeded += (notification) => { 
      Console.WriteLine("Apple Notification Sent!"); 
     }; 

     // Start the broker 
     apnsBroker.Start(); 

     apnsBroker.QueueNotification(new ApnsNotification 
     { 
      DeviceToken = "58f0f386003a4b7be..................................", 
      Payload = JObject.Parse("{\"aps\":{\"badge\":7}}") 
     }); 

     // Stop the broker, wait for it to finish 
     // This isn't done after every message, but after you're 
     // done with the broker 
     apnsBroker.Stop(); 
    } 
+0

あなたはどんな問題を抱えていますか?あなたのメッセージが送信されたことを確認するための読書に対する応答はありませんか?また、int []は何であるか?HexValue = new int [] {0x00,0x0,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0A、0x0B 、0 .... 'なぜそれほど多くの' 0x00'? –

+0

私は通知を受け取っていませんでした。HexStringToByteArrayの機能に関する提案はありますか? – user3721070

+0

はい、私は答えに投稿しました –

答えて

0

レガシーAPIを使用しています。あなたがそれを使用し続けることを望むならば、それはhereに5年間の完全なC#散歩があります。

アップルは現在http/2でAPNをサポートしています。独自のコードを書く代わりに、低レベルのAPIとエラー処理の面倒を見るPushSharpのような既存のライブラリを見てください。

// Configuration (NOTE: .pfx can also be used here) 
var config = new ApnsConfiguration (ApnsConfiguration.ApnsServerEnvironment.Sandbox, 
    "push-cert.p12", "push-cert-pwd"); 

// Create a new broker 
var apnsBroker = new ApnsServiceBroker (config); 

// Wire up events 
apnsBroker.OnNotificationFailed += (notification, aggregateEx) => { 

    aggregateEx.Handle (ex => { 

     // See what kind of exception it was to further diagnose 
     if (ex is ApnsNotificationException) { 
      var notificationException = (ApnsNotificationException)ex; 

      // Deal with the failed notification 
      var apnsNotification = notificationException.Notification; 
      var statusCode = notificationException.ErrorStatusCode; 

      Console.WriteLine ($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}"); 

     } else { 
      // Inner exception might hold more useful information like an ApnsConnectionException   
      Console.WriteLine ($"Notification Failed for some unknown reason : {ex.InnerException}"); 
     } 

     // Mark it as handled 
     return true; 
    }); 
}; 

apnsBroker.OnNotificationSucceeded += (notification) => { 
    Console.WriteLine ("Apple Notification Sent!"); 
}; 

// Start the broker 
apnsBroker.Start(); 

foreach (var deviceToken in MY_DEVICE_TOKENS) { 
    // Queue a notification to send 
    apnsBroker.QueueNotification (new ApnsNotification { 
     DeviceToken = deviceToken, 
     Payload = JObject.Parse ("{\"aps\":{\"alert\":\"" + "Hi,, This Is a Sample Push Notification For IPhone.." + "\",\"badge\":1,\"sound\":\"default\"}}") 
    }); 
} 

// Stop the broker, wait for it to finish 
// This isn't done after every message, but after you're 
// done with the broker 
apnsBroker.Stop(); 
+0

最後に私はあなたの提案に従って、代わりにPushSharpへの私のコーディングリファレンスを更新するが、まだ何も起こらなかった、 ?ありがとう。 – user3721070

0

HexStringToBytesの変換機能が間違っています。私も完全にクリーンなものをお勧めします

int[] HexValue = new int[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; 

:それがあるべき

int[] HexValue = new int[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; 

:それは間違った場所にいくつかの0x00値を持っています。

public static byte[] HexStringToByteArray(string Hex) 
{ 
    if(1 == (Hex.length&1)) throw new Exception("Hex string cannot have an odd number of characters"); 
    return Enumerable.Range(0, hex.Length <<1) 
     .Select(x => Convert.ToByte(hex.Substring(x << 1, 2), 16)) 
     .ToArray(); 
} 
+0

ありがとう〜、私はあなたの提案を試みたが、まだ動作しません、まだ通知を受けていません – user3721070

0

問題、それは、私がJObject.ParseにペイロードJSONを更新し、空のメッセージを許可していませんAPNSのように見える固定( "{\" APS \ ":{\" 警告\ ":\" joetheman \」、あなたのアプリのカスタムメッセージ\ "、\" id \ ":1234}")

それは私のために働いています:\ "サウンド\":\ "デフォルト\"} \ "メッセージ\":\ "

関連する問題