2011-07-18 40 views

Trả lời

14

Dữ liệu thông báo được gửi tới ứng dụng của bạn theo số application:didReceiveRemoteNotification:. Nếu bạn muốn xử lý nó trong applicationDidBecomeActive: bạn nên lưu trữ nó trong application:didReceiveRemoteNotification: và đọc lại nó trong applicationDidBecomeActive.

+0

Xin lỗi vì đã làm sống lại này, nhưng những gì xảy ra khi bạn nhận được thông báo về ứng dụng: didReceiveRemoteNotification và ứng dụng của bạn là ở mặt trước, có nghĩa là applicationDidBecomeActive sẽ không được gọi. –

+3

Trong 'application: didReceiveRemoteNotification:' bạn có thể truy vấn '- [UIApplication applicationState]' để tìm hiểu xem ứng dụng của bạn đã có ở nền trước chưa. Nếu đó là sau đó chỉ cần xử lý thông báo ngay lập tức. –

0

Nếu ứng dụng của bạn ở trạng thái background khi nhận được thông báo đẩy và nhấn, ứng dụng sẽ được gọi với application:didFinishLaunchingWithOptions: chứ không phải application:didReceiveRemoteNotification:.

Tải trọng thông báo đẩy có thể được truy cập trong application:didFinishLaunchingWithOptions: từ launchOptions từ điển.

+0

Đây không phải là ứng dụng chính xác: didFinishLaunchingWithOptions: không được gọi khi ứng dụng ở chế độ nền, điều này chỉ được gọi khi ứng dụng khởi động. những gì bạn đang nói là hoàn toàn oposite, đầu tiên nó sẽ được gọi là ứng dụng: didReceiveRemoteNotification: và sau đó applicationDidBecomeActive: –

1

tôi sử dụng mã này để quản lý việc đẩy mạnh:

Trong 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; 
    } 
} 

Tôi hy vọng điều này sẽ có ích cho một ai đó.

Mã hóa vui vẻ.

2

Swift phiên bản:

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> { 
    } 
} 
Các vấn đề liên quan