扑。如何检查自动续订订阅是否仍然有效
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扑。如何检查自动续订订阅是否仍然有效相关的知识,希望对你有一定的参考价值。
我的应用程序有1个月的自动续订订阅。当用户点击“购买订阅”按钮时,我将购买日期保存到共享首选项。然后,1个月后,我需要检查此订阅是否仍然有效。那么我该如何实现呢?
最好的方法是使用安全的后端服务器来接收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添加到您的项目中)。
有几种方法可以做到这一点,但我不会在移动设备上这样做。
在设备上,就像你要求的那样
安装Flutter Cache Manager,在开始时将缓存键值'Subscription'设置为true,使用maxAgeCacheObject:Duration(days:30)。在每次启动时检查该密钥是否仍存在于缓存中。如果确实如此,那么它仍然有效,否则它已经过期。
使用FirebaseFunction的建议解决方案
我建议设置一个后端来管理所有这些。这不是移动设备的任务。你可以从firebase获得一个Cloud Function,你传递一个唯一的设备ID,它将返回订阅是否仍然有效。无服务器功能应该适用于此。伪步骤:
- (在设备上)当应用程序启动时生成一个guid并使用你的guid发出一个http post请求。
- (服务器)在无服务器功能中,将请求的日期与您发送的uniqueId一起保存。如果您的ID已经在数据库中,请检查它是否已过期(添加日期 - 当前日期)<30天。从函数返回true或false。如果仍然有效则为真,如果无效则为假。
- (在设备上)当您从函数收到true时,将生成的id本地保存在磁盘上并继续您想要执行的操作。如果它为假,则将用户锁定或显示您要处理的订阅。
以上是关于扑。如何检查自动续订订阅是否仍然有效的主要内容,如果未能解决你的问题,请参考以下文章