RevenueCat“活动”权利在关闭并重新打开应用程序后返回 false 的问题,缓存问题?

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

当用户购买订阅时,我们运行调用purchase()的代码。订阅成功后,应用程序正确运行,导航到登录页面,用户登录后,进入我们的主视图。

然后,如果我退出应用程序并返回,付费墙会再次出现。 相反,它应该进入主视图。

我想通过检查

Purchases.getCustomerInfo()
我可以从 RevenueCat 获得更新的状态

const [isActive = false, setIsActive] = useMMKVBoolean(
    storageKeys.purchases.isActive
  ); //to store on device
const [userId, setUserId] = useMMKVString(storageKeys.user.id); //to store on device
const [isReady, setIsReady] = useState(false);
const [sawPaywall, setSawPaywall] = useState(false);
const [isLoadingRestoreData, setIsLoadingRestoreData] = useState(false);
  
// initial configuration
useMySWR({
    key: 'init_purchases',
    fetcher: async () => {
      try {
        if (!APIKEY) {
          throw new Error('Missing API Key for purchases');
        }
        if (isReady) return;

        await Purchases.setLogLevel(Purchases.LOG_LEVEL.DEBUG);
        Purchases.configure({ apiKey: APIKEY, appUserID: userId });

        await getInfo();
      } catch (e) {
        console.error((e as Error).message);
        !__DEV__ &&
          Bugsnag.notify({
            name: 'initPurchaseConfig Error',
            message: (e as Error).message,
          });
        Bugsnag.leaveBreadcrumb('initPurchaseConfig Error', {
          country: JSON.stringify(getLocales()?.[0]),
        });
        setMessage(['error', (e as Error).message]);
      } finally {
        setIsReady(true);
      }
    },
  });

const getInfo = useCallback(async () => {
    try {
      const info = await Purchases.getCustomerInfo();
      packageRef.current =
        info?.entitlements?.active?.[entitlementName]?.productIdentifier;

      const { isActive: isEntitled } =
        info?.entitlements?.active?.[entitlementName] || {};

      setIsActive(!!isEntitled);
      if (isEntitled) {
        setSawPaywall(true);
      }
      return info;
    } catch (e) {
      throw new Error((e as Error).message);
    }
  }, [setIsActive]);

const purchase = async (purchasePackage: PurchasesPackage) => {
    try {
      await Purchases.purchasePackage(purchasePackage);
      await getInfo();
    } catch (e) {
      if ((e as Error).message !== 'Purchase was cancelled.') {
        throw new Error((e as Error).message);
      }
    }
  };

我已将此问题追溯到

info?.entitlements?.active?.[entitlementName].isActive
响应的
getCustomerInfo
部分的问题:它返回 false。

如果我按“恢复购买”,应用程序将正常运行。

是什么导致

isActive
为假,但恢复购买更新。 我知道
getCustomerInfo
上有缓存,但感觉我做的事情好像是错误的?

如何初始化和检查购买权利?

编辑:我认为这是 RevenueCat

getCustomerInfo
的缓存问题,因为如果我让我的应用程序等待 5 分钟以上并刷新,它似乎会按预期工作。 那么我该如何解决这个问题呢?

react-native revenuecat
1个回答
0
投票

这可能是识别/同步登录客户时出现的问题。 用户登录后添加

Purchases.syncPurchase
即可解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.