我看到了推送通知的特殊行为,并且想知道是否有人对我做错了什么或应该做什么有任何建议。
我的application:(UIApplication*)application didReceiveRemoteNotification:
写如下:
- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
}
正如您所看到的,我并不担心应用程序的状态。我只想在收到PN时记录一条消息。
我的设置符合Apple的文档,我可以收到推送通知。
以下是PN进入时的预期行为:
现在,以下是我所看到的特殊行为:
之前有没有人见过这种行为?这应该发生什么?我在Apple文档中看不到有关此内容的任何内容......此外,还有解决方法吗?
答案 0 :(得分:2)
如果该应用未在后台运行,但最初是通过推送通知启动的,并且您已实施 didFinishLaunchingWithOptions:,则需要在那里实施您的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
if (launchOptions != nil) {
NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
if (userInfo != nil) {
NSDictionary* apsInfo = [userInfo objectForKey:@"aps"];
NSString* custom = [userInfo objectForKey:@"yourCustomPushData"];
// do something with it
}
}
//...
}
答案 1 :(得分:2)
我有同样的行为。它让我疯狂,但我认为这就是iOS的工作方式。
以下摘自苹果文档。这是关于应用程序:当应用程序未运行时didFinishLaunchingWithOptions。当应用程序处于background / didReceiveRemoteNotification时,它看起来是一样的。
“如果点击操作按钮(在运行iOS的设备上),系统将启动应用程序并且应用程序调用其委托的应用程序:didFinishLaunchingWithOptions:方法(如果已实现);它传入通知有效负载(用于远程通知)或本地通知对象(用于本地通知)。
如果在运行iOS的设备上轻触应用程序图标,则应用程序会调用相同的方法,但不会提供有关通知的信息。 “ 从: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1
答案 2 :(得分:0)
Mrj's不适用于我的情况所以我尝试了以下选项
如果应用程序不在后台,您应该使用以下代码
//-------------- check notification when app is come to foreground after apllication get terminated ----------------//
UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
[self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method
}