这是一个令我头疼的问题。我们正在开发一个需要Push Notifications的跨平台应用程序。我们有一台服务器同步每个应用程序,如果应用程序没有在一台设备上运行,我们会在需要时通知后者。推送在另一个平台上正常运行。
奇怪的是:如果最近打开了应用程序,通知效果很好。但几个小时后,服务器需要发送至少两个通知(如果不是更多),然后我才能在设备上收到一个通知。如果应用程序最近已经打开,那么一切都很好。
问题可能来自:
- 服务器端。我们的服务器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的服务器的代码片段?我们应该更多地在服务器端定位我们的搜索吗?
非常感谢。
皮尔
修改
原来是一个服务器问题。 Apple建议保持与其服务器的开放连接,以限制连接/断开连接请求的数量。我们试图每次打开一个,现在它正常工作。
答案 0 :(得分:0)
对于那些可能感兴趣的人来说,这是一个服务器问题。 Apple建议我们保持连接打开以避免过多的连接请求。
我不确定这个API是如何工作的,但是我们试图偶尔打开它(如果不是每个消息),它现在就像魅力一样。上面的应用程序配置没有错。
干杯