iOS OneSignal handleNotificationReceived обратный вызов не вызывается после перезапуска приложения - PullRequest
0 голосов
/ 12 декабря 2018

Когда я запускаю свое приложение из Xcode, все работает нормально.Я получаю, что вызывается обратный вызов handleNotificationReceived, и я могу читать данные из уведомления и обрабатывать их в зависимости от данных.Если я нажимаю на уведомление, вызывается обратный вызов handleNotificationAction, и то же самое здесь.Если я затем сверну приложение, оно будет работать точно так же - будут вызваны обратные вызовы, и я смогу обработать уведомление.

Проблемы начинаются, когда я завершаю приложение с iPhone через недавнее меню приложения и запускаю его с помощью значка нарабочий стол.Если приложение находится на переднем плане, все работает нормально, как при запуске приложения из Xcode.Когда я минимизирую его, я все равно получаю уведомление, но обратный вызов handleNotificationReceived больше не вызывается.Если я нажимаю на уведомление, приложение выходит на передний план, а затем вызывается handleNotificationAction и вскоре после этого также вызывается handleNotificationReceived.Пока приложение находится на переднем плане, оно продолжает работать нормально и вызывается обратный вызов.Как только я снова сворачиваю приложение, handleNotificationReceived больше не вызывается.

Если я присоединяю отладчик, все снова начинает работать нормально.

Почему он не вызывается?Я получаю некоторые данные в уведомлениях, которые я должен сохранить в Core Data.

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

1 Ответ

0 голосов
/ 17 апреля 2019

handleNotificationReceived запускается в фоновом режиме, только если вы установили в теле следующие флаги (см. doc , в разделе section-content-language ):

  • content_available: 1
  • mutable_content: 1

С двумя вышеупомянутыми флагами в теле POST ОС запускает ваше приложение, чтобы установитьсостояние в качестве фона.Когда ваше приложение помечено этим состоянием, обработчик срабатывает.

Вы можете проверить через Почтальон.

{ "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"} }

Не забудьте установить заголовки (Content-Type & Authorization)

Здесь является примером использования.

...