1

Мне нужно знать, будет ли мое приложение перенесено на передний план через взаимодействие с push-уведомлением или вручную пользователями, щелкнув по приложению.Обнаруживать, если приложение открыто из фона Swift iOS

Если вы открываете приложение от фона вручную «applicationWillEnterForeground» называется. Если вы открываете приложение из фона через push-уведомление, вызывается «applicationWillEnterForeground», а затем «didReceiveRemoteNotification».

Теперь я хочу сделать запрос alamofire внутри делегата приложения на моем бэкэнд, когда я уверен, что он был открыт из-за push или нет (статистика, пользователи взаимодействуют с нашими push-сообщениями).

Есть ли метод, который называется после всех перечисленных мной? Если бы я мог в этом месте проверить, было ли это толчок или нет, и отправить его. Или есть лучший способ справиться с этим?

ответ

2

Когда приложение было в фоновом режиме, вы можете обработать уведомление через «didReceiveRemoteNotification».

Если это не работает на всех, и пользователь начал его, нажав на уведомление баннера, вы должны проверить параметры запуска:

if let launchOptions = launchOptions { 
     if let notificationInfo = launchOptions[UIApplicationLaunchOptionsKey.remoteNotification] as? [AnyHashable : Any] { 
      // Handle notificationInfo 
     } 
    } 

в «применении метода (_ применение: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) « в AppDelegate.

+0

Хорошо выглядеть. У меня есть rest-api, мне нужно позвонить. OpenedViaPush() или OpenedManually(). Код, который вы показываете, я уже использую, чтобы проверить его на холодный запуск приложения. Теперь приложение находится в фоновом режиме и возобновлено. Вы действительно можете проверить наличие didReceiveRemoteNotification. Но если вы хотите отслеживать, было ли оно открыто из фона вручную, оно не работает, потому что вызывается 2 метода. applicationWillEnterForeground, а затем didReceiveRemoteNotification. –

+0

Вам не нужно заботиться о методе applicationWillEnterForeground для сценария, в котором приложение было в фоновом режиме. Просто реализуйте то, что вам нужно в didReceiveRemoteNotification. Может быть, [эта тема] (http://stackoverflow.com/questions/5056689/didreceiveremotenotification-when-in-background) будет полезна. – user3581248

+0

и если вы не получили удаленное уведомление, а просто открыли приложение из фона? didReceiveRemoteNotification вызывается только при получении уведомления. Мне нужен способ сделать то и другое. –

0

нашел то, что называется потом:

func applicationDidBecomeActive(_ application: UIApplication) 

здесь я могу сгореть запрос на мой бэкэндом, использовав

didReceiveRemoteNotification 

до того, чтобы выяснить, если он был открыт через толчок или нет ,