当应用程序在iOS 11中处于后台时,未收到推送通知

时间:2018-04-11 07:05:51

标签: objective-c xcode ios11

我正在使用UNUserNotificationCenter在iOS中发送推送通知。

当App处于前台状态时,我能够收到通知。但是当应用程序处于后台状态时,不会收到通知。每当应用程序进入前台状态时,才会收到通知。

注册远程通知:

render() {
    let data = this.props.data;
    return (
        <div className='container'>
            <table>
                <thead>
                    <tr>
                        <th>iD</th>
                        <th>First name</th>
                        <th>Last name</th>
                        <th>Birth date</th>
                        <th onClick={() => {data.sort()}}>Company</th>
                        <th>Note</th>
                    </tr>
                </thead>
                <tbody>
                    {data.map((user) => {
                        return (
                            <tr key={user.id}>
                                <td className="number">{user.id}</td>
                                <td className="firstname">{user.firstName}</td>
                                <td className="lastname">{user.lastName}</td>
                                <td className="date">{user.dateOfBirth}</td>
                                <td className="company">{user.company}</td>
                                <td className="note">{user.note}</td>
                            </tr>
                        );
                    })}
                </tbody>
            </table>
        </div>
    );
}

当应用处于前台模式时,会调用此方法:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
    [UNUserNotificationCenter currentNotificationCenter].delegate = self;
    [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
        if( !error ){
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
            });
        }
        else{
            NSLog( @"Push registration FAILED" );
            NSLog( @"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );
            NSLog( @"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );
        }
    }];
}
else {
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

但此方法无法在后台模式下工作。 我提到了一些StackOverflow问题,但无法解决问题。 在iOS版本11中有什么要添加的吗?

1 个答案:

答案 0 :(得分:1)

如果是远程通知,则在app delegate中调用此方法:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
//Handle notification here!
    }