如何检测用户何时终止应用程序 - Swift

问题描述 投票:0回答:2

不知道为什么这对我来说如此具有挑战性,但是我如何检测用户何时终止应用程序?因为据我所知,Apple 提供了很多在应用程序关闭时可能会或可能不会被调用的函数。

func applicationWillTerminate(_ application: UIApplication)
:在(大多数)应用程序终止时调用,但不适用于支持后台执行的应用程序。

func sceneDidEnterBackground(_ scene: UIScene)
:当场景进入后台时调用,但无法区分应用程序进入后台与完全终止。

func sceneDidDisconnect(_ scene: UIScene)
:我确认如果用户直接终止应用程序,则会调用此函数,但如果将应用程序放在后台然后终止,则不会调用它..

//编辑:所以我意识到上面的方法(

sceneDidDisconnect
)确实是我正在寻找的功能。我之前认为在上面描述的后一种情况下它没有被调用,但实际上,它被调用了。另请参阅(即将)接受的答案。

是否有一个函数在每次用户终止应用程序时都会调用???

ios swift appdelegate uiscenedelegate
2个回答
4
投票

func sceneDidDisconnect(_ scene: UIScene)
最终成为我正在寻找的功能。每当用户手动“终止”应用程序时就会调用它......

...尽管正如@dfd 评论的那样

“在 iOS 中,通常是 OS 出于各种原因(不一定是用户)终止应用程序。”


0
投票

我正在使用 React Native 73,因此 SceneDelegate 对我不可用。我必须使用AppDelegate.mm。我能够检测用户何时终止应用程序(某种程度上可靠)的方法是使用

applicationWillTerminate
。无论出于何种原因,在 XCode 中,每次应用程序初始化时它只记录一次,但实际上每次用户在构建应用程序后滑开应用程序时它都会触发。

@implementation AppDelegate
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  [FIRApp configure]; // If you're using react-native firebase
  logger = os_log_create("com.uchenkadi.swoltime", "AppDelegate");

  self.moduleName = @"main";
  // You can add your custom initial props in the dictionary below.
  // They will be passed down to the ViewController used by React Native.
  self.initialProps = @{};
  
  bool didFinish = [super application:application didFinishLaunchingWithOptions:launchOptions];
  
   [RNSplashScreen show];  // this needs to be called after [super application:application didFinishLaunchingWithOptions:launchOptions];
   
   return didFinish;
}

- (void)applicationWillTerminate:(UIApplication *)application {
  // do stuff in here!
}
@end
© www.soinside.com 2019 - 2024. All rights reserved.