不知道为什么这对我来说如此具有挑战性,但是我如何检测用户何时终止应用程序?因为据我所知,Apple 提供了很多在应用程序关闭时可能会或可能不会被调用的函数。
func applicationWillTerminate(_ application: UIApplication)
:在(大多数)应用程序终止时调用,但不适用于支持后台执行的应用程序。
func sceneDidEnterBackground(_ scene: UIScene)
:当场景进入后台时调用,但无法区分应用程序进入后台与完全终止。
func sceneDidDisconnect(_ scene: UIScene)
:我确认如果用户直接终止应用程序,则会调用此函数,但如果将应用程序放在后台然后终止,则不会调用它..
//编辑:所以我意识到上面的方法(
sceneDidDisconnect
)确实是我正在寻找的功能。我之前认为在上面描述的后一种情况下它没有被调用,但实际上,它被调用了。另请参阅(即将)接受的答案。
是否有一个函数在每次用户终止应用程序时都会调用???
func sceneDidDisconnect(_ scene: UIScene)
最终成为我正在寻找的功能。每当用户手动“终止”应用程序时就会调用它......
...尽管正如@dfd 评论的那样
“在 iOS 中,通常是 OS 出于各种原因(不一定是用户)终止应用程序。”
我正在使用 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