1

这是一个让我非常头疼的问题。我们正在开发一个需要推送通知的跨平台应用程序。我们有一个服务器同步每个应用程序,如果应用程序没有在一个设备上运行,我们会在需要时通知后者。Push 在其他平台上运行良好。

奇怪的是:如果最近打开了应用程序,通知效果很好。但是几个小时后,服务器需要发送至少两个通知(如果不是更多),我才能在设备上收到一个通知。如果该应用程序最近已打开,则一切正常。

问题可能来自:
- 服务器端。我们的服务器 API 在 C# 中,我们使用“APNS Sharp”向 Apple 的服务器发送通知。
- Apple 方面(我猜不太可能)
- iphone 应用程序。但是,为什么我会时不时收到一份呢?我还注意到,有时我会收到通知,但是屏幕上弹出的蓝色气泡会在几秒钟后消失,有时甚至会立即消失。这是我的 App Delegate 中的代码片段:

- (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 建议保持与其服务器的开放连接以限制连接/断开连接请求的数量。我们尝试每次打开一个,现在它工作正常。

4

1 回答 1

0

对于那些可能感兴趣的人,这是一个服务器问题。Apple 建议我们保持连接打开以避免过多的连接请求。

我不太确定这个 API 是如何工作的,但我们尝试偶尔打开它(如果不是针对每条消息),它现在就像一个魅力。上面应用程序的配置没有任何问题。

干杯

于 2012-08-03T08:33:56.703 回答