且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

CloudKit推送通知,应用程序在后台运行

更新时间:2023-02-26 21:18:01

当你去你的应用程序设置的功能,你有背景模式启用远程通知?

请参阅此屏幕截图:
CloudKit推送通知,应用程序在后台运行

除此之外,你注册的所有通知类型是这样的:

  application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes:.Alert | .Badge | .Sound,类别:无))
    application.registerForRemoteNotifications()

而在你的订阅,你发了一个CKNotificationInfo或alertBody alertLocalizationKey?如果你这样做,那么你会得到已经从操作系统的通知,你不需要设置一个本地通知。

更新:由于波顿下面提到的,这个问题是由alertBody灌装解决

When iOS8.2-app is running in the background, it does not receive any push notification,

while if it is running on the foreground, it receives the push notifications fine.

Any idea what is going on ?

Running on CloudKit Development mode, the subscription is for add,edit,and remove, and using the following didReceiveRemoteNotification:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Push received.");

    NSDictionary * apsDict = [userInfo objectForKey:@"aps"];

    NSString * alertText = [apsDict objectForKey:@"alert"];

    //TODO: get the record information from the notification and create the appropriate message string.

    if(application.applicationState == UIApplicationStateActive) {
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Notification" message:alertText delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
        [alert show];
    } else {

        if([application currentUserNotificationSettings].types & UIUserNotificationTypeAlert) {
            UILocalNotification * localNotification = [[UILocalNotification alloc] init];
            localNotification.alertBody = NSLocalizedString(@"alert body", nil);;
            localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:2];
            [application presentLocalNotificationNow:localNotification];
        }
    }

    completionHandler(UIBackgroundFetchResultNoData);
}

When you go to your app settings capabilities, do you have remote notifications enabled for background modes?

See this screenshot:

Besides that, did you register for all notification types like this:

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Badge | .Sound, categories: nil))
    application.registerForRemoteNotifications()

And in your subscription, do you send an alertBody or alertLocalizationKey for the CKNotificationInfo? If you do that, then you will already get a notification from the OS and you don't need to setup a local notification.

Update: As Porton mentioned below, this issue was solved by filling in the alertBody.