Чтобы попытаться начать с правильной ноги, я искал SO и другие ресурсы все утро для решения этой проблемы.
У меня есть приложение, которое отлично работает с тихими push-уведомлениями на переднем плане, а также со стандартными push-уведомлениями. Возможности установлены как показано нижедо минимума для тестирования, из примера UA:
-(void)receivedBackgroundNotification:(UANotificationContent *)notificationContent completionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// Application received a background notification
UA_LDEBUG(@"The application received a background notification");
// Call the completion handler
completionHandler(UIBackgroundFetchResultNoData);
}
-(void)receivedForegroundNotification:(UANotificationContent *)notificationContent completionHandler:(void (^)(void))completionHandler {
UA_LDEBUG(@"The application received a foreground notification %@",notificationContent);
completionHandler();
}
-(void)receivedNotificationResponse:(UANotificationResponse *)notificationResponse completionHandler:(void (^)(void))completionHandler {
UANotificationContent *notificationContent = notificationResponse.notificationContent;
NSLog(@"Received a notification response");
NSLog(@"Alert Title: %@",notificationContent.alertTitle);
NSLog(@"Alert Body: %@",notificationContent.alertBody);
NSLog(@"Action Identifier: %@",notificationResponse.actionIdentifier);
NSLog(@"Category Identifier: %@",notificationContent.categoryIdentifier);
NSLog(@"Response Text: %@",notificationResponse.responseText);
completionHandler();
}
- (UNNotificationPresentationOptions)extendPresentationOptions:(UNNotificationPresentationOptions)options notification:(UNNotification *)notification {
return options | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert;
}
Я также посмотрел на консоль устройства (ищите xyz для идентификатора), и я вижу это:
default 09:48:34.413032 +0200 apsd <private> _notifyForIncomingMessage <private> with guid <private>
default 09:48:34.414156 +0200 apsd Dispatching low priority message on server: <private>
default 09:48:34.414656 +0200 SpringBoard <private> Delivering message from apsd: <private> 3373312264 <private>
default 09:48:34.414772 +0200 SpringBoard <private> responding with an ack for message with guid <private>
default 09:48:34.414816 +0200 SpringBoard <private> making delegate (<private>) calls to deliver message 3373312264 <private> for topic <private>
default 09:48:34.414842 +0200 SpringBoard <private> calling <private> connection:didReceiveIncomingMessage:
default 09:48:34.415254 +0200 SpringBoard <private> returned from <private> connection:didReceiveIncomingMessage:
default 09:48:34.415401 +0200 SpringBoard Received incoming message on topic x.y.z at priority 1
default 09:48:34.416402 +0200 apsd Looking up connection on peer: 3be332c0 found <private>
default 09:48:34.416460 +0200 apsd <private> informed that <private> acknowledges incoming message with guid <private> tracingUUID (null)
default 09:48:34.417113 +0200 apsd APSMessageStore - APSIncomingMessageRecordDeleteMessageForGUID <private>
default 09:48:34.418199 +0200 SpringBoard [x.y.z] Received remote notification request BBC2-437A [ hasAlertContent: 0, hasSound: 0 hasBadge: 0 hasContentAvailable: 1 hasMutableContent: 0 pushType: Background]
default 09:48:34.418312 +0200 SpringBoard [x.y.z] Deliver push notification BBC2-437A
default 09:48:34.418372 +0200 SpringBoard [x.y.z] Request DUET delivers content-available push notification to application
default 09:48:34.418476 +0200 SpringBoard SUBMITTING: <private>
default 09:48:34.419185 +0200 dasd Submitted Activity: com.apple.pushLaunch.x.y.z:FF3864 at priority 5 <private>
default 09:48:34.419315 +0200 dasd <private> was in pre-running. Removing due to submission of <private>
default 09:48:34.425019 +0200 dasd Adding a launch request (<private>) for application <private> by activity <private>
default 09:48:34.425069 +0200 dasd Launch requests for <private>: <private>
default 09:48:34.425219 +0200 dasd Daemon Canceling Activities: {(
com.apple.pushLaunch.x.y.z:3B7016
)}
default 09:48:34.425282 +0200 dasd CANCELED: com.apple.pushLaunch.x.y.z:3B7016 at priority 5 <private>!
default 09:48:34.425471 +0200 dasd Removing a launch request for application <private> by activity <private>
error 09:48:34.425534 +0200 dasd Activity <private> not tracked as being started, ignoring it
default 09:48:34.427417 +0200 dasd With <private> ...Tasks pre-running in group [com.apple.dasd.defaultNetwork] are 1!
default 09:48:34.427594 +0200 dasd Activity launch reason is not a BGTask reason. Returning YES
default 09:48:34.427720 +0200 SpringBoard cancelActivities: 1 activities were not found: <private>
default 09:48:34.427859 +0200 dasd Unconstrained Available=1
default 09:48:34.427892 +0200 dasd com.apple.pushLaunch.x.y.z:FF3864:[
{name: DataBudgetPolicy, policyWeight: 1.000, response: {Decision: Must Not Proceed, Score: 0.00, Rationale: [{[/system/budgets/networking]: Required:1.00, Observed:0.00},]}}
], FinalDecision: Must Not Proceed}
default 09:48:34.427937 +0200 dasd NO LONGER RUNNING [Not in application -> activity mapping] com.apple.pushLaunch.x.y.z:FF3864 ...Tasks running in group [com.apple.dasd.defaultNetwork] are 0!
receiveBackgroundNotification никогда не запускается.
Я проверил везде, и мне кажется, что все параметры установлены (но явно нет). Любой совет с благодарностью получен.
ОБНОВЛЕНИЕ
Когда я помещаю приложение в фоновом режиме в XCode, я получаю это сообщение:
Can't end BackgroundTask: no background task exists with identifier 106 (0x6a), or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug
Вотладчик, разрыв происходит в [UAAsyncOperation setIsFinished]