1

這是一個讓我頭痛的問題。我們正在開發一個跨平臺的應用程序,我們需要推送通知。我們有一臺同步每個應用的服務器,如果應用沒有在一臺設備上運行,我們會在需要時通知後者。 Push在其他平臺上工作正常。使用APNS Sharp的APNS問題 - 前幾個通知未送達

奇怪的是:如果最近打開了應用程序,通知效果很好。但幾個小時後,服務器需要發送至少兩個通知(如果不是更多),然後才能在設備上收到一個通知。如果應用程序最近已經打開,那麼一切都很好。

問題可能來自:
- 服務器端。我們的服務器API使用C#,我們使用「APNS Sharp」向Apple的服務器發送通知。
- 蘋果方(不太可能我猜)
- iphone應用程序。但是,爲什麼我會不時收到一封?我還注意到,有時候,我收到通知,但屏幕上彈出的藍色泡泡在幾秒鐘甚至有時立即消失。 這裏是我的代碼在我的應用程序代表一個片段:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    NSLog(@"Registering for remote notifications"); 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
return YES; 
} 

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { 

    NSString * tokenAsString = [[[[devToken description] 
          stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
          stringByReplacingOccurrencesOfString:@" " withString:@""] retain]; 
    [self sendToken:tokenAsString]; 
NSLog(@"enregistré"); 
} 

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { 
    NSLog(@"Error in registration. Error: %@", err); 
} 

下面的函數是我自己的功能設備令牌發送到我們的服務器。不需要顯示這個。
[self sendToken:tokenAsString];

有沒有人聽說過這樣的問題?您是否認爲,基於它可能來自應用程序或Apple服務器的代碼段?我們是否應該更多地在服務器端定位搜索?

非常感謝。

皮埃爾

編輯

原來是服務器的問題。 Apple建議保持與服務器的開放連接以限制連接/斷開請求的數量。我們試圖每次打開一個,現在它正常工作。

+0

有時,在沙箱中推送通知可能需要一段時間才能到達。 – malinois

回答

0

對於那些可能感興趣的人來說,這是一個服務器問題。 Apple建議我們保持連接處於打開狀態以避免連接請求過多。

我不太確定這個API是如何工作的,但我們試圖暫時打開它(而不是每個消息),它現在就像一個魅力。上面的應用程序的配置沒有錯。

乾杯

+0

我可否知道您在服務器中使用了哪種證書? aps_development或aps_production –

+0

我們實際上都有..對於我們的測試/ qa版本和產品版本。 – Pierre

+0

應用商店提交什麼證書我們要使用? –