在应用未运行iPhone时获取推送通知

she*_*law 2 iphone push sandbox apple-push-notifications

我正在开发一个涉及推送通知的iPhone应用程序.正如我在许多文档和教程中看到的那样,它建议用in注册推送通知

application:(UIApplication *)application 
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)

如下:

- (BOOL)application:(UIApplication *)application 
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{   
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeBadge|  UIRemoteNotificationTypeSound]; 

    ...
} 
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果应用程序没有运行(即使在后台),当推送到来时,它无法处理推送消息,但如果我再次从通知区域使用推送消息并再次午餐应用程序,我可以得到我的留言

我需要做些什么来让我的应用程序获得推送消息,即使它第一次吃午饭?

war*_*enm 7

您可能会混淆注册和接收通知的概念.registerForRemoteNotificationTypes:在第一次调用方法之前,应用程序无法接收推送通知,因为此方法首先提供用于发送推送通知的推送令牌.

因此,您必须谈论在可以交付的两种不同情况下接收通知:初始应用程序启动时以及程序执行期间.

为了处理第一种类型的通知,您必须检查options发送到的字典application:didFinishLaunchingWithOptions:.以下代码显示如何将启动时收到的通知路由到在应用程序已运行时推送通知到达时调用的委托方法.

将其放在您的application:didFinishLaunchingWithOptions:覆盖中:

NSDictionary *pushNotificationPayload = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(pushNotificationPayload) {
    [self application:application didReceiveRemoteNotification:pushNotificationPayload];
}
Run Code Online (Sandbox Code Playgroud)