接收APNS通知但无法在ios中的设备上显示

接收APNS通知但无法在ios中的设备上显示,ios,objective-c,apple-push-notifications,Ios,Objective C,Apple Push Notifications,各位好,, 我正在尝试如何实现pushnotification。为此,我已经阅读了苹果公司关于pushnotification的官方文件,也阅读了raywenderlich的博客,我非常了解pushnotification的流程。我已经创建了开发和生产证书,配置文件,其工作罚款和推送已成功发送和接收- -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userI

各位好,, 我正在尝试如何实现
pushnotification
。为此,我已经阅读了苹果公司关于pushnotification的官方文件,也阅读了raywenderlich的博客,我非常了解pushnotification的流程。我已经创建了
开发和生产证书,配置文件
,其工作罚款和推送已成功发送和接收-

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
      *** display message in uialertview******
}
但我的问题是,当我的应用程序也是前台和后台应用程序时,我如何才能像其他推送通知一样在设备的顶部显示推送

目前我正在尝试IOS 7.0和XCode 5.1.1版(5B1008)


提前感谢。

当您处于
后台模式时
将根据通知中心的应用程序通知设置显示推送通知。你不必显示ios就能做到这一点

当您处于
前台模式时
将收到通知,并调用
-(void)application:(UIApplication*)application didReceiveMemotentification:(NSDictionary*)userInfo
方法。因此,使用此方法可以获得userinfo。只需NSLog userinfo dictionary,然后您就可以创建顶部带有标签的customview,并像ios默认横幅一样设置动画


希望这能对您有所帮助。

根据苹果的说明,只有当应用程序处于后台模式时,才会显示推送/本地通知。如果通知在应用程序处于前台/活动状态时到达,则您需要手动管理它,因为iOS不会显示默认设计的通知横幅/警报

我只是将我的逻辑放在这里,用于在应用程序处于前台模式时管理通知:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{    
    // check the application state for app is active or not. 
    if (application.applicationState == UIApplicationStateActive)
    {
       // Nothing to do if applicationState is Inactive, the iOS already displayed an alert view.
       UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Receive a Remote Notification" message:[NSString stringWithFormat:@"Your App name received this notification while it was running:\n%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
       [alertView show];
    }

}

首先,通过应用程序中的这些方法检查您是否成功注册到APNS

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
}
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
}
然后在

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSDictionary *Notification = userInfo;

    NSString *title = [(NSDictionary*)[(NSDictionary*)[Notification valueForKey:@"aps"] valueForKey:@"alert"] valueForKey:@"title"];
    NSString *body = [(NSDictionary*)[(NSDictionary*)[Notification valueForKey:@"aps"] valueForKey:@"alert"] valueForKey:@"body"];
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive)
    {
}


else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive || [[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground)
{
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
        localNotification.userInfo = userInfo;
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        localNotification.alertBody = body;
        localNotification.fireDate = [NSDate date];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
 }

}

如果应用程序处于活动状态,请显示UIAlertView。如果不是,则需要显示UILocalNotification。

如果希望接收类似于横幅样式的设备顶部通知,请执行以下步骤

  • 首先,您需要在iOS设备上启动“设置”应用程序

  • 进入后,从选项列表中选择“通知”

  • 下面是支持推送通知的每个应用程序的列表。位于顶部的已被您授予权限

  • 您还可以设置警报样式您可以选择方便地出现在屏幕顶部的横幅,或全弹出式窗口,迫使您在横幅消失之前采取行动。或者你可以选择“无”

  • 有关更多详细信息,请查看此


    希望您能从我的回答中得到一些信息。

    当您的应用程序处于前台时,推送通知不会收到。当您的应用程序处于后台时,请检查通知。你收到推送的设备令牌吗?是的,我收到设备令牌并成功发送推送,我在DidReceiveEmoteNotification中收到推送消息…但我的问题是如何像其他应用程序推送通知一样显示此消息。我想,在你的设备设置->通知中心中,你的应用程序是否显示?是的,它与所有应用程序一起显示推送通知选项..嗨,有没有重播的想法,给你+1。我按照您的步骤操作,默认情况下,“通知”菜单中的“警报”样式为“条幅”,无法显示类似“条幅”样式的“警报”视图。我知道,当应用程序处于后台或未处于活动状态时,通知将以条幅样式显示。当应用程序在前台状态下运行时,你会收到警报式的通知。我不是说我他妈的是真的。你可以在谷歌上研究它@user3140414。谢谢你重播+1……是的,你是对的,在后台状态下,IOS会自动处理,但有可能创建像横幅这样的自定义视图吗库和@user3140414库对您有帮助吗?@user3140414如果您对答案感到满意,那么您可以向上投票和/或将其作为答案接受。愉快的编码。@RoxeN Rmani::向上投票需要15,因为我是堆栈溢出新手,所以没有权限:(:(