Flutter如何实现谷歌订阅支付

在Flutter应用中集成谷歌订阅支付功能时,应该使用哪个插件或SDK?具体的实现步骤是什么?需要注意哪些关键点比如验证订阅状态或处理退款?有没有推荐的最佳实践或常见问题的解决方案?

2 回复

Flutter中实现谷歌订阅支付,可使用in_app_purchase插件。步骤包括:

  1. 配置Google Play Console和商品。
  2. 初始化插件并加载商品。
  3. 监听购买流,处理购买逻辑。
  4. 验证收据并更新订阅状态。 注意遵守谷歌政策。

更多关于Flutter如何实现谷歌订阅支付的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现谷歌订阅支付,主要使用google_mobile_adsin_app_purchase插件。以下是实现步骤:

1. 环境配置

添加依赖

dependencies:
  in_app_purchase: ^3.1.15
  google_mobile_ads: ^2.5.0

Android配置

  • android/app/src/main/AndroidManifest.xml添加:
<uses-permission android:name="com.android.vending.BILLING" />

iOS配置

  • 在Xcode中启用In-App Purchases

2. 初始化支付

import 'package:in_app_purchase/in_app_purchase.dart';

class SubscriptionService {
  final InAppPurchase _inAppPurchase = InAppPurchase.instance;
  
  Future<void> initialize() async {
    final bool available = await _inAppPurchase.isAvailable();
    if (!available) {
      // 处理不支持应用内购买的情况
    }
  }
}

3. 获取订阅商品

Future<List<ProductDetails>> getSubscriptions() async {
  const Set<String> _kIds = {'subscription_monthly', 'subscription_yearly'};
  final ProductDetailsResponse response = 
      await _inAppPurchase.queryProductDetails(_kIds);
  
  if (response.notFoundIDs.isNotEmpty) {
    // 处理未找到的商品
  }
  
  return response.productDetails;
}

4. 发起订阅购买

Future<void> purchaseSubscription(ProductDetails product) async {
  final PurchaseParam purchaseParam = PurchaseParam(
    productDetails: product,
  );
  
  await _inAppPurchase.buyConsumable(purchaseParam: purchaseParam);
}

5. 监听购买状态

Stream<List<PurchaseDetails>> get purchaseUpdates => 
    _inAppPurchase.purchaseStream;

// 在初始化时监听
void listenToPurchases() {
  final Stream<List<PurchaseDetails>> purchaseStream = 
      _inAppPurchase.purchaseStream;
  
  _subscription = purchaseStream.listen((purchases) {
    _handlePurchases(purchases);
  });
}

void _handlePurchases(List<PurchaseDetails> purchases) {
  for (final purchase in purchases) {
    if (purchase.status == PurchaseStatus.purchased) {
      // 验证收据并授予订阅权限
      _verifyPurchase(purchase);
    }
  }
}

6. 验证购买凭证

建议在服务器端验证购买凭证,确保安全性:

Future<void> _verifyPurchase(PurchaseDetails purchase) async {
  // 将purchase.verificationData发送到服务器验证
  // 服务器使用Google API验证订阅状态
}

7. 恢复购买

Future<void> restorePurchases() async {
  await _inAppPurchase.restorePurchases();
}

重要注意事项:

  1. 测试环境:使用Google Play Console的测试账号进行测试
  2. 商品配置:在Google Play Console中正确配置订阅商品
  3. 服务器验证:务必在服务器端验证购买凭证
  4. 沙盒测试:使用com.android.vending.billing.InAppBillingService.BILLING测试

推荐做法:

  • 使用in_app_purchasecompletePurchase()确认购买完成
  • 定期检查订阅状态(使用服务器端验证)
  • 处理网络异常和用户取消的情况

通过以上步骤,你可以在Flutter应用中实现完整的谷歌订阅支付功能。记得在发布前充分测试各种购买场景。

回到顶部