tvOS applicationDidBecomeActive 在电视关闭的情况下反复调用

tvOS applicationDidBecomeActive called repeatedly with TV off

在带有 RevenueCat 的 tvOS 13.4 上,当我在 4K 电视设备上安装我的应用程序 运行,然后关闭电视(离开应用程序 运行)时,我得到这个:

2020-05-10 12:21:59-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:01-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:01-0700 MyApp[709:1904667] [Purchases] - DEBUG: applicationDidBecomeActive
2020-05-10 12:22:05-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:07-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:07-0700 MyApp[709:1904667] [Purchases] - DEBUG: applicationDidBecomeActive
2020-05-10 12:22:11.0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:13-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:13-0700 MyApp[709:1904667] [Purchases] - DEBUG: applicationDidBecomeActive
2020-05-10 12:22:14-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:19-0700 MyApp[709:1904667] [Purchases] - INFO: Subscriber attributes synced successfully
2020-05-10 12:22:19-0700 MyApp[709:1904667] [Purchases] - DEBUG: applicationDidBecomeActive

为什么会这样?显然它知道电视已经关闭,因为当我重新打开它时,它就停止重复调用。

堆栈跟踪中在此之前的唯一调用是私有函数:

#1 0x00000001e36c8398 in -[UIApplication _stopDeactivatingForReason:] ()

我在 RevenueCat 工作,让我补充一些背景信息:

这是由 purchases-ios 中的错误引起的,存在于版本 3.1.0 -> 3.2.2 中,即使方法无操作,日志也会发出,如果没有' 任何需要同步的订阅者属性(这将是您的情况,除非它们经常被设置为不同的值)。

它将在本周发布的下一个版本 3.2.3 中得到修复(以及其他修复)。

发生的事情是 RevenueCat 会在应用程序处于前台或后台时尝试同步订户属性 (https://docs.revenuecat.com/docs/subscriber-attributes)。当 UIApplicationDidBecomeActiveNotificationUIApplicationWillResignActiveNotification 被解雇时,应用程序在 tvOS 上被视为 foregrounded/backgrounded。如果没有需要同步的属性,该方法会提前退出,但当前版本仍然会发出日志,说明它们已同步成功。

我不太清楚为什么 tvOS 在电视关闭时触发这两个通知,但我会深入挖掘并让您知道。

不过,再次澄清一下,除非在前景或背景之间设置了新的订阅者属性,或者除非它们被设置为与当前属性不同的值,否则该方法不会执行任何操作。