当我从Xcode运行我的应用程序时,一切正常。我得到了handleNotificationReceived回调,并且可以从通知中读取数据并根据数据进行处理。如果我单击通知,则将调用handleNotificationAction回调,此处相同。如果然后我将应用程序最小化,它的工作原理相同-会调用回调,并且我可以处理通知。
当我通过最近的应用程序菜单从iPhone终止该应用程序并从桌面上的图标启动它时,问题就开始了。如果应用程序位于前台,则一切正常,就像我从Xcode启动应用程序时一样。当我最小化它时,我仍然会收到通知,但不再调用handleNotificationReceived回调。如果我单击通知,则应用程序进入前台,然后调用handleNotificationAction,并在不久之后又调用handleNotificationReceived。只要应用程序处于前台状态,它就可以继续正常运行并调用回调。我再次最小化应用程序后,不再调用handleNotificationReceived。
如果我连接调试器,一切将再次恢复正常。
为什么不叫它?我在必须保存在核心数据中的通知中收到一些数据。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
AppDelegate.configOneSignal(launchOptions)
return true
}
class func configOneSignal(_ launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) -> Void {
let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false]
OneSignal.initWithLaunchOptions(launchOptions,
appId: "MY_APP_ID",
handleNotificationReceived: { notification in
print("notification received")
AppDelegate.handleNotification(notification)
},
handleNotificationAction: { (result) in
print("notification action")
AppDelegate.handleNotification(result?.notification)
},
settings: onesignalInitSettings)
OneSignal.inFocusDisplayType = OSNotificationDisplayType.notification;
OneSignal.promptForPushNotifications(userResponse: { accepted in
print("User accepted notifications: \(accepted)")
})
}
Xcode版本:10.1 经过测试的iOS版本:10、11、12
答案 0 :(得分:0)
handleNotificationReceived 才会在后台触发:>
使用POST正文中的上述两个标志,OS唤醒您的应用程序以将状态设置为Background。当您的应用程序被标记为这些状态时,将触发处理程序。
您可以通过邮递员进行测试。
{ "app_id" : "<your one signal app id>", "included_segments" : ["All"], -> or whatever you want "content_available": "1", "mutable_content": "1", "data": {
"custom_key" : "custom_value" }, "contents": {"en":"notification title"} }
不要忘记设置标题(内容类型和授权)
Here是用法的一个例子。