我正在使用推送通知处理一个简单的应用程序,并成功实现了它。当我退出应用程序时,我得到一个推送通知(运行良好)但是当我打开应用程序并尝试从我的服务器(Web应用程序)发送消息时,它不会显示任何弹出消息或通知。我错过了什么吗?这是我在AppDelegate.m上的代码片段
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Let the device know we want to receive push notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
return YES;
}
(void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo{
NSLog(@"Received notification: %@", userInfo);
NSString *messageAlert = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
NSLog(@"Received Push Badge: %@", messageAlert );
[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert];
}
请帮我解决这个问题。感谢。
答案 0 :(得分:5)
当你的应用程序处于活动模式时,你需要将此方法与下面的方法放在Appdelegate类中: -
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
NSString *cancelTitle = @"Close";
NSString *showTitle = @"Show";
NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"My App Name"
message:message
delegate:self
cancelButtonTitle:cancelTitle
otherButtonTitles:showTitle, nil];
[alertView show];
[alertView release];
} else {
//Do stuff that you would do if the application was not active
}
}
同时将didFailToRegisterForRemoteNotificationsWithError
委托用于检查失败原因
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSString *str = [NSString stringWithFormat: @"Error: %@", error];
NSLog(@"%@", str);
}
答案 1 :(得分:0)
您对此代码的期望是什么:[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert];
??
我想你错过了一些基础知识..要提出警报,你应该看看UIAlertView
。 NSNotificationCenter
用于应用程序中的内部数据流。 (观察员模式)
当您的应用程序正在运行时,系统不会自动显示任何警报。您需要从application:didReceiveRemoteNotification:
开始自行处理推送消息。 NSNotificationCenter
和Push Notifications
完全不同。他们不是彼此的一部分。
答案 2 :(得分:0)
如果我正确回忆,Apple会在您的应用运行与否时向不同位置发送推送通知。您只实现了未启动的代码,但没有实现执行期间的部分。