在 Capacitor SDK 中检查订阅状态

使用 Adapty,订阅状态的追踪变得轻而易举。你无需在代码中手动填入产品 ID,只需检查用户是否拥有有效的访问等级,即可快速确认其订阅状态。

开始检查订阅状态前的准备工作(点击展开)

访问等级与 AdaptyProfile 对象

访问等级是 AdaptyProfile 对象的属性。我们建议在应用启动时获取用户画像,例如在识别用户时,并在发生变更时及时更新。这样,你就可以直接使用已有的用户画像对象,而无需反复请求。 如需在用户画像更新时收到通知,请按照下方监听用户画像更新(包括访问等级)章节的说明来监听用户画像变更。

想了解 Adapty SDK 如何集成到移动应用中的真实示例?请查看我们的示例应用,其中展示了完整的配置过程,包括显示付费墙、完成购买以及其他基本功能。

从服务器获取访问等级

要从服务器获取访问等级,请使用 .getProfile() 方法:


try {
  const profile = await adapty.getProfile();
  console.log('Profile retrieved successfully');
} catch (error) {
  console.error('Failed to get profile:', error);
}

响应参数:

参数描述
profile一个 AdaptyProfile 对象。通常,你只需检查用户画像的访问等级状态,即可判断用户是否拥有应用的高级权限。.getProfile 方法始终会尝试请求 API,因此返回的结果是最新的。如果由于某些原因(例如无网络连接)导致 Adapty SDK 无法从服务器获取信息,则会返回缓存中的数据。同样需要注意的是,Adapty SDK 会定期更新 AdaptyProfile 缓存,以尽可能保持信息的实时性。
.getProfile() 方法可以获取用户画像,从中你可以得到访问等级的状态。一个应用可以设置多个访问等级。例如,如果你有一个新闻应用,并分别销售不同主题的订阅,你可以创建 “sports” 和 “science” 两个访问等级。但在大多数情况下,你只需要一个访问等级,这时直接使用默认的 “premium” 访问等级即可。

以下是检查默认 “premium” 访问等级的示例:


try {
  const profile = await adapty.getProfile();
  
  const isActive = profile.accessLevels?.['premium']?.isActive;
  if (isActive) {
    // Grant access to premium features
    console.log('User has premium access');
  } else {
    console.log('User does not have premium access');
  }
} catch (error) {
  console.error('Failed to check subscription status:', error);
}

监听订阅状态更新

每当用户的订阅状态发生变化时,Adapty 就会触发一个事件。

要接收来自 Adapty 的消息,你需要进行一些额外配置:


// Create an "onLatestProfileLoad" event listener
adapty.addListener('onLatestProfileLoad', (data) => {
  const profile = data.profile;
  const isActive = profile.accessLevels?.['premium']?.isActive;
  
  if (isActive) {
    console.log('Subscription status updated: User has premium access');
  } else {
    console.log('Subscription status updated: User does not have premium access');
  }
});

Adapty 也会在应用启动时触发一次事件,此时传递的是缓存的订阅状态。

订阅状态缓存

Adapty SDK 内置了缓存机制,用于存储用户画像的订阅状态。这样一来,即使服务器暂时不可用,也可以通过缓存数据获取用户的订阅状态信息。 但需要注意的是,无法直接从缓存中请求数据。SDK 每分钟会定期向服务器查询,检查用户画像是否有任何更新或变更。如有修改(例如新交易或其他更新),这些变更将同步到缓存数据中,以确保其与服务器保持一致。