【问题标题】:iOS: Handling Remote (push) NotificationsiOS:处理远程(推送)通知
【发布时间】:2012-09-19 14:00:03
【问题描述】:

我正在尝试使用远程通知处理所有可能的情况。 当应用程序在前台时我很好 - didReceiveRemoteNotification 被调用。 问题是当应用程序处于后台状态时,我收到推送通知。 什么都没有被调用。 当应用回到前台时如何让用户知道他有新的远程通知?

【问题讨论】:

    标签: ios apple-push-notifications


    【解决方案1】:

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

    在这种情况下,在应用程序进入前台之前调用应用程序委托中的didFinishLaunchingWithOptions 方法。您应该使用NSDictionarylaunchOptions来确定应用程序是从通知中心启动还是通过点击图标启动(正常使用)

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

    【讨论】:

    • UIApplicationLaunchOptionsRemoteNotificationKey 实际上是一个定义的常量而不是字符串值
    • 嗨,我有类似的场景,但需要稍作修改,但就像我收到推送通知时一样,应用程序将在后台激活并执行中给出的任务,- (void)application:( UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo ,但在用户点击通知之前,我的应用程序不会激活。那么,当应用程序处于后台时,我将如何完成这项工作?有谁知道这个的解决方案吗?
    【解决方案2】:

    看看编程指南:

    如果点击操作按钮(在运行 iOS 的设备上),系统将启动应用程序并且应用程序调用其委托的 application:didFinishLaunchingWithOptions: 方法(如果已实现);它传入通知负载(用于远程通知)或本地通知对象(用于本地通知)。

    【讨论】:

    • 文档说如果应用程序没有在前台运行,这是处理,“死”和后台没有区别。
    • The user launched the application in response to the arrival of a remote notification. In this case, the dictionary contains the notification payload dictionary described in the application:didReceiveRemoteNotification: method. (Key: UIApplicationLaunchOptionsRemoteNotificationKey)
    • @Tom 这是正确的,但是 application:didFinishLaunchingWithOptions: 仅在应用程序首次启动时调用,这并不能解决应用程序在后台时,然后通过点击启动的问题通知中心的按钮。
    【解决方案3】:

    当然,如果您的应用在后台,则不会有任何调用...

    如果您的应用没有启动(甚至没有在后台暂停),

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

    将包含通知负载(键 UIApplicationLaunchOptionsRemoteNotificationKey):

    NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
    

    【讨论】:

    • 如果在后台 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多