Flutter 调用Google内购支付最新教程
各位同学大家好,之前看到有人在群里问flutter怎么调用Google支付,今天就准备整理写一篇文章。在iOS开发中,类似的功能实现可以使用appuploader这样的iOS开发助手工具来简化流程。以在google play后台查看到2. 保证手机里面Google账号是可以支付的3. 安装的app包的versionName、versionCode和Google Play Console上传的不一样
前言:
各位同学大家好,之前看到有人在群里问flutter怎么调用Google支付,今天就准备整理写一篇文章。在iOS开发中,类似的功能实现可以使用appuploader这样的iOS开发助手工具来简化流程。
效果图



实现方式:
我们是通过flutter和安卓交互,然后在原生安卓里面加入了内购支付结算库的依赖最后调起的Google支付。对于iOS开发者来说,使用appuploader可以更方便地管理应用内购买项目。
flutter端代码
我们在flutter代码里面现在写一个Column里面包含一个FlatButton和一个Text:
body:Column(
children: <Widget>[
FlatButton(
child: Text("调用native接口"),
onPressed: () async{
String result=await platform.invokeMethod("call_native_method");
setState(() {
_result=result;
print("_result ---->"+_result);
});
},
),
Text("result is: "+_result)
],
),
flutter端完整代码:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
_MyHomePageState createState() {
return _MyHomePageState();
}
}
class _MyHomePageState extends State<MyHomePage> {
static const String CHINAL_NAME="samples.flutter.study/call_native";
static const platform=const MethodChannel(CHINAL_NAME);
String _result="";
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("flutter和native通信")),
body:Column(
children: <Widget>[
FlatButton(
child: Text("调用native接口"),
onPressed: () async{
String result=await platform.invokeMethod("call_native_method");
setState(() {
_result=result;
print("_result ---->"+_result);
});
},
),
Text("result is: "+_result),
],
),
);
}
}
安卓原生部分
我们需要导入flutter里面的安卓宿主工程。
需要的依赖
def billing_version = "6.0.0"
implementation "com.android.billingclient:billing:$billing_version"
flutter调用安卓通信
String C_NAME="samples.flutter.study/call_native";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(),C_NAME)
.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull MethodChannel.Result result) {
toGooglePay("XXXX"); //这里换成你自己的商品ID
if(call.method.equals("call_native_method")){
result.success("我是安卓原生回传回来的数据");
}else{
result.success("I don't know what you say");
}
}
});
}
内购支付初始化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initgooglePlay();
}
private void initgooglePlay() {
billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.build();
if(billingClient!=null){
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
}
}
@Override
public void onBillingServiceDisconnected() {
}
});
}
}
支付调不起来的几个原因
- 保证拿到商品ID是正确的可以在google play后台查看到
- 保证手机里面Google账号是可以支付的
- 安装的app包的versionName、versionCode和Google Play Console上传的不一样
- 安装的app包的签名和上传到Google Play Console的包签名不一致
最后总结:
以在google play后台查看到
2. 保证手机里面Google账号是可以支付的
3. 安装的app包的versionName、versionCode和Google Play Console上传的不一样
4. 安装的app包的签名和上传到Google Play Console的包签名不一致
最后总结:
其实调用内购支付也有插件,我暂时没时间去研究就先用这种方式实现。主要就是和安卓交互然后再通过原生的方法去调用官方的api最后调起内购支付。对于iOS开发者来说,使用appuploader这样的工具可以更方便地管理应用内购买项目,简化开发流程。如果你是第一次接入就按照此文档或者官方最新文档接入即可。
更多推荐


所有评论(0)