扑。如何检查自动续订订阅是否仍然有效

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

我的应用程序有1个月的自动续订订阅。当用户点击“购买订阅”按钮时,我将购买日期保存到共享首选项。然后,1个月后,我需要检查此订阅是否仍然有效。那么我该如何实现呢?

flutter in-app-purchase subscription
2个回答
0
投票

最好的方法是使用安全的后端服务器来接收Real-time Developer Notifications。但是,可以直接在应用程序中检查状态。因此,当用户尝试访问某些付费功能时,您可以检查他的订阅是否有效。以下是示例:

用class创建文件的某个地方

import 'dart:io' show Platform;
import 'package:flutter/services.dart';
import 'package:flutter_inapp_purchase/flutter_inapp_purchase.dart';
import 'dart:async';

class SubcsriptionStatus {
static Future<bool> subscriptionStatus(
  String sku,
  [Duration duration = const Duration(days: 30),
  Duration grace = const Duration(days: 0)]) async {
    if (Platform.isIOS) {
      var history = await FlutterInappPurchase.getPurchaseHistory();

      for (var purchase in history) {
        Duration difference =
        DateTime.now().difference(purchase.transactionDate);
        if (difference.inMinutes <= (duration + grace).inMinutes &&
            purchase.productId == sku) return true;
      }
      return false;
    } else if (Platform.isAndroid) {
      var purchases = await FlutterInappPurchase.getAvailablePurchases();

      for (var purchase in purchases) {
        if (purchase.productId == sku) return true;
      }
      return false;
    }
    throw PlatformException(
        code: Platform.operatingSystem, message: "platform not supported");
  }
}

将其导入需要检查订阅状态并在构造函数中使用的位置。例如:

class _SubscriptionState extends State<Subscription> {
  bool userSubscribed;
  _SubscriptionState() {
  SubcsriptionStatus.subscriptionStatus(iapId, const Duration(days: 30), const 
  Duration(days: 0)).then((val) => setState(() {
  userSubscribed = val;
   }));
   }
}

在变量userSubscribed将是状态 - 真或假。 (请注意,您必须将flutter_inapp_purchase添加到您的项目中)。


0
投票

有几种方法可以做到这一点,但我不会在移动设备上这样做。

在设备上,就像你要求的那样

安装Flutter Cache Manager,在开始时将缓存键值'Subscription'设置为true,使用maxAgeCacheObject:Duration(days:30)。在每次启动时检查该密钥是否仍存在于缓存中。如果确实如此,那么它仍然有效,否则它已经过期。

使用FirebaseFunction的建议解决方案

我建议设置一个后端来管理所有这些。这不是移动设备的任务。你可以从firebase获得一个Cloud Function,你传递一个唯一的设备ID,它将返回订阅是否仍然有效。无服务器功能应该适用于此。伪步骤:

  1. (在设备上)当应用程序启动时生成一个guid并使用你的guid发出一个http post请求。
  2. (服务器)在无服务器功能中,将请求的日期与您发送的uniqueId一起保存。如果您的ID已经在数据库中,请检查它是否已过期(添加日期 - 当前日期)<30天。从函数返回true或false。如果仍然有效则为真,如果无效则为假。
  3. (在设备上)当您从函数收到true时,将生成的id本地保存在磁盘上并继续您想要执行的操作。如果它为假,则将用户锁定或显示您要处理的订阅。
© www.soinside.com 2019 - 2024. All rights reserved.