3

我使用APNS Sharp庫進行蘋果推送通知。我從Here下滑。我使用APNS銳庫提供的樣本測試程序,沒有任何修改。
它只是不發送任何通知,直到我把斷點放在該行的代碼。 如果我把斷點。我只是工作fine.is這種預期的行爲,或者我做錯了什麼。而且我也沒有得到任何例外。謝謝你的幫助。 這裏是代碼APNS尖銳的蘋果推送通知

static void Main(string[] args) 
{ 
    bool sandbox = true; 
    string testDeviceToken = "Token"; 
    string p12File = "apn_developer_identity.p12"; 
    string p12FilePassword = "yourpassword"; 
    int sleepBetweenNotifications = 15000; 
    string p12Filename = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, p12File); 
    NotificationService service = new NotificationService(sandbox, p12Filename, p12FilePassword, 1); 
    service.SendRetries = 5; 
    service.ReconnectDelay = 5000; //5 seconds 
    service.Error += new NotificationService.OnError(service_Error); 
    service.NotificationTooLong += new NotificationService.OnNotificationTooLong(service_NotificationTooLong); 
    service.BadDeviceToken += new NotificationService.OnBadDeviceToken(service_BadDeviceToken); 
    service.NotificationFailed += new NotificationService.OnNotificationFailed(service_NotificationFailed); 
    service.NotificationSuccess += new NotificationService.OnNotificationSuccess(service_NotificationSuccess); 
    service.Connecting += new NotificationService.OnConnecting(service_Connecting); 
    service.Connected += new NotificationService.OnConnected(service_Connected); 
    service.Disconnected += new NotificationService.OnDisconnected(service_Disconnected); 
    Notification alertNotification = new Notification(testDeviceToken); 
    alertNotification.Payload.Alert.Body = "Testing {0}..."; 
    alertNotification.Payload.Sound = "default"; 
    alertNotification.Payload.Badge = i; 
    if (service.QueueNotification(alertNotification)) 
     Console.WriteLine("Notification Queued!"); 
    else 
     Console.WriteLine("Notification Failed to be Queued!"); 
    Console.WriteLine("Cleaning Up..."); 

    service.Close();// if i dont put a break point in here, it simply does not send any notification 

    service.Dispose(); 

} 

我希望我的問題是清楚的...
更新:我堅持here.please任何一個能幫助我。

+0

只是檢查:你有你的證書,對吧?你的密碼是「yourpassword」嗎?只是想知道這是從這個例子中遺留下來的東西。 – ACBurk 2010-07-06 23:21:30

+0

謝謝ACBurk。是的,我擁有一切。如果我放置斷點,它就可以正常工作。 – Nnp 2010-07-06 23:24:38

回答

2

我發現了這個問題。它在APNS SHARP庫線程工作流程中出錯。

編輯:
我在排隊所有通知後調用此方法。
like
service.start();
這裏是方法

 public void Send() 
    { 
     foreach (NotificationConnection conn in this.notificationConnections) 
     { 
      // Console.Write("Start Sending"); 
      conn.start(P12File, P12FilePassword); 
     } 
    } 
+0

你是什麼意思?什麼錯誤?即時通訊在vb.net使用一些庫代碼來執行此操作。即時獲取「通知排隊」,但通知從未傳遞給設備......這怎麼可能? – 2010-10-27 08:04:34

+1

當你說NotificationService service = new NotificationService()時,它開始另一個從隊列讀取的thred。但在添加任何通知到隊列之前已經終止,因爲沒有通知。有道理>如果你把斷點,那麼listenr線程不會完成,因爲它在等待斷點。 – Nnp 2010-10-27 17:49:07

+0

那麼你是如何解決它的? – 001 2011-06-29 06:53:51

1

我看到了這一點。縱觀NotificationConnection.Close()方法,我發現這個:

//這裏睡,以防止競爭條件 //其中一個通知可以同時工作線程 //是其循環後睡覺排隊,但如果我們在100 ms內設置爲true,則 //在那段時間內排隊的通知不會被取消排隊,因爲由於closing = true,迴路 //將退出; // 250 ms應該有足夠的時間讓循環將所有剩餘的通知排隊 //在我們停止接受以上之後// Thread.Sleep(250);

而在提到的循環中,我發現: Thread.Sleep(500);

在close方法設定睡眠時間爲1000修好了我;) - 從?答案:HTTP://code.google.com/p/apns-sharp/issues/detail ID = 41