打开应用程序时检索 APNS 的通知
Retrieve the APNS's notification when open app
不知道有没有人遇到过这种情况,大致是这样的:
我已经完成了 APNS,应用确实收到了通知。当我从通知(调用 appDidReceiveRemoteNotification:
)打开应用程序时,它工作正常。
奇怪的是,当应用程序在后台运行时,它会收到一条通知(显示在通知框中)。当我通过点击图标(不是通知)打开应用程序时,调试器没有在 appDidReceiveRemoteNotification:
或 appDidFinishLaunchWithOption:
处停止,所以我的通知没有保存。当我再次下拉通知框并点击通知时,调试器按预期停止在 appDidReceiveRemoteNotification:
。如何通过在应用程序图标上打开应用程序来更新通知?
** 编辑 **
感谢 abhinav,我意识到我误用了这个方法。我应该使用
- (void)applicationWillEnterForeground:(UIApplication *)iApplication // Or
- (void)applicationDidBecomeActive:(UIApplication *)iApplication.
但是,我的应用程序设计为显示服务器可以向用户发送消息(关于更新、新闻...)。代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//....
if (launchOptions) {
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary) {
[Message saveMessage:dictionary];
NSLog(@"Launched from push notification: %@", dictionary);
}
}
//....
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// Save message to coredata.
[Message saveMessage:userInfo];
// Perform seggue, showing inbox viewcontrollers here.
}
但是后台打开应用时使用的两种方法都没有提供通知字典,而且我的老板要求我在后台打开应用时更新核心数据,我怎么办?还是我应该告诉我的老板不能被收购?我们不希望用户错过有关更新的通知。
您在此处对通知案例所做的操作没有任何不同。当应用程序在后台并且用户点击应用程序图标时,无论是否收到推送通知,您都会通过以下方法获得回调。
- (void)applicationWillEnterForeground:(UIApplication *)iApplication
- (void)applicationDidBecomeActive:(UIApplication *)iApplication
application:didFinishLaunchingWithOptions:
是一种在应用程序启动时调用的方法 - 第一次触发或通知触发。 appDidReceiveRemoteNotification:
当应用程序被通知点击唤醒时被调用。
所以,回答你的问题 - 你正在经历自然的 iOS 行为!!!
编辑:
如果我是你,我会去找我的老板并解释 iOS 的工作方式。并礼貌地告诉他不可能。在后台时,除非用户打算查看已发送的通知,否则 iOS 不允许您获取详细信息。
你到底想做什么?如果您想更新应用程序的徽章计数,则只需在 applicationDidBecomeActive 中将应用程序徽章计数设置为 0:
要清除通知面板中的通知,请使用以下代码:-
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
不知道有没有人遇到过这种情况,大致是这样的:
我已经完成了 APNS,应用确实收到了通知。当我从通知(调用 appDidReceiveRemoteNotification:
)打开应用程序时,它工作正常。
奇怪的是,当应用程序在后台运行时,它会收到一条通知(显示在通知框中)。当我通过点击图标(不是通知)打开应用程序时,调试器没有在 appDidReceiveRemoteNotification:
或 appDidFinishLaunchWithOption:
处停止,所以我的通知没有保存。当我再次下拉通知框并点击通知时,调试器按预期停止在 appDidReceiveRemoteNotification:
。如何通过在应用程序图标上打开应用程序来更新通知?
** 编辑 **
感谢 abhinav,我意识到我误用了这个方法。我应该使用
- (void)applicationWillEnterForeground:(UIApplication *)iApplication // Or
- (void)applicationDidBecomeActive:(UIApplication *)iApplication.
但是,我的应用程序设计为显示服务器可以向用户发送消息(关于更新、新闻...)。代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//....
if (launchOptions) {
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary) {
[Message saveMessage:dictionary];
NSLog(@"Launched from push notification: %@", dictionary);
}
}
//....
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// Save message to coredata.
[Message saveMessage:userInfo];
// Perform seggue, showing inbox viewcontrollers here.
}
但是后台打开应用时使用的两种方法都没有提供通知字典,而且我的老板要求我在后台打开应用时更新核心数据,我怎么办?还是我应该告诉我的老板不能被收购?我们不希望用户错过有关更新的通知。
您在此处对通知案例所做的操作没有任何不同。当应用程序在后台并且用户点击应用程序图标时,无论是否收到推送通知,您都会通过以下方法获得回调。
- (void)applicationWillEnterForeground:(UIApplication *)iApplication
- (void)applicationDidBecomeActive:(UIApplication *)iApplication
application:didFinishLaunchingWithOptions:
是一种在应用程序启动时调用的方法 - 第一次触发或通知触发。 appDidReceiveRemoteNotification:
当应用程序被通知点击唤醒时被调用。
所以,回答你的问题 - 你正在经历自然的 iOS 行为!!!
编辑:
如果我是你,我会去找我的老板并解释 iOS 的工作方式。并礼貌地告诉他不可能。在后台时,除非用户打算查看已发送的通知,否则 iOS 不允许您获取详细信息。
你到底想做什么?如果您想更新应用程序的徽章计数,则只需在 applicationDidBecomeActive 中将应用程序徽章计数设置为 0:
要清除通知面板中的通知,请使用以下代码:-
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];