Apple推送通知无法正常工作

时间:2014-11-10 11:41:43

标签: ios objective-c xcode apple-push-notifications

当应用处于后台或被杀时,我遇到接收推送通知的问题。当应用处于前台时,会调用didReceiveRemoteNotification:并且应用获取推送通知。但是,当应用程序处于后台或被杀死,并且推送通知到达设备时,即使应用程序已为徽章,声音和警报设置UIUserNotificationSettings,也只能听到声音,但不显示横幅(在'设置&#中39; app一切都已启用。)

如果我没有错误didReceiveRemoteNotification:适用于前景和背景状态,如果应用根本没有运行,并且用户触摸通知的横幅广告,则会收到通知信息didFinishLaunchingWithOptions:

所以问题是:为什么didReceiveRemoteNotification:无法在后台工作?为什么当应用在后台时,通知的横幅广告没有显示?

4 个答案:

答案 0 :(得分:0)

关于在后台接收: 确保您的有效负载中包含content-available字段:

{
"alert":"",
"badge":"0",
"content-available":"1",
"sound":""
}

有关详细信息,请查看此帖子: Apple Push Notification in Background Issue

答案 1 :(得分:0)

didReceiveRemoteNotification:方法仅在您的应用处于前台时有效,如果您的应用未运行,则需要检查didFinishLaunchingWithOption,如

     if (launchOptions) { //launchOptions is not nil
    NSDictionary *userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];

  NSLog(@"%@",userInfo);
 }

答案 2 :(得分:0)

1)为什么didReceiveRemoteNotification:不在后台工作

这样的行为很好,didReceiveRemoteNotification:不会在后台调用。取而代之的是,在didFinishLaunchingWithOptions:中,应检查应用是否因推送通知到达而启动:

NSDictionary *aPushNotification = [launchOptions valueForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if(aPushNotification) {
    // Do something with push's payload
}

2)为什么当应用处于后台时未显示通知的横幅

这是因为推送通知的有效负载

中缺少“警报”字段

答案 3 :(得分:0)

我遇到了类似的问题所以我使用.. 接收通知

  

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

并且还要正确检查您的有效负载,如果您在推送通知到达时出现wana,它应该包含警报。