2012-05-17 26 views
9

Tôi thấy một hành vi đặc biệt với thông báo đẩy của mình và đang tự hỏi liệu có ai có lời khuyên nào về việc tôi đã làm sai hay không.Có PN tuy nhiên ứng dụng: ứng dụng didReceiveRemoteNotification: không được kích hoạt khi biểu tượng ứng dụng được chọn

Tôi có tôi application:(UIApplication*)application didReceiveRemoteNotification: viết như sau:

- (void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo 
{ 
NSLog(@"Received notification: %@", userInfo); 
[self addMessageFromRemoteNotification:userInfo updateUI:YES]; 
} 

Như bạn thấy, tôi không lo lắng về tình trạng của ứng dụng. Tôi chỉ muốn đăng nhập một tin nhắn bất cứ khi nào tôi nhận được một PN.

Thiết lập của tôi theo tài liệu từ Apple và tôi có thể nhận được thông báo đẩy.

Sau đây là những hành vi mong đợi khi một PN do thỏa thuận hợp:

  • App là ở chế độ nền và tôi nhấp vào thông báo: tôi có thể nhìn thấy thông báo trong trung tâm thông báo. Nhấp vào thông báo, ứng dụng đến nền trước và tôi có thể thấy phương thức trên được gọi.
  • Ứng dụng đang hoạt động và đã ở nền trước: Tôi có thể thấy phương thức trên được gọi.

Bây giờ, sau đây là hành vi đặc biệt tôi nhìn thấy:.

  • PN do thỏa thuận hợp Nhìn thấy nó trong các thông báo, thấy huy hiệu vào biểu tượng ứng dụng. Tôi nhấp vào biểu tượng ứng dụng - không phải thông báo: Trong trường hợp này, tôi thấy rằng phương thức trên là không phải là được gọi. Tôi đã chờ nó được gọi là ...

Có ai từng nhìn thấy hành vi này trước đây không? Đây có phải là điều gì sẽ xảy ra không? Tôi không thể thấy bất cứ điều gì trong tài liệu của Apple liên quan đến điều này ... Ngoài ra, sẽ có một cách xung quanh điều này?

Trả lời

2

Nếu ứng dụng không chạy ở chế độ nền, nhưng ban đầu đưa ra từ các thông báo đẩy và bạn có didFinishLaunchingWithOptions: thực hiện, bạn cần phải thực hiện mã của bạn có:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 
    if (launchOptions != nil) { 
     NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
     if (userInfo != nil) { 
      NSDictionary* apsInfo = [userInfo objectForKey:@"aps"]; 
      NSString* custom = [userInfo objectForKey:@"yourCustomPushData"]; 
      // do something with it 
     } 
    } 
    //... 
} 
+0

không - Tôi có cùng một vấn đề , không didfinishlaunchingwithoptions cũng không didreceiveremotenotification được gọi là khi ứng dụng là trong nền và đẩy thông báo đến và bạn quay trở lại ứng dụng khai thác biểu tượng của nó – jab11

2

tôi có hành vi tương tự. Nó khiến tôi phát điên nhưng tôi nghĩ đó là cách iOS hoạt động.

Dưới đây là trích đoạn từ tài liệu về táo. Điều này liên quan đến ứng dụng: didFinishLaunchingWithOptions khi ứng dụng không chạy. Có vẻ như nó giống nhau khi ứng dụng ở chế độ nền/didReceiveRemoteNotification.

"Nếu nút thao tác được nhấn (trên thiết bị chạy iOS), hệ thống sẽ khởi chạy ứng dụng và ứng dụng gọi phương thức ứng dụng của đại biểu: didFinishLaunchingWithOptions: (nếu được triển khai);) hoặc đối tượng thông báo cục bộ (đối với thông báo cục bộ)

Nếu biểu tượng ứng dụng được nhấn vào một thiết bị chạy iOS, ứng dụng sẽ gọi cùng một phương thức nhưng không cung cấp thông tin nào về thông báo." Từ: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

0

MRJ của không được làm việc trong trường hợp của tôi vì vậy tôi cố gắng sau tùy chọn

Nếu ứng dụng không có trong nền bạn nên sử dụng đoạn mã sau

//-------------- check notification when app is come to foreground after apllication get terminated ----------------// 

UILocalNotification *localNotif = 

[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

if (localNotif) { 

    [self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method 


} 
Các vấn đề liên quan