2012-09-19 51 views
2

我试图处理所有可能的情况下,与远程通知。 我很好,当在前台的应用程序 - didReceiveRemoteNotification被调用。 问题是当应用程序在后台状态,并且我收到推送通知。 什么都不叫。 如何让应用程序回到前台时让用户知道他有新的远程通知?的iOS:处理远程(推送)通知

回答

6

为你截取的推送通知的唯一方法是,当用户点击在通知中心(或当滑动从锁定屏幕应用程序图标)的通知。

在这种情况下,应用前景走在应用程序委托didFinishLaunchingWithOptions方法之前被调用。您应该使用NSDictionarylaunchOptions来确定应用是否已经从通知中心或通过点击图标(正常使用)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSDictionary *pushDic = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
    if (pushDic != nil) { 
     NSLog(@"Notification"); 
    } 
    else { 

    } 
} 
+5

的UIApplicationLaunchOptionsRemoteNotificationKey实际上是一个定义的常量不是字符串值 – Stas

+0

您好,我有一个类似的情况,但稍微修整所需要的,但像当我得到推送通知,应用程序将获得活跃在后台做给出了任务, - ( void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo,但是我的应用程序在用户点击通知之前不会激活。那么,如何在应用程序处于后台时完成此操作?剂量谁知道这个解决方案? – Moxarth

-3

随便看看进入编程指南:

如果操作按钮被窃听(运行iOS的设备上),系统启动应用程序和应用程序调用其委托的application:didFinishLaunchingWithOptions:方法中(如果实现);它传入通知有效内容(用于远程通知)或本地通知对象(用于本地通知)。

+0

应用中:didFinishLaunchingWithOptions称为只有当应用程序是死了...... – Jim

+0

的文件说,这是处理如果应用程序没有在前台运行,没有“死”与背景之间进行区分。 – Tom

+0

'用户启动应用程序以响应远程通知的到来。在这种情况下,该字典包含application:didReceiveRemoteNotification:方法中描述的通知有效载荷字典。 (注释:UIApplicationLaunchOptionsRemoteNotificationKey)' – ohr

-3

当然,如果你的应用程序在后台,会有什么所谓的启动。 ..

如果您的应用程序没有启动(即使不悬浮在后台),该

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

将包含该通知的有效载荷(关键UIApplicationLaunchOptionsRemoteNotificationKey):

NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; 
+2

如果是在后台 - (空)应用程序:(UIApplication的*)应用程序didReceiveRemoteNotification:(NSDictionary的*)用户信息被调用。 – Sabobin