Flutter iOS RevenueCat 未捕获异常'NSInternalInconsistencyException'

Posted

技术标签:

【中文标题】Flutter iOS RevenueCat 未捕获异常\'NSInternalInconsistencyException\'【英文标题】:Flutter iOS RevenueCat uncaught exception 'NSInternalInconsistencyException'Flutter iOS RevenueCat 未捕获异常'NSInternalInconsistencyException' 【发布时间】:2021-02-12 18:11:54 【问题描述】:

我在控制台中收到此错误:

[Purchases] - INFO: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance.
*** Assertion failure in +[RCCommonFunctionality getPurchaserInfoWithCompletionBlock:], RCCommonFunctionality.m:118
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'You must call setup first.'
*** First throw call stack:
(0x1a0379654 0x1a009bbcc 0x1a027c6ec 0x1a06c216c 0x1032908ac 0x1032cdf9c 0x1032cc0d4 0x105c3ae30 0x1053ef758 0x1056d58b4 0x1053f90ec 0x1053fb818 0x1a02f8134 0x1a02f7e50 0x1a02f752c 0x1a02f253c 0x1a02f1ba8 0x1aa461344 0x1a442d3e4 0x102c4069c 0x1a01798f0)
libc++abi.dylib: terminating with uncaught exception of type NSException
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x00000001a016ed88 libsystem_kernel.dylib`__pthread_kill + 8
libsystem_kernel.dylib`__pthread_kill:
->  0x1a016ed88 <+8>:  b.lo   0x1a016eda4               ; <+36>
    0x1a016ed8c <+12>: stp    x29, x30, [sp, #-0x10]!
    0x1a016ed90 <+16>: mov    x29, sp
    0x1a016ed94 <+20>: bl     0x1a014dad0               ; cerror_nocancel
Target 0: (Runner) stopped.
Lost connection to device.

但是,这是一个间歇性问题(即:并不总是发生)。事实上,我已经在启动时设置了 Purchases 实例(即:在用户通过身份验证并获得 UID 后立即):

 await Purchases.setDebugLogsEnabled(isDebugEnabled);
 await Purchases.setup(kRevenueCatApiKey, appUserId: uid);

有什么我错过的吗? (但大多数时候它都有效)

【问题讨论】:

“启动时”是什么意思?另外,您在哪里调用 getPurchaserInfo?它在您的应用有机会调用 Purchases.setup 之前被调用 感谢您的指点。我终于解决了这个问题。启动时意味着我在验证用户身份后立即调用它。我已经解决了这个问题以反映这一点。 【参考方案1】:

我发现了问题。所以每当getPurchaserInfo 被调用,但如果Purchaser.setup 没有完成处理,那么它会触发这个异常。感谢上面@Cesar 的评论。

就我而言,我发现问题是因为:

我有两个 Bloc 分别处理 IAP 和业务逻辑。 一旦用户通过身份验证,IAP 就会调用Purchases.setup。然后在主界面,业务逻辑会通过getPurchaserInfo与服务器检查本地数据的有效性。 当互联网连接不好并且getPurchaserInfoPurchases.setup 完成处理之前被业务逻辑块触发时,就会出现问题。

所以我所做的解决方案是确保业务逻辑块在 IAP 块使用 Purchases.setup 完成后开始初始化。例如将它们放在等待每个进程的异步函数中。

【讨论】:

以上是关于Flutter iOS RevenueCat 未捕获异常'NSInternalInconsistencyException'的主要内容,如果未能解决你的问题,请参考以下文章

Flutter RevenueCat SDK 无法在网络上运行

购买.getOfferings();将 RevenueCat 升级到最新版本后挂起

使用 RevenueCat API 检查用户订阅是不是仍然有效

iOS Receipt验证作为后端服务

选择器视图上的断言失败

ios flutter 混编