我成功地在我的设备上接收到警报类型的推送通知。
1. Active State OR App在前台
正在调用应用程序的 didReceiveRemoteNotification 方法。在这里我可以访问收到的通知消息。
2. In-Active State OR App在后台
推送通知的消息显示在带有“查看”和“关闭”按钮的警报框中。
一种。单击“查看”按钮后,将调用 didReceiveRemoteNotification 方法。我再次可以访问收到的通知消息。
湾。单击“关闭”按钮后,消息将消失。在这种情况下,我没有关于最后收到的推送通知的任何处理程序。
3. 应用不在后台或应用未运行
与案例 2 相同。
4. iPhone处于 sleep 模式
警报显示有消息,但没有“查看”或“关闭”按钮。
一种。在 UI 上,它将显示“Slide to View”。如果用户与手机交互,它将打开应用程序。我可以访问收到的通知消息。
湾。如果用户不进行交互并允许手机进入休眠模式或手动将手机置于 sleep 模式,则下次 iOS 会显示“滑动解锁”消息。在这里,我没有任何最后一个推送通知的处理程序。
如何访问案例 2.b 和 4.b 的最后一个推送通知,是否有任何我缺少实现的最佳调用方法。
编辑 1:下面是我的 appDelegate 代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[Test1ViewController alloc] initWithNibName:@"Test1ViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
// For PUSH NOTIFICATION
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
}
}
return YES;
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
// Received Notification at here ....
// Now based on response further to do ...
}
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"My token is: %@", deviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
谢谢,
J61
最佳答案
操作系统会处理角标(Badge)。但是,如果用户关闭了您的推送通知,您的应用程序可以查看服务器上的消息并在错过任何用户关闭的通知时以适当的方式处理它。
取自 here ,这是您可以处理通知的方式:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// get state
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
// App is in foreground
} else {
// App is suspended
}
application.applicationIconBadgeNumber = 0;
}
编辑:
如果您想自动增加您的角标(Badge)编号,您需要自己跟踪计数。您可以在您的服务器上执行此操作。如果您的推送消息不包含角标(Badge)计数,iOS will remove it from your application .
关于iphone - 访问上次收到的已关闭/忽略的推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257076/