用于 Google Pay 的 Flutter 应用内购买工具
Posted
技术标签:
【中文标题】用于 Google Pay 的 Flutter 应用内购买工具【英文标题】:Flutter In-App Purchase Implement For Google Pay 【发布时间】:2020-09-13 00:47:39 【问题描述】:我正在尝试使用 Flutter Dart 从 android Java 更新我在 Google Play 商店中的现有应用程序。在我现有的应用程序中,我有一个使用谷歌支付的应用内购买,它运行良好(使用 android java 编码),但我正在寻找如何使用颤振飞镖实现谷歌支付应用内购买。
【问题讨论】:
你检查过这个链接github.com/square/in-app-payments-flutter-plugin/blob/master/… 是的,我做了但没有工作。我尝试了github.com/baranyildirim/google_pay,它工作并启动了 Google Pay,但 G pay 显示无法识别的应用程序。我想我必须改变 await GooglePay.initializeGooglePay("pk_test_H5CJvRiPfCrRS44bZJLu46fM00UjQ0vtRN");要我的,但不知道如何等待 \"pk_test_H5CJvRiPfCrRS44bZJLu46fM00UjQ0vtRN" 在 Apple App Store 和/或 Google Play Store 上为数字商品收款的原生移动应用程序通常需要使用 In-App Purchases API,这意味着 Stripe 和 Paypal 等服务无法使用问题(实物运输货物的付款除外)。试试这个官方的flutter插件pub.dev/packages/in_app_purchase 【参考方案1】:我发现 GooglePay 不是支付网关,而是通往网关的阶梯,因此您必须将支付网关系统与谷歌集成,从列表中我推荐 STRIPE。我将在下面解释。
我遇到了两个。实现这一目标的选项。
-
Google Pay plugin - 这会自动使用 STRIPE 支付网关。
Flutter Google Pay - 这有多个您可以使用的自定义支付网关。
要求
确保您已设置条带帐户 - 如果您尚未访问 Stripe Payment Gateway 设置您的帐户
第一个插件Google Pay plugin 确保使用您的条带支付密钥初始化插件
GooglePay.initializeGooglePay("pk_test_H5CJvRiPfCrRS44bZJLu46fM00UjQ0vtRN");
这个插件的代码结构是这样的。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:google_pay/google_pay.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget
@override
_MyAppState createState() => _MyAppState();
class _MyAppState extends State<MyApp>
String _platformVersion = 'Unknown';
String _googlePayToken = 'Unknown';
@override
void initState()
super.initState();
initPlatformState();
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async
String platformVersion;
// Platform messages may fail, so we use a try/catch PlatformException.
try
platformVersion = await GooglePay.platformVersion;
on PlatformException
platformVersion = 'Failed to get platform version.';
await GooglePay.initializeGooglePay("pk_test_H5CJvRiPfCrRS44bZJLu46fM00UjQ0vtRN");
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(()
_platformVersion = platformVersion;
);
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
children: <Widget>[
Text('Running on: $_platformVersion\n'),
Text('Google pay token: $_googlePayToken\n'),
FlatButton(
child: Text("Google Pay Button"),
onPressed: onButtonPressed,
)
]
),
),
),
);
void onButtonPressed() async
setState(()_googlePayToken = "Fetching";);
try
await GooglePay.openGooglePaySetup(
price: "5.0",
onGooglePaySuccess: onSuccess,
onGooglePayFailure: onFailure,
onGooglePayCanceled: onCancelled);
setState(()_googlePayToken = "Done Fetching";);
on PlatformException catch (ex)
setState(()_googlePayToken = "Failed Fetching";);
void onSuccess(String token)
setState(()_googlePayToken = token;);
void onFailure()
setState(()_googlePayToken = "Failure";);
void onCancelled()
setState(()_googlePayToken = "Cancelled";);
第二个插件Flutter Google Pay使用其他支付网关
你可以在这里查看列表Payment Gateways
这个插件有两种初始化方法 - 使用条带或其他网关
对于 Stripe,请使用此方法并使用您的 STRIPE 密钥初始化 _makeStripePayment() 异步 var 环境 = '休息'; // 或“生产”
if (!(await FlutterGooglePay.isAvailable(environment)))
_showToast(scaffoldContext, 'Google pay not available');
else
PaymentItem pm = PaymentItem(
stripeToken: 'pk_test_1IV5H8NyhgGYOeK6vYV3Qw8f',// stripe public key
stripeVersion: "2018-11-08",
currencyCode: "usd",
amount: "0.10",
gateway: 'stripe');
FlutterGooglePay.makePayment(pm).then((Result result)
if (result.status == ResultStatus.SUCCESS)
_showToast(scaffoldContext, 'Success');
).catchError((dynamic error)
_showToast(scaffoldContext, error.toString());
);
对于其他支付网关
_makeCustomPayment() async
var environment = 'rest'; // or 'production'
if (!(await FlutterGooglePay.isAvailable(environment)))
_showToast(scaffoldContext, 'Google pay not available');
else
///docs https://developers.google.com/pay/api/android/guides/tutorial
PaymentBuilder pb = PaymentBuilder()
..addGateway("example")
..addTransactionInfo("1.0", "USD")
..addAllowedCardAuthMethods(["PAN_ONLY", "CRYPTOGRAM_3DS"])
..addAllowedCardNetworks(
["AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"])
..addBillingAddressRequired(true)
..addPhoneNumberRequired(true)
..addShippingAddressRequired(true)
..addShippingSupportedCountries(["US", "GB"])
..addMerchantInfo("Example");
FlutterGooglePay.makeCustomPayment(pb.build()).then((Result result)
if (result.status == ResultStatus.SUCCESS)
_showToast(scaffoldContext, 'Success');
else if (result.error != null)
_showToast(context, result.error);
).catchError((error)
//TODO
);
【讨论】:
我需要在美国才能注册 Stripe 帐户吗? 如果您没有谷歌支持的支付服务提供商或网关,您可以访问此网址申请使用商家帐户(直接)来代替Google Support【参考方案2】:在应用内使用 g pay 应该没有问题。无需为此编写特定代码。您只需要确保在 Google 计费平台中设置您的商家即可。看看这个教程https://medium.com/flutter-community/in-app-purchases-with-flutter-a-comprehensive-step-by-step-tutorial-b96065d79a21
【讨论】:
以上是关于用于 Google Pay 的 Flutter 应用内购买工具的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 的底部工作表中集成 Google Pay