ios 13 Urban Airship 后台推送失败

标签 ios objective-c urbanairship.com

为了尝试以正确的方式开始,我整个早上都在搜索 SO 和其他资源来解决这个问题。

我有一个应用程序,可以与无声前台推送通知以及标准推送通知完美配合。功能设置如下

Capabilities

触发通知的JSON如下

{"device_types":["android","ios"],"notification":{"ios":{"extra":{"requests":{"directives":{"forceUpdate":1}}},"content-available":1}},"audience":{"tag":"userDevice=60218"}}

我已将 UA 示例中的 PushHandler 委托(delegate)减少到最低限度以进行测试:

-(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;
} 

我还查看了设备控制台(查找 x.y.z 作为标识符),我看到了这一点:

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!

receivedBackgroundNotification 永远不会被触发。

我已经检查了所有地方,我似乎已经设置了所有选项(但显然没有)。非常感谢任何建议。

更新

当我在 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]

最佳答案

通过设置"content-available":1,您将使用静默推送通知。我不确定它在以前的 iOS 中是否更好,但在 iOS 13 中,此类通知的 apns 优先级为 5(满分 10)。

这意味着它们可能会被延迟、分组并突发传送,甚至完全被忽略。

例如,如果用户强制关闭应用程序(向上滑动),静默通知将被完全忽略。此外,用户每天每个应用可以收到的数量也有限制。

<小时/>

话虽这么说,静默推送通知并不适合您需要保证通知能够送达的情况。

尝试使用常规推送通知(或者如果您想在向用户显示通知之前更改通知内容,则可以使用 Notification Service App Extension )。他们可能会稍微延迟到达,但一定会送达。

关于ios 13 Urban Airship 后台推送失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163905/

相关文章:

android - 什么是后台推送通知?安卓、 Urban Airship

html - 如何更改 WKWebView 文本颜色?

objective-c - 如何在代码中引用不同的 UIButton

ios - CGAffineTransformScale 之后的动画 CGAffineTransformTranslate 结果为 "jumping"帧

objective-c - IOS - 动画没有响应

Android "Urban Airship"- GCM - 未找到 Activity 设备 token

ios - NEFilterProvider 是否也需要受监督的 iOS 设备进行调试?

objective-c - 从 C 转换到 Objective-c

ios - 试图管理大型 UITableView 数据结构

android - Urban Airship - Push Sample => APID is everytime null