如何在applicationDidBecomeActive上访问远程推送通知数据?

时间:2011-07-18 11:48:36

标签: iphone objective-c cocoa-touch nsnotifications

当应用程序在后台时收到远程推送通知时,应用程序会输入applicationDidBecomeActive。从那里,我如何从通知中访问数据的NSDictionary?

4 个答案:

答案 0 :(得分:15)

通知数据会在application:didReceiveRemoteNotification:中传送到您的应用。如果您要在applicationDidBecomeActive:中处理它,则应将其存储在application:didReceiveRemoteNotification:中,然后在applicationDidBecomeActive中再次阅读。

答案 1 :(得分:2)

Swift版本:

var dUserInfo: [NSObject : AnyObject]?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// code...

if let info = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] {
        dUserInfo = info
    }

    return true
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    dUserInfo = userInfo
}

func applicationDidBecomeActive(application: UIApplication) {
    // code...

    self.yourAction(dUserInfo)
}

func yourAction(userInfo: [NSObject : AnyObject]?) {
    if let info = userInfo?["aps"] as? Dictionary<String, AnyObject> {
    }
}

答案 2 :(得分:1)

我使用此代码来管理推送:

在AppDelegate

@implementation AppDelegate{
    NSDictionary *dUserInfo; //To storage the push data
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //Check for options
    if (launchOptions != nil)
    {
        //Store the data from the push.
        dUserInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if (dUserInfo != nil)
        {
            //Do whatever you need
        }
    }

    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{   
    //Data from the push.
    if (dUserInfo != nil)
    {
        //Do whatever you need
    }
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //Store the data from the push.
    if (userInfo != nil)
    {
        dUserInfo = userInfo;
    }
}

我希望这对某人有用。

快乐的编码。

答案 3 :(得分:0)

如果您的应用处于background状态时收到推送通知并点按,则会使用application:didFinishLaunchingWithOptions:而不是application:didReceiveRemoteNotification:来调用该应用。

推送通知有效负载可以在application:didFinishLaunchingWithOptions:字典launchOptions中访问。

相关问题