2014-04-04 9 views
7

Moja aplikacja jest w stanie skutecznie zarejestrować powiadomień push, ale chciałbym, aby przenieść alert pop-up do innego obszaru aplikacjiCzy mogę zarejestrować się, aby otrzymywać powiadomienia push poza AppDelegate.m?

Gdybym realizować ten sam kod z AppDelegate.m do innego ekranu, Other.m, z moja aplikacja nigdy nie rejestruje:

-(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"); 
} 

Gdybym umożliwić didRegisterForRemoteNotificationsWithDeviceToken w moim AppDelegate.m instancja metody AppDelegate.m jest wywoływana z mojego Other.m, ale to nie jest jak chcę to do pracy.

Wszelkie pomysły i sugestie będą mile widziane.

Odpowiedz

13

Tak, oczywiście.

Możesz zarejestrować się gdziekolwiek chcesz z użyciem

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

ale didRegisterForRemoteNotificationsWithDeviceToken: deviceToken jest dostępna tylko w AppDelegate

+0

Czy istnieje sposób, aby Other.m dowiedzieć się, czy rejestracja się powiedzie, czy nie? – Chris

+0

Możesz użyć NSNotificationCenter do uruchomienia rejestru remotenotification powodzeniem lub awarii w dowolnym ViewController – Erhan

+0

Czy to musi być wykonane w głównej kolejce? – sudo

0
-(void)application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken 

Jest to metoda protokół protokołu UIApplicationDelegate, więc zostanie on wywołany w [UIApplication sharedApplication] .delegate. Domyślnie jest to AppDelegate.

0

Przyjęta odpowiedź została uznana za przestarzałą w systemie iOS 8.0. Poniższy kod Swift działa dla iOS 9.0:

let notificationSettings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories: nil) 
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)