2011-07-18 6 views

答えて

14

通知データはapplication:didReceiveRemoteNotification:にあなたのアプリに配信されます。 applicationDidBecomeActive:で処理したい場合は、application:didReceiveRemoteNotification:に保存して、applicationDidBecomeActiveに再度読んでください。

+0

ていますが、アプリケーションに通知を受信したとき何が起こる:didReceiveRemoteNotificationとアプリケーションがフォアグラウンドにある、applicationDidBecomeActiveが呼び出されないことを意味しています。 –

+3

'application:didReceiveRemoteNotification:'では、 ' - [UIApplication applicationState]'にあなたのアプリがすでにフォアグラウンドにあるかどうかを調べることができます。そうであれば、ただちに通知を処理してください。 –

0

アプリがbackground状態の場合、プッシュ通知を受信して​​タップすると、アプリはapplication:didFinishLaunchingWithOptions:で呼び出され、application:didReceiveRemoteNotification:ではなく呼び出されます。

プッシュ通知ペイロードはapplication:didFinishLaunchingWithOptions:からlaunchOptions辞書にアクセスできます。私はこれが誰かのために役に立つことを願っています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; 
    } 
} 

+0

これは正しいアプリケーションではありません:didFinishLaunchingWithOptions:アプリケーションがバックグラウンドのときに呼び出されません。これは、アプリケーションの起動時にのみ呼び出されます。あなたが言っていることは完全にオポジットです。まずはapplicationと呼ばれます:didReceiveRemoteNotification:そして次にapplicationDidBecomeActive: –

1

私はプッシュを管理するには、このコードを使用します。

ハッピーコーディング。

2

スウィフトバージョン:これを復活させるために申し訳ありません

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> { 
    } 
} 
関連する問題