Flutter购买管理插件eb_purchase的使用
Flutter购买管理插件eb_purchase的使用
Google Play设置
此包集成了Google Play服务,以实现无缝的内购和订阅管理。以下是集成的详细步骤。
设置
注意:此过程涉及在 Google Play控制台 和 Google Cloud控制台 之间切换。每个步骤都会指定相应的控制台,以确保顺利导航。
1. 启用Google开发者和报告API
位置:Google Cloud控制台
按照以下步骤启用所需的API:
- 访问 Google Play Android开发者API 和 Google Play开发者报告API 页面。
- 选择或创建一个项目。
- 点击每个API的 启用(启用后会显示 管理)。
注意:如果提示创建凭据,请继续到步骤2生成所需的凭据。
2. 创建服务账户
位置:Google Cloud控制台
导航到 IAM & Admin ➡️ Service Account 以创建服务账户。
步骤:
- 点击 创建服务账户,
- 输入账户名称、服务账户ID(通常是您的应用名称)和描述(可选)。
- 点击 创建并继续。
- 添加以下 角色:
- Pub/Sub Admin(启用平台服务器通知)
- Monitoring Viewer(监控通知队列)
- 跳过可选步骤并点击 完成。
创建并下载JSON密钥:
- 在 服务账户 部分,找到您的服务账户并从操作菜单中选择 管理密钥。
- 点击 添加密钥 ➡️ 创建新密钥,选择 JSON,然后下载密钥。
授予财务访问权限
位置:Google Play控制台
- 点击 所有应用 部分。
- 导航到 用户和权限。
- 点击 邀请新用户 并邀请在步骤2中创建的服务账户电子邮件。
- 在 帐户权限 选项卡下,分配以下权限:
- 查看应用信息和下载批量报告(只读)
- 查看财务数据、订单和取消调查响应
- 管理订单和订阅
- 在 应用权限 选项卡下选择您的应用。
- 发送邀请并确保帐户处于活动状态。
4. 提供JSON凭据给API
5. 上传签名APK/Android应用包
位置:Google Play控制台
确保以下内容:
- 已上传签名APK或Android应用包。
- 发布版本在 封闭测试轨道 或 开放测试轨道 中,并且已添加测试人员。
- 订阅处于 活动 状态。
6. 创建主题和订阅
位置:Google Cloud控制台
创建主题
- 访问 创建主题
- 输入主题ID(通常是应用名称),保持其他默认选项不变。
- 点击 创建。
重要注意事项:添加以下角色/主体
-
Pub/Sub Admin (1)
- 邮箱:
your-project@your-project.iam.gserviceaccount.com
- 邮箱:
-
Pub/Sub Publisher (2)
- 邮箱:
google-play-developer-notifications@system.gserviceaccount.com
- 邮箱:
your-project@your-project.iam.gserviceaccount.com
- 邮箱:
创建订阅
- 访问 创建订阅
- 选择之前创建的主题。
- 将交付类型设置为 Push 并保持所有默认选项。
- 在 Endpoint URL 中添加API开发人员提供的服务器URL。
- 点击 创建。
重要注意事项:添加以下角色/主体
- Pub/Sub Subscriber (2)
- 邮箱:
google-play-developer-notifications@system.gserviceaccount.com
- 邮箱:
your-project@your-project.iam.gserviceaccount.com
- 邮箱:
在货币化中添加主题
位置:Google Play控制台
- 前往 通过Play进行货币化。
- 点击 货币化设置。
- 在 管理通知部分,勾选 启用实时通知。
- 在 Google Play计费 下添加在上一步中创建的主题名称。
- 在 订阅 下,选择 订阅、作废购买和所有一次性产品。
Apple App Store设置
此指南概述了配置您的应用以支持Apple App Store所需的步骤。App-Specific Shared Secret、In-App Purchase Key 和 App Store Connect API Key 对于无缝的订阅管理、产品导入和应用内购买配置至关重要。
设置
1. 生成App-Specific Shared Secret
按照以下步骤在App Store Connect中生成一个 App-Specific Shared Secret:
- 登录到App Store Connect
- 访问 App Store Connect 并使用Apple开发者凭证登录。
- 导航到您的应用
- 从仪表板进入 “我的应用” 并选择要配置的应用。
- 访问共享秘密部分
- 在左侧菜单中,进入 “常规” 下的 “应用信息”。
- 在右侧找到 “App-Specific Shared Secret” 并点击 “管理”。
- 生成并复制共享秘密
- 如果不存在,点击 “生成共享秘密”;否则复制现有共享秘密。
- 安全保存共享秘密,因为它将在下一步中使用。
2. 分享共享秘密给API开发人员
应用内购买密钥配置
当设置一个新的App Store应用时,您需要添加一个 In-App Purchase Key。此配置步骤是为了提供准确的国家、货币和定价信息,并启用功能如订阅优惠和订单ID查询。
重要注意事项:
- 将应用内购买密钥添加到已有交易的应用中可能会更改历史数据,因为以前的估计数据将被Apple提供的数据纠正。
- 订阅是一种应用内购买,因此应用内购买密钥适用于所有类型的购买,包括消耗品、非消耗品和订阅。
1. 生成应用内购买密钥
- 导航到应用内购买设置
- 在App Store Connect中,转到 用户和访问 → 集成 → 应用内购买。
- 生成或访问密钥
- 点击 生成应用内购买密钥,或者如果已存在密钥,点击 Active 表头旁边的 “+” 符号。
- 输入密钥名称并确认。
- 下载密钥
- 生成后,密钥将出现在 Active Keys 下。
- 下载 .p8密钥文件 并安全存储。
2. 与API开发人员分享应用内购买密钥
3. 提供发行人ID
- 定位发行人ID
- 在App Store Connect中,导航到 用户和访问 → 集成 → 应用内购买。
- 发行人ID位于页面顶部。
注意:如果发行人ID缺失,创建一个 App Store Connect API密钥 来生成发行人ID。
App Store Connect API密钥配置
1. 创建App Store Connect API密钥
- 导航到App Store Connect
- 在App Store Connect中,转到 用户和访问 → 集成 → App Store Connect API。
- 创建新的API密钥
- 点击 创建API密钥 并将访问级别设置为 App Manager 或更高。
- 创建后,下载API密钥的 .p8文件 并记录 Issuer ID(位于“Active”表上方)。
重要注意事项:此密钥只能下载一次,请妥善保管。
2. 添加服务器通知
- 选择您的应用。
- 在 General 下进入 App Information。
- 在 App Store服务器通知 下添加由API开发人员提供的生产环境和沙盒环境服务器URL。
完整示例代码
以下是一个完整的示例代码,展示如何在Flutter中使用eb_purchase插件:
// example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:eb_purchase/eb_purchase.dart'; // 引入eb_purchase插件
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Flutter Demo',
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final EbPurchase _purchase = EbPurchase(); // 初始化插件实例
Future<void> initiatePurchase() async {
try {
// 开始购买流程
await _purchase.initiatePurchase('product_id');
print("购买成功!");
} catch (e) {
print("购买失败: $e");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter eb_purchase示例'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePurchase,
child: Text('开始购买'),
),
),
);
}
}
更多关于Flutter购买管理插件eb_purchase的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
eb_purchase
是一个用于 Flutter 的应用内购买(In-App Purchase)管理插件。它简化了应用内购买流程,支持 iOS 和 Android 平台。以下是如何使用 eb_purchase
插件的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 eb_purchase
依赖:
dependencies:
flutter:
sdk: flutter
eb_purchase: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Dart 代码中,首先需要初始化 eb_purchase
插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:eb_purchase/eb_purchase.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EbPurchase.init();
runApp(MyApp());
}
3. 获取产品信息
在应用启动后,你可以获取应用内购买的产品信息。首先,你需要在应用商店(如 Google Play 或 App Store)中配置产品 ID。然后,使用 EbPurchase.getProducts
方法获取产品信息:
List<String> productIds = ['com.example.product1', 'com.example.product2'];
List<ProductDetails> products = await EbPurchase.getProducts(productIds);
4. 发起购买
当用户选择购买某个产品时,你可以使用 EbPurchase.buyProduct
方法发起购买:
ProductDetails product = products[0]; // 假设用户选择了第一个产品
PurchaseDetails purchaseDetails = await EbPurchase.buyProduct(product);
5. 处理购买结果
购买完成后,你可以通过 purchaseDetails
对象来处理购买结果:
if (purchaseDetails.status == PurchaseStatus.purchased) {
// 购买成功,处理相关逻辑
print('Purchase successful: ${purchaseDetails.productID}');
} else if (purchaseDetails.status == PurchaseStatus.error) {
// 购买失败,处理错误
print('Purchase failed: ${purchaseDetails.error}');
}
6. 恢复购买
对于非消耗型产品(如订阅或永久解锁功能),你可以提供“恢复购买”功能,以便用户在重新安装应用或更换设备后恢复之前的购买:
List<PurchaseDetails> restoredPurchases = await EbPurchase.restorePurchases();
for (var purchase in restoredPurchases) {
if (purchase.status == PurchaseStatus.purchased) {
// 处理恢复的购买
print('Restored purchase: ${purchase.productID}');
}
}
7. 处理订阅
如果你有订阅型产品,你可以使用 EbPurchase.getSubscriptions
方法获取订阅信息,并使用 EbPurchase.buySubscription
方法发起订阅购买:
List<String> subscriptionIds = ['com.example.subscription1'];
List<ProductDetails> subscriptions = await EbPurchase.getSubscriptions(subscriptionIds);
ProductDetails subscription = subscriptions[0];
PurchaseDetails purchaseDetails = await EbPurchase.buySubscription(subscription);
8. 监听购买状态
你还可以通过监听购买状态来实时处理购买事件:
EbPurchase.purchaseStream.listen((purchaseDetails) {
if (purchaseDetails.status == PurchaseStatus.purchased) {
// 处理购买成功
} else if (purchaseDetails.status == PurchaseStatus.error) {
// 处理购买失败
}
});