Squeak.ru - шаблоны программирования

Уведомление iOS Push доставлено?

Недавно настроил уведомления в своем приложении, могу отправлять через php и не парься, все работает нормально.

С прошлой недели я пытаюсь выяснить, приходит ли push-уведомление на телефон или нет.

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

Разве нет простой функции, которая может сказать мне, было ли уведомление только что получено приложением?

В моем AppDelegate.swift:

import UIKit
import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

...

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

     // Check if launched from notification
     if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] {
       //print(notification)
       window?.rootViewController?.present(ViewController(), animated: true, completion: nil)
   } 
   else{
       //print("ici ?")
       registerForRemoteNotification()
   }

return true
}

...

//Called when a notification is delivered to a foreground app.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
     completionHandler([.alert, .badge, .sound])
}

//Called to let your app know which action was selected by the user for a given notification.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
     completionHandler()
}

...

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

        **print("here ?")**

        switch((application.applicationState)){

        case UIApplicationState.inactive:
            print("Inactive")
            //Show the view with the content of the push
            completionHandler(.newData)

        case UIApplicationState.background:
            print("Background")
            //Refresh the local model
            completionHandler(.newData)

        default:
            print("Active")
            //Show an in-app banner
            completionHandler(.newData)
            break
        }
    }

}

Проблема: я никогда не передаю didReceiveRemoteNotification :/ Никогда не отображается «печать здесь».

У меня ошибка в этой строке:

Метод экземпляра application(application:didReceiveRemoteNotification:fetchCompletionHandler:) почти соответствует необязательному требованию application(_:didReceiveRemoteNotification:fetchCompletionHandler:) протокола UIApplicationDelegate.

Но я не понимаю :/

У вас есть идея?

Спасибо за вашу помощь ^^


  • что бы вы ни сказали в своем третьем объяснении, только мы можем проверить, что пользователь коснулся уведомления. когда пользователь прокручивает уведомление, не может проверить, эта функция недоступна в документе Apple. 07.12.2016
  • невозможно проверить, получает ли мое приложение push? О_о 07.12.2016
  • stackoverflow.com/questions/25830597 /, перейдите по ссылке, и я также не знаю, чтобы сказать, доставлено или нет. В нашем приложении мы также попробовали это, в тот раз я узнал, что это невозможно, только тогда, когда пользователь коснется этого. 07.12.2016
  • Я прочитал ссылку, но у меня есть противоположный пример: как WhatsApp определяет, доставлено ли сообщение, не открывая приложение на iOS? Это должно быть возможно :р 07.12.2016

Ответы:


1

Это довольно распространенная ошибка с момента перехода на Swift 3 - вы используете метод Swift 2.

Правильная подпись этого метода в Swift 3:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    print("here?")
} 
07.12.2016
  • О, это просто неудачная копия/вставка... в моем коде это правильная подпись для Swift 3.. Плохо ^^ Но это все еще не работает:/ 07.12.2016
  • вы запускаете его в iOS 10? 07.12.2016
  • Вы физически получаете толчки для этого приложения? Со звуком и т.д. 07.12.2016
  • Да, пуш работает нормально, но я не знаю, как поймать, когда он доставлен на телефон :/ 07.12.2016
  • Для чего нужно ловить? Если пользователь нажимает на push, приложение должно знать об этом либо в didFinishLaunchingWithOptions, если приложение было завершено, либо в didReceiveRemoteNotification, если приложение было в фоновом режиме. 08.12.2016
  • Когда я говорю поймать, это когда телефон получает толчок... без действий пользователя. Проверьте мой код, он вам подходит? Потому что это не сработало в didReceiveRemoteNotification, и я не знаю, как это исправить :/ (спасибо за ваше время ^^) 08.12.2016
  • Вы реализовали методы: func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {} и func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {}? Мы должны точно знать, зарегистрировано ли приложение для удаленных уведомлений или нет. 08.12.2016
  • Да, методы реализованы, и push-уведомления работают нормально, когда я отправляю через свой php-скрипт. Я получаю уведомления. но я никогда не пропускаю didReceiveRemoteNotification :/ 08.12.2016
  • didReceiveRemoteNotification вызывается в двух случаях: 1. приложение находится в фоновом режиме, и пользователь нажимает на push-уведомление 2. приложение активно и принимается «тихий push-уведомление» 08.12.2016
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...