我在我的应用程序中使用应用程序内购买。无忧购买。但是当我想第二次购买相同的产品时,这个 Play 商店向我显示“您已经拥有该商品”。我希望我的产品被一次又一次地购买。我不知道如何解决它。非常感谢你的帮助。我在下面留下了我的源代码。
InAppPurchase iap = InAppPurchase.instance;
bool available = true;
List<ProductDetails> products = [];
List<PurchaseDetails> purchases = [];
StreamSubscription subscription;
int credits = 0;
@override
void initState() {
initialize();
super.initState();
}
@override
void dispose() {
subscription.cancel();
super.dispose();
}
void initialize() async {
available = await iap.isAvailable();
if (available) {
await getProducts();
verifyPurchase();
subscription = iap.purchaseStream.listen((data) => setState(() {
print('New Purchase');
purchases.addAll(data);
verifyPurchase();
}));
}
}
Future<void> getProducts() async {
Set<String> ids = Set.from(['buy_300_wecoin']);
ProductDetailsResponse response = await iap.queryProductDetails(ids);
setState(() {
products = response.productDetails;
});
}
PurchaseDetails hasPurchased(String productID) {
return purchases.firstWhere((purchase) => purchase.productID == productID,
orElse: () => null);
}
bool verifyPurchase() {
PurchaseDetails purchase = hasPurchased('buy_300_wecoin');
if (purchase != null && purchase.status == PurchaseStatus.purchased) {
return true;
}
}
void buyProduct(ProductDetails prod) {
final PurchaseParam purchaseParam = PurchaseParam(productDetails: prod);
iap.buyConsumable(purchaseParam: purchaseParam, autoConsume: false);
}
首先,手动放置
using
import 'package:in_app_purchase_android/in_app_purchase_android.dart';
然后在
InAppPurchase.instance.purchaseStream
方法中使用以下代码
if (purchaseDetails.status == PurchaseStatus.restored) {
if (Platform.isAndroid) {
final InAppPurchaseAndroidPlatformAddition androidAddition =
_inAppPurchases.getPlatformAddition<InAppPurchaseAndroidPlatformAddition>();
await androidAddition.consumePurchase(purchaseDetails);
}
}
然后在
initState()
中添加以下行,以便调用恢复购买并触发 Stream 侦听器。
_inAppPurchases.restorePurchases();
您应该使用消耗品应用内购买
消耗品是用户用来接收应用内内容(例如游戏内货币)的产品。当用户消费该产品时,您的应用程序会分配相关内容,用户可以 然后再次购买该商品。
请注意,App Store 没有任何用于查询消耗品的 API,Google Play 认为消耗品一旦被标记为已消耗且无法在此处返回,则不再拥有。要跨设备恢复这些内容,您需要将它们保留在您自己的服务器上并进行查询。
尝试 in_app_purchase 库并使用该库阅读有关消耗性 IAP 的信息。