我希望iOS11版本能够解决无提示推送问题,该问题已在最新的Beta和GM版本的iOS中出现。
目前,我一直在努力理解为什么我没有收到任何静默的推送消息,这实际上应该唤醒我的应用程序以在后台执行一些所需的任务。
在iOS 10中,我仅使用后台获取功能,并在AppDelegate中实现了“唤醒代码”,如以下代码所示。
在iOS 11中,注册代码仍然可以正常工作,我的后端还向Apple
DEV服务器(沙盒)和PROD服务器(生产版本)传递了推送通知。不幸的是,该功能func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
从未被静默推送通知调用。
我真的在这里错过了iOS 11的东西吗?
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
// .. some variables here ...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// register silent push notification in backend
application.registerForRemoteNotifications()
// ... some code here ...
// Set Background Fetch Intervall for background services / terminated app
UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
// ... some code here ...
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data -> String in
return String(format: "%02.2hhx", data)
}
let token = tokenParts.joined()
logger.log.debug("Device Token: \(token)")
let realm = RealmController()
let user = realm.getLoggedInUserObject()
// Send push token to server
if let user = user {
let email = user.email!
let serverController = ServerController.serverController
serverController.sendPushToken(token: token, email: email) { status in
if status == 201 {
// ... some code here ...
} else {
// ... some code here ...
}
}
}
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
logger.log.debug(error)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
logger.log.debug(userInfo)
let aps = userInfo["aps"] as! [String: AnyObject]
if aps["content-available"] as? Int == 1 {
// .... some silent push tasks here ....
}
}
}
最终更新2017-10-31
苹果刚刚发布了iOS 11.1的正式(万圣节)版本
更新2017-10-09
苹果今天发布了iOS11.1 beta 2。他们再次在发行说明中提到以下说明:
通知已解决的问题
静默推送通知的处理频率更高。(33278611)
我将再次测试此Beta 2版本,并更新此答案供您参考。
更新-测试 ->经过不同场景的测试后,此错误似乎已在最新的iOS11.1 beta
2版本中修复。现在我们只能等待正式发布。在某些论坛中,他们认为Apple将于10月下旬发布iOS11.1。
旧帖子
上周,我调查了大量时间以寻找有关此问题的答案。阅读苹果发行说明(包括不推荐使用,更改和新功能)后,我测试了以下情况:
我向我添加了empty函数AppDelegate
,现在无声推送在前台和后台再次起作用 :
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
logger.log.debug("Perform Fetch with completion handler TEST")
}
我不确定此“解决方法”是否与问题相关function application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
,iOS11中未调用以下内容。
不过,如果您发现相同的行为,可以尝试一下并给我反馈。
更新2017-09-25
在我的情况下,“无声推送”现在在前景和后台模式下有效,但如果该应用已从用户或操作系统挂起,则该功能无效。因此,此问题仍然悬而未决-
感谢您提供任何帮助
更新2017-10-05
苹果几天前发布了iOS11.1 beta。他们在发行说明中提到了以下内容:
已解决的通知问题
静默推送通知的处理频率更高。(33278611)
一些开发人员说此版本已解决了该问题,其他开发人员则说在某些情况下该问题仍然存在。现在,当苹果公司为客户推出iOS11.1时会很有趣。
我希望iOS11版本能够解决静音推送的问题,这个问题出现在最新的betas和GM版本的iOS中。 目前我很难理解,为什么我没有收到任何静默推送消息,这些消息实际上应该唤醒我的应用程序,在后台执行一些需要的任务。 在iOS 10中,我只使用后台提取功能,并在AppDelegate中实现了“唤醒代码”,如下所示。 在iOS 11中,注册代码仍然运行良好,我的后端也将推送通知发送到Apples DEV服
这是在它自己的函数中,在同一个文件中: 你知道如何使用YouTube SDK在后台继续播放声音吗?还有,是不是可以只播放背景中的声音,不播放视频? 感谢任何帮助。
问题内容: 我有几天这个问题了,我没有做错什么。 我的应用程序基本上只是创建一些计时器。我需要阻止它们并创建新的。但是目前停止它们是行不通的。 那是我的计时器 因为我的计时器不想停止,所以我目前正在使用未重复的计时器,并在计时器停止后自行启动。 这就是我停止计时器的方式。 我在创建新计时器之前先调用该函数。 我真的不知道我在做什么错,所以我很感谢每个答案:) 多数民众赞成在整个类的代码。也许有帮助
本文向大家介绍bootstrap快速制作后台界面,包括了bootstrap快速制作后台界面的使用技巧和注意事项,需要的朋友参考一下 最近看了bootstrap的一个小的视频,快速的做出一个后台界面;介绍了一些典型的用法; 里面涉及了: 下拉菜单、胶囊菜单、胶囊菜单垂直显示、栅格排列、导航栏、字体图标、 图片样式、输入组、折叠菜单panel、面包屑、表格样式、分页组件样式; 下面将跟着项目做出的小例
问题内容: 我在堆栈或其他地方在后台处理NSTimer时遇到了很多问题。我尝试了所有实际上有意义的选项之一,以便在应用程序进入后台时停止计时器 和 起初我以为我的问题解决了,我只是保存了应用程序进入后台的时间,并计算了应用程序进入前景时的时间..但后来我注意到时间实际上延迟了3、4、5秒。 ..实际上不一样..我已将其与另一台设备上的秒表进行了比较。 在后台运行NSTimer真的有任何SOLID解
我正在尝试构建一个实时聊天应用程序。 我已经整合了https://pub.dev/packages/flutter_local_notifications用于推送通知的软件包,这是有效的。 我没有使用Firebase,我正在使用我自己的自定义后端,使用https://socket.io/进行实时聊天。 我想在用户发送聊天信息时接收推送通知。推送通知在应用程序处于前台或后台时起作用。但是,当我从进程