后台模式的静默通知不起作用 iOS
Silent notification on background mode does not work iOS
我正在使用 One Signal 接收通知。 Xcode.
上的原生 Swift 4.2
我需要向我的应用程序发送静默通知,只是为了更新数据。我不想打扰用户。
好的,我可以在前台执行此操作。但是我不能在后台。
我正在 One Signal 网站上测试的一些代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let aps = userInfo["aps"] as? NSDictionary {
if let alert = aps["alert"] as? NSDictionary {
if let body = alert["body"] as? NSString {
print(body)
if body.isEqual(to: "Pedido") {
let strdata = PedidoDAO().getMostRecentDtPedido()
// >>>>>>> It works perfectly on FOREGROUND mode, without showing any notification, sound, or banner.**
self.loadOrdersFromLastSyncByApi(strdata)
}
}
}
}
部分配置:
let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false, kOSSettingsKeyInAppAlerts: false, kOSSettingsKeyInAppLaunchURL: false]
OneSignal.initWithLaunchOptions(launchOptions,
appId: "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
handleNotificationAction: {
(result) in
let payload = result?.notification.payload
if let additionalData = payload?.additionalData {
print("payload")
// >>>>>>> when app is on BACKGROUND, the notification comes and when I click on it, I can see the additional data. But I dont want to make user click on it.
print(additionalData)
}
},
settings: onesignalInitSettings)
OneSignal.inFocusDisplayType = OSNotificationDisplayType.none;
OneSignal.promptForPushNotifications(userResponse: { accepted in
print("User accepted notifications: \(accepted)")
})
我也可以在 Postman 上测试。它在前台模式下完美运行,但仅显示带有“。”的烦人通知。在背景模式下的横幅上:
https://onesignal.com/api/v1/notifications
Headers:
Authorization: Basic MY_REST_API_ONE_SIGNAL
Content-Type: application/json
Body raw:
{
"app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
"include_player_ids": ["MY_TEST_IPHONE_ID_"],
"data": {"Pedido": "000"},
"content-available" : true,
"contents": {"en": "."}
}
我不知道是否可以不在后台显示通知,但强制用户单击它来更新数据对我来说没有意义。请问有人有解决方案或其他想法吗?
从 OneSignal 的 API 文档来看,您的推送负载应该是
{
"app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
"include_player_ids": ["MY_TEST_IPHONE_ID_"],
"data": {"Pedido": "000"},
"content_available" : true
}
注意 content_available
中的“_”。
我正在使用 One Signal 接收通知。 Xcode.
上的原生 Swift 4.2我需要向我的应用程序发送静默通知,只是为了更新数据。我不想打扰用户。
好的,我可以在前台执行此操作。但是我不能在后台。
我正在 One Signal 网站上测试的一些代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let aps = userInfo["aps"] as? NSDictionary {
if let alert = aps["alert"] as? NSDictionary {
if let body = alert["body"] as? NSString {
print(body)
if body.isEqual(to: "Pedido") {
let strdata = PedidoDAO().getMostRecentDtPedido()
// >>>>>>> It works perfectly on FOREGROUND mode, without showing any notification, sound, or banner.**
self.loadOrdersFromLastSyncByApi(strdata)
}
}
}
}
部分配置:
let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false, kOSSettingsKeyInAppAlerts: false, kOSSettingsKeyInAppLaunchURL: false]
OneSignal.initWithLaunchOptions(launchOptions,
appId: "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
handleNotificationAction: {
(result) in
let payload = result?.notification.payload
if let additionalData = payload?.additionalData {
print("payload")
// >>>>>>> when app is on BACKGROUND, the notification comes and when I click on it, I can see the additional data. But I dont want to make user click on it.
print(additionalData)
}
},
settings: onesignalInitSettings)
OneSignal.inFocusDisplayType = OSNotificationDisplayType.none;
OneSignal.promptForPushNotifications(userResponse: { accepted in
print("User accepted notifications: \(accepted)")
})
我也可以在 Postman 上测试。它在前台模式下完美运行,但仅显示带有“。”的烦人通知。在背景模式下的横幅上:
https://onesignal.com/api/v1/notifications
Headers:
Authorization: Basic MY_REST_API_ONE_SIGNAL
Content-Type: application/json
Body raw:
{
"app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
"include_player_ids": ["MY_TEST_IPHONE_ID_"],
"data": {"Pedido": "000"},
"content-available" : true,
"contents": {"en": "."}
}
我不知道是否可以不在后台显示通知,但强制用户单击它来更新数据对我来说没有意义。请问有人有解决方案或其他想法吗?
从 OneSignal 的 API 文档来看,您的推送负载应该是
{
"app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
"include_player_ids": ["MY_TEST_IPHONE_ID_"],
"data": {"Pedido": "000"},
"content_available" : true
}
注意 content_available
中的“_”。