2014-04-04 18 views
7

Ứng dụng của tôi có thể đăng ký thành công cho thông báo đẩy nhưng tôi muốn để di chuyển các cảnh báo pop-up đến một khu vực khác nhau của ứng dụngTôi có thể đăng ký thông báo đẩy bên ngoài AppDelegate.m?

Nếu tôi thực hiện cùng mã từ AppDelegate.m đến một màn hình khác nhau, Other.m, của ứng dụng của tôi, nó không bao giờ đăng ký:

-(void)buttonTapped { 
    // Register for Push Notifications 
    UIRemoteNotificationType notifyTypes = (UIRemoteNotificationTypeAlert |      UIRemoteNotificationTypeSound | 
UIRemoteNotificationTypeBadge); 

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notifyTypes]; 
} 


#pragma mark - APNS Functions 
-(void)application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken { 
    NSLog(@"didRegisterForRemoteNotifications - 1"); 
} 


-(void)application:application didFailToRegisterForRemoteNotificationsWithError:error { 
    NSLog(@"didFailToRegisterForRemoteNotifications"); 
} 

Nếu tôi cho phép didRegisterForRemoteNotificationsWithDeviceToken trong AppDelegate.m tôi, AppDelegate.m dụ của phương pháp này được gọi từ Other.m của tôi, nhưng đó không phải là cách tôi muốn điều này để làm việc.

Mọi ý tưởng hoặc đề xuất sẽ được đánh giá cao.

Trả lời

13

Có, tất nhiên.

Bạn có thể đăng ký bất cứ nơi nào bạn muốn bằng cách sử dụng

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
    (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

nhưng didRegisterForRemoteNotificationsWithDeviceToken: deviceToken chỉ có sẵn trong appdelegate

+0

có cách nào khác để biết liệu đăng ký thành công hay không thành công? – Chris

+0

Bạn có thể sử dụng NSNotificationCenter để kích hoạt đăng ký remotenotification thành công hoặc thất bại trong bất kỳ ViewController – Erhan

+0

Điều này có phải được thực hiện trên hàng đợi chính không? – sudo

0
-(void)application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken 

Đây là phương pháp giao thức của giao thức UIApplicationDelegate, vì vậy nó sẽ được kích hoạt trên [UIApplication sharedApplication] .delegate. Đây là AppDelegate theo mặc định.

0

Câu trả lời được chấp nhận không được chấp nhận trong iOS 8.0. Theo mã Swift hoạt động cho iOS 9.0:

let notificationSettings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories: nil) 
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings) 
Các vấn đề liên quan