在 iOS 中接收推送消息

Receive Push Messages in iOS

要在iOS中接收推送消息,我使用以下方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler

这个方法在我的AppDelegate.m中。一切正常。我的问题是,这个方法是否可能不在 AppDelegate 中,而是在其他任何地方?!

不,这是不可能的,因为这是由 iOS 决定的。查看文档 here.

您可以做的是创建一个专用的 class(例如 PushNotificationHandler)来处理您的推送通知并在 application:didReceiveRemoteNotification:fetchCompletionHandler: 中调用它。

使用 NSNotificationCenter,您可以轻松广播您的推送通知:

广播:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSDictionary *userInfo = @{@"localNotification": notification};
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DOMyApplicationDidReceiveLocalNotification"
                                                        object:notification 
                                                      userInfo:userInfo];
}

在需要的地方收听:

[[NSNotificationCenter defaultCenter] addObserverForName:@"DOMyApplicationDidReceiveLocalNotification"
                                                  object:nil
                                                   queue:nil
                                              usingBlock:^(NSNotification *note)
{
    UILocalNotification *localNotification = note.userInfo[@"localNotification"];

   //... 
}];

NSNotificationCenter 提供了多种监听方法,不仅仅是这里展示的基于块的。