Тихое уведомление в фоновом режиме (решено)

(Обновлено, решено. Спасибо за помощь @Gereon)

Я использую One Signal для получения уведомлений. Также Native Swift 4.2 на Xcode.

Мне нужно отправить тихие уведомления в мое приложение, просто чтобы обновить данные. Я не хочу беспокоить пользователя.

Хорошо, я могу сделать это на переднем плане. Но я не могу на фоне.

Часть моего кода, который я тестирую на сайте One Signal:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        //updated to get my additional data - ITS WORKING NOW
        if let custom = userInfo["custom"] as? NSDictionary {
            if let a = custom["a"] as? NSDictionary {
            if let update = a["update"] as? NSString {
                print(update)
                    if update.isEqual(to: "Pedido") {
                        let strdata = PedidoDAO().getMostRecentDtPedido()
                        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")

                                                print(additionalData)
                                            }
                                        },
                                        settings: onesignalInitSettings)

        OneSignal.inFocusDisplayType = OSNotificationDisplayType.none;

        OneSignal.promptForPushNotifications(userResponse: { accepted in
            print("User accepted notifications: \(accepted)")
        })

Я также могу проверить это на Почтальоне. Он отлично работает в режиме переднего плана, но показывает раздражающее уведомление только с "." на баннере в фоновом режиме:

https://onesignal.com/api/v1/notifications
Headers:
Authorization: Basic MY_REST_API_ONE_SIGNAL
Content-Type: application/json

Body raw: (EDITED - WORKING)
{
  "app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
  "include_player_ids": ["MY_TEST_IPHONE_ID_"],
  "content_available" : true,
  "data": {"update": "Pedido"}
}

Я не знаю, возможно ли НЕ показывать уведомление в фоновом режиме, но для меня нет смысла заставлять пользователя щелкать по нему, чтобы обновить данные. У кого-нибудь есть решение или другая идея, пожалуйста?

1 ответ

Решение

Судя по документам API OneSignal, ваша полезная нагрузка должна быть

{
  "app_id": "yyyyyyyyy-zzzzz-hhhhh-gggg-xxxxxxxxxxxx",
  "include_player_ids": ["MY_TEST_IPHONE_ID_"],
  "data": {"Pedido": "000"},
  "content_available" : true
}

Обратите внимание на "_" в content_available,

Другие вопросы по тегам