在这里插入图片描述

虽然我们总是精心制作我们的应用程序,但我们并不总是让它们免费。除了将我们的应用程序上传到Play商店收取费用外,另一种赚钱的方式是通过应用内购买。Flutter in_app_purchase(IAP)是一个第一方Flutter软件包,允许开发者在其应用程序中实现iOS上的App Store或Android上的Google Play的应用内购买。另外两个解决方案,**flutter_inapp_purchase **和 purchases_flutter,也提供了类似的功能。

在本文中,我们的目标是指导您使用 purchases_flutter 软件包。

purchases_flutter

这是一个使用 RevenueCat 解决方案实现应用内购买的插件。

**RevenueCat **是一家简化应用程序内购买实现的第三方机构。在使用官方的Flutter插件(in_app_purchase)时,需要在服务器上实现自己的逻辑来处理购买验证、订阅和取消等流程。

这样做需要大量的逻辑工作,因此,替代方案可以很有吸引力,因为它们可以做很多繁重的工作。Purchases_flutter可以为你处理这个逻辑,因此在你的应用程序中实现应用内购买更容易。RevenueCat的服务器将处理购买验证以及所有中间逻辑和中间件。

与应用内购买的其他实现类似,您需要在 Play Store 和 App Store 上设置有效的应用内购买。

让我们从 RevenueCat 开始

在使用 RevenueCat 之前,您必须注册 RevenueCat。不要害怕。如果您从该应用获得的月收入低于 10000 美元,RevenueCat 是免费的。
在这里插入图片描述
注册后,导航到 RevenueCat 仪表板,然后从名为 Projects 的顶部导航菜单的下拉列表中添加一个新项目。
在这里插入图片描述

在项目仪表板的左边菜单中的项目设置>应用程序,选择你要添加的应用程序的平台。
在这里插入图片描述

将应用添加到RevenueCat时,需要输入App name字段。其余的配置字段可以稍后再添加。
在这里插入图片描述

在你开始使用RevenueCat来获取产品之前,你必须在相应的商店中配置你的产品。

在Play Console中,您需要使用相同的Product ID和相同的试用和金额设置订阅。
在这里插入图片描述

两个订阅的详细信息应保持不变。

安装

要使用此插件,请将 purchase_flutter 添加为 pubspec.yaml 文件中的依赖项(并运行隐式 dart pub get):

dependencies: purchases_flutter: ^3.0.0

您现在应该可以导入 purchase_flutter

import 'package:purchases_flutter/purchases_flutter.dart';

如果你正在使用其他插件,比如 mobx,你可能会遇到与其他插件的类型冲突,这些插件的名称与 purchase_flutter 中定义的名称相同。

如果发生这种情况,您可以通过添加导入别名来解决类型中的歧义,例如:

import 'package:purchases_flutter/purchases_flutter.dart' as purchases;

之后,你可以将 purchases_flutter 中的类型引用为 purchases.Foo,比如 purchases.PurchaserInfo

配置SDK

你应该只配置一次purchase的共享实例,通常是在应用启动时。之后,通过访问 SDK 中的 .shared 实例,在整个应用程序中共享同一个实例。如果您想查看有关配置 SDK 的指南以获取更多信息,可以单击此处

import 'dart:io' show Platform;
  //...  
Future<void> initPlatformState() async {
   await Purchases.setDebugLogsEnabled(true);  
   if (Platform.isAndroid) {    
       await Purchases.setup("public_google_sdk_key");
   }
	 else if (Platform.isIOS) { 
     await Purchases.setup("public_ios_sdk_key"); 
     /* OR: if building for Amazon, be sure to follow the installation instructions then: */    
  	 await Purchases.setup("public_amazon_sdk_key", useAmazon: true);  
  } 
}

显示可用产品

SDK将自动获取配置的产品,并从苹果、谷歌或亚马逊检索产品信息。因此,当客户启动您的购买屏幕时,可用的产品将已经被加载。

try {   
  Offerings offerings = await Purchases.getOfferings(); 
  if (offerings.current != null) {     
    // Display current offering with offerings.current   
  }
} on PlatformException catch (e) {   
  // optional error handling
}

进行购买

SDK 包含一种便于购买的简单方法。 purchase:package 从获取的产品中获取一个包,并处理与相应应用商店的交易。

try {  
  	PurchaserInfo purchaserInfo = await Purchases.purchasePackage(package); 
    var isPro = purchaserInfo.entitlements.all["my_entitlement_identifier"].isActive; 
    if (isPro) { 
      // Unlock that great "pro" content  
   	}
 } on PlatformException catch (e) { 
  	var errorCode = PurchasesErrorHelper.getErrorCode(e);  
 		if (errorCode != PurchasesErrorCode.purchaseCancelledError) {            
      showError(e);               
  	}
 }

获取订阅状态

SDK 还可以轻松检查当前客户拥有哪些活动订阅。这可以通过检查特定权利是否处于活动状态或通过检查活动权利数组是否包含特定权利 ID 来完成。

try {   
  PurchaserInfo purchaserInfo = await Purchases.getPurchaserInfo();   
  if (purchaserInfo.entitlements.all["my_entitlement_identifier"].isActive){    
   	// Grant user "pro" access   
  } 
} on PlatformException catch (e) {
   // Error fetching purchaser info 
}

恢复购买

RevenueCat使你的用户能够恢复他们的应用内购买,重新激活他们以前从同一个商店账户(苹果、谷歌或亚马逊账户)购买的任何内容。我们建议所有应用程序都为用户提供某种方式来触发恢复方法。请注意,Apple 确实需要一个恢复机制,以防用户无法访问他们的购买(例如:卸载/重新安装应用程序、丢失他们的帐户信息等)。

try {   
	PurchaserInfo restoredInfo = await Purchases.restoreTransactions(); 
  // ... check restored purchaserInfo to see if entitlement is now active 
} on PlatformException catch (e) {  
 // Error restoring purchases 
}

总结

在本文中,我尝试解释了应用内购买方法的一种方法。它是对应用内购买方法的介绍。您可以在 Youtube 上找到一些从一开始就制作应用程序的复杂教程。如果您不理解本文并想观看教程,我可以推荐您观看 Johannes Milke 的 RevenueCat 教程。


原文:https://medium.com/codimis/in-app-purchase-in-flutter-e3ab5a4fad60

作者:Talha SEZER

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐