IOS设备令牌的Pushsharp 4.0.10“连接错误”

时间:2016-05-24 07:56:22

标签: ios pushsharp

我开发了Windows服务,使用pushsharp库向iOS和Android应用程序发送推送通知。最近我将库从2.xx更新到4.0.10并且GCM通知发送正常但Ios通知没有发送,总是得到“连接错误”我需要向数千个令牌发送通知,所以我循环遍历所有代币和排队。即使是10个令牌也会得到同样的错误。 请告诉我我的代码有什么问题。这是我的代码片段

 public static void SendNotifications(List currentBrandNotications, long brandId)
 {
    byte[] appleCert = null;
    string p12File = @"aps_production_brand" + brandId.ToString().Trim() + ".p12";
    try
    {
        appleCert = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "P12\\" + p12File));               
    }
    catch (Exception ex)
    {
        logger.Debug("P12 certificate is not avilable for BrandId: " + brandId);
    }

    try
    {
        logger.Debug(" Send PushNotifications To Apple :- ");

        if (appleCert != null)
        {
            // Configuration
            var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Production, appleCert, currentBrandNotications[0].P12Password);

            // Create a new broker
            var apnsBroker = new ApnsServiceBroker(config);
            var fbs = new FeedbackService(config);
            // Wire up events
            apnsBroker.OnNotificationFailed += (Notification, aggregateEx) =>
            {
                //ScheduledNotification ScheduledNotification = new InstantPNScheduler.ScheduledNotification();

                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;
                        logger.Debug("Apple Notification Failed: ID=" + apnsNotification.Identifier + " Code=" + statusCode);

                    }
                    else
                    {
                        // Inner exception might hold more useful information like an ApnsConnectionException           
                        logger.Debug(ex.InnerException.ToString());
                    }
                    // Mark it as handled
                    return true;
                });
            };

            apnsBroker.OnNotificationSucceeded += (Notification) =>
            {
                logger.Debug("Apple Notification Sent!");                  
            };

            // Start the broker
            apnsBroker.Start();  

            foreach (ScheduledNotification notification in currentBrandNotications)
                 {                      
                try
                {
                    //logger.Debug("iOS Device token=" + notification.DeviceToken);                                             apnsBroker.QueueNotification(new ApnsNotification
                    {
                           DeviceToken = notification.DeviceToken,
                           Payload = JObject.Parse("{\"aps\":{\"alert\":\"" + notification.Message + "\",\"badge\":1,\"sound\":\"sound.caf\",\"BrandId\":\"" + brandId.ToString() + "\",\"notificationType\":\"Basic\",\"DeviceType\":\"" + notification.DeviceType + "\",\"DeviceToken\":\"" + notification.DeviceToken + "\",\"NotificationId\":\"" + notification.NotificationId + "\"}}")

                        });
                    }
                    Thread.Sleep(800);
                }
                catch (Exception ex)
                {

                    logger.Debug(" SendPushNotificationToApple :- " + ex.Message);
                }
            }
            // 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();
        }

    }
    catch (Exception ex)
    {
        logger.Debug("Error" + ex.Message);
    }
    finally
    {
        //apnsBroker = null;
    }

}

注意:如果我将thread.sleep(800)置于for循环中,那么将发送通知,但是在数千个令牌的情况下它已经太晚了。我需要它没有thread.sleep(800),即使我减少到800毫秒以下,得到相同的异常。 请帮我解决我的代码有什么问题。 任何帮助将不胜感激。

0 个答案:

没有答案