获得PN但是应用程序:应用程序didReceiveRemoteNotification:选择应用程序图标时不会触发

Jim*_*aya 9 xcode objective-c apple-push-notifications

我看到了推送通知的特殊行为,并且想知道是否有人对我做错了什么或应该做什么都有任何建议.

我的application:(UIApplication*)application didReceiveRemoteNotification:写作如下:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
} 
Run Code Online (Sandbox Code Playgroud)

如您所见,我并不担心应用程序的状态.每当我得到PN时,我只想记录一条消息.

我的设置是根据Apple的文档,我可以收到推送通知.

以下是PN进入时的预期行为:

  • 应用程序在后台,我点击通知:我可以在通知中心看到通知.点击通知,应用程序到达前台,我可以看到上面的方法被调用.
  • 应用程序处于活动状态且已处于前台:我可以看到上面的方法被调用.

现在,以下是我所看到的特殊行为:

  • PN进来.在通知中查看,请参阅应用程序图标上的徽章.我点击应用程序图标 - 而不是通知:在这个例子中,我发现上面的方法没有被调用.我原以为它被称为......

以前有人见过这种行为吗?这应该发生什么?我在Apple文档中看不到有关此内容的任何内容......此外,还有办法解决这个问题吗?

小智 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
        }
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)