这是一个让我非常头疼的问题。我们正在开发一个需要推送通知的跨平台应用程序。我们有一个服务器同步每个应用程序,如果应用程序没有在一个设备上运行,我们会在需要时通知后者。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 建议保持与其服务器的开放连接以限制连接/断开连接请求的数量。我们尝试每次打开一个,现在它工作正常。