wordpress+留言本什么程序做网站容易优化

pingmian/2026/1/19 23:49:16/文章来源:
wordpress+留言本,什么程序做网站容易优化,网站建设 盈利,樱桃电视剧西瓜视频在线观看最近有时间#xff0c;特意整理了一下之前使用过的Flutter平台的海外支付#xff0c;附源码及demo可供参考 这篇文章只记录Google支付的详细流程#xff0c;相关Flutter文章链接如下#xff1a; 【原创 附源码】Flutter集成Apple支付详细流程(附源码) 【原创 附源码】Flu…最近有时间特意整理了一下之前使用过的Flutter平台的海外支付附源码及demo可供参考 这篇文章只记录Google支付的详细流程相关Flutter文章链接如下 【原创 附源码】Flutter集成Apple支付详细流程(附源码) 【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程​​​​​​​ 【原创 附源码】Flutter安卓及iOS海外登录--Tiktok登录最详细流程 【原创 附源码】Flutter安卓及iOS海外登录--Facebook登录最详细流程 【原创 附源码】Flutter安卓及iOS海外登录--Apple登录最详细流程 让我们开始吧 一 google平台配置 首先进入谷歌开发者平台记得科学上网 https://developers.google.com/?hlzh-cn 进入开发者平台之后点击google play创建我们的APP 点击登录管理中心 创建完我们的APP之后就可以开始配置支付的功能。需要注意的是在进行谷歌支付测试的时候需要先提交一个封闭测试版本及以上等级例如公开版本的包然后才可以去创建应用内支付的商品等这个包提交审核通过之后才可以开始进行谷歌支付的测试。 点击创建轨道 点击创建新的发布版本 签名选择Google管理签名然后上传aab格式的release版本的包aab版本的包在这里生成 点开Build选择Generate Signed Bundle/APK 然后选择app bundle 然后一路next最后选择release版本然后finish 然后在输出控制台的build选项卡即可找到刚刚打出来的aab包 然后上传就可以了。 上传完成之后此时就可以配置应用内商品了点击这里进行添加配置 添加完成后记得激活不然即使审核通过之后测试的时候也获取不到该商品 点击这里激活商品 这个时候商品的配置就完成了。 接下来添加测试账户进入封闭测试页面切换到【测试用户选项卡】然后创建测试群组在群组里添加测试人员账户即可 当你的APP审核通过之后这个页面下方的测试人员参与方式便会生效如下所示 就可以将这些链接发给测试人员让他们去安装进行测试购买。 最后修改一下测试政策状态 选中测试群组然后将政策状态改为LICENSED OK配置完成 二 flutter 代码集成 使用到的第三方插件 in_app_purchase: ^3.1.5 插件官网地址https://pub.dev/packages/in_app_purchase 将插件添加至yaml文件然后执行flutter pub get 执行完了记得去IOS和安卓端分别执行pod install 和 gradle sync同步一下第三方插件 然后在项目中新建dart文件命名为BuyEngine.dart 然后将以下代码放入 import dart:async; import dart:io;import package:in_app_purchase/in_app_purchase.dart; import package:in_app_purchase_storekit/in_app_purchase_storekit.dart; import package:in_app_purchase_android/in_app_purchase_android.dart;class BuyEngin{StreamSubscriptionListPurchaseDetails _subscription;InAppPurchase _inAppPurchase;ListProductDetails _products; //内购的商品对象集合//初始化购买组件void initializeInAppPurchase() {// 初始化in_app_purchase插件_inAppPurchase InAppPurchase.instance;//监听购买的事件final StreamListPurchaseDetails purchaseUpdated _inAppPurchase.purchaseStream;_subscription purchaseUpdated.listen((purchaseDetailsList) {_listenToPurchaseUpdated(purchaseDetailsList);}, onDone: () {_subscription.cancel();}, onError: (error) {error.printError();print(购买失败了);});}void resumePurchase(){_inAppPurchase.restorePurchases();}/// 加载全部的商品void buyProduct(String productId) async {print(请求商品id productId);ListString _outProducts [productId];final bool available await _inAppPurchase.isAvailable();if (!available) {// ToastUtil.showToast(无法连接到商店);print(无法连接到商店);return;}//开始购买// ToastUtil.showToast(连接成功-开始查询全部商品);print(连接成功-开始查询全部商品);ListString _kIds _outProducts;final ProductDetailsResponse response await _inAppPurchase.queryProductDetails(_kIds.toSet());print(商品获取结果 response.productDetails.toString());if (response.notFoundIDs.isNotEmpty) {// ToastUtil.showToast(无法找到指定的商品);print(无法找到指定的商品);// ToastUtil.showToast(无法找到指定的商品 数量 response.productDetails.length.toString());return;}// 处理查询到的商品列表ListProductDetails products response.productDetails;print(products products.length.toString());if (products.isNotEmpty) {//赋值内购商品集合_products products;}print(全部商品加载完成了可以启动购买了,总共商品数量为${products.length});//先恢复可重复购买// await _inAppPurchase. ();startPurchase(productId);}// 调用此函数以启动购买过程void startPurchase(String productId) async {print(购买的商品id为 productId);if (_products ! null _products.isNotEmpty) {// ToastUtil.showToast(准备开始启动购买流程);try {ProductDetails productDetails _getProduct(productId);print(一切正常开始购买,信息如下title: ${productDetails.title} desc:${productDetails.description} price:${productDetails.price} currencyCode:${productDetails.currencyCode} currencySymbol:${productDetails.currencySymbol});_inAppPurchase.buyConsumable(purchaseParam: PurchaseParam(productDetails: productDetails));} catch (e) {e.printError();print(购买失败了);}} else {print(当前没有商品无法调用购买逻辑);}}// 根据产品ID获取产品信息ProductDetails _getProduct(String productId) {return _products.firstWhere((product) product.id productId);}/// 内购的购买更新监听void _listenToPurchaseUpdated(ListPurchaseDetails purchaseDetailsList) async {for (PurchaseDetails purchase in purchaseDetailsList) {if (purchase.status PurchaseStatus.pending) {// 等待支付完成_handlePending();} else if (purchase.status PurchaseStatus.canceled) {// 取消支付_handleCancel(purchase);} else if (purchase.status PurchaseStatus.error) {// 购买失败_handleError(purchase.error);} else if (purchase.status PurchaseStatus.purchased || purchase.status PurchaseStatus.restored) {// ToastUtil.showToast(DataConfig.getShowName(Pay_Success_Tip));//完成购买, 到服务器验证if (Platform.isAndroid) {var googleDetail purchase as GooglePlayPurchaseDetails;checkAndroidPayInfo(googleDetail);} else if (Platform.isIOS) {var appstoreDetail purchase as AppStorePurchaseDetails;checkApplePayInfo(appstoreDetail);}}}}/// 购买失败void _handleError(IAPError iapError) {// ToastUtil.showToast(${DataConfig.getShowName(Purchase_Failed)}${iapError?.code} message${iapError?.message});}/// 等待支付void _handlePending() {print(等待支付);}/// 取消支付void _handleCancel(PurchaseDetails purchase) {_inAppPurchase.completePurchase(purchase);}/// Android支付成功的校验void checkAndroidPayInfo(GooglePlayPurchaseDetails googleDetail) async {_inAppPurchase.completePurchase(googleDetail);print(安卓支付交易ID为 googleDetail.purchaseID);print(安卓支付验证收据为 googleDetail.verificationData.serverVerificationData);}/// Apple支付成功的校验void checkApplePayInfo(AppStorePurchaseDetails appstoreDetail) async {_inAppPurchase.completePurchase(appstoreDetail);print(Apple支付交易ID为 appstoreDetail.purchaseID);print(Apple支付验证收据为 appstoreDetail.verificationData.serverVerificationData);}overridevoid onClose() {if (Platform.isIOS) {final InAppPurchaseStoreKitPlatformAddition iosPlatformAddition _inAppPurchase.getPlatformAdditionInAppPurchaseStoreKitPlatformAddition();iosPlatformAddition.setDelegate(null);}_subscription.cancel();}} 至此集成完毕开始测试谷歌支付 三 支付测试  在调用谷歌支付的地方提前初始化购买插件 BuyEngin _buyEngin BuyEngin(); _buyEngin.initializeInAppPurchase(); 然后调用即可 _buyEngin.buyProduct(应用内商品ID);应用内商品ID就是你在google开发者中心配置的应用内购买商品的product ID 如果一切正常则会正常唤醒谷歌支付记得是在科学上网的环境下测试 支付完成后可以看到可以正常获取到交易的ID和交易的验证收据为了避免被第三方恶意刷购买接口来进行非法购买建议将该收据上传后端服务器进行验证验证通过之后再去更新用户的购买信息。 Ok ,集成完毕功德1 源码地址 GitHub - TheRuningAnt/FGTALogin: 使用Flutter 去集成海外平台第三方登录包含Google、Tiktok、Facebook、Apple登录  注直接调用该demo的谷歌支付无法支付成功因为该demo使用的安卓包名是测试包名并未正式上线但是功能是经过使用真实上线的包名支付验证过的如上截图所示。如需使用该demo进行谷歌支付测试可将安卓包名替换为你自己的审核通过的包名然后进行测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可以做360度全景图的网站wordpress编辑器好麻烦

为什么同样是上网,同样是做生意,可是有人单都做不完,有人却接不到订单,这是为何呢?我从去年下半年一路走来,虽说一年多了,大的成绩没什么,可还算可以吧.比上不足,比下还是有余.最先接触电子商务平台的是阿里.然后就是化工报价网www.chembj.com了.再者其他的一些网站.好了,闲话…

ps切片怎么做网站网络营销推广seo

邻家怪蜀黍 2015.10.06 , 10:06 pm——量子计算功耗知多少google的量子智能实验室刚刚制造的最新的计算机可能是目前第一台商业量子计算机了。而这台新型的计算机能够比传统计算机更快的、使用相对更少的功耗来完成相同的计算任务。不过量子计算到底能节约多少功耗目前还是个迷…

简单网站建设优化wordpress customize.php

六 代码重构 对于需要反复编写的这种代码,可以将其抽取到工具类中,简化开发,以及将可能会修改的值抽取到properties文件中,解决硬编码的问题 工具类 public class JDBCUtil {private static Connection connectionnull;/*加载驱动…

跨境商旅客户ppt信息流优化师

(1)发送信号传参 前面已经知道从一个进程向另一个进程发送信号可以使用kill函数,但是kill函数在向进程发送信号的时候不能携带除了信号以外的其他信息,这时可以使用与kill相对应的sigqueue函数,该函数也是向一个进程发…

网站做301重定向怎么做wordpress 百度收录

前言 很多时候,一些小洞可以通过平滑算法,或者三角化算法的参数调整,即可对较小的孔洞进行填充,但是较大的洞却很难通过上面的算法进行填充。 下面介绍一种填充孔洞的思路: 步骤一:对点云进行滤波处理,找到孔洞所在平面 本文为了更直观的进行讲解,去掉了去除噪声和…

备案网站建设方案南宁网站开发外包报价

keyof 是 TypeScript 中的一个操作符,它用于获取一个类型的所有属性名(键)组成的联合类型。 使用 keyof 操作符可以在编译时获得一个类型的属性名,然后将这些属性名作为联合类型进行处理或操作。它可以用于访问对象的属性&#x…

响应式网站开发原则程序员自己做网站怎么能来钱

0x01 zlib和其他压缩的魔术头 一般来说压缩文件都有个魔术头,用于区分不同的压缩文件对应不同的解压缩算法。 7z文件: 00000000 37 7A BC AF 27 1C 00 03 CD F7 CC 2E 66 6A 33 00 7z集 枉?fj3 tar.xz文件 00000000 FD 37 7A 58 5A 00 00 04 E6 D6 B4 …

企业网站的建设多少钱js 网站怎么做中英文

哈喽大家好,我是咸鱼 最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了 T﹏T 刚好最近在学 Kafka,于是决定写篇跟 Kafka 相关的文章(文中有不对的地方欢迎大家指出)…

成都创新网站建设php网站如何做特效

获得属性值 itnode . 属性名称          //只能操作w3c规定内容 itnode . getAttribute(属性名称)    //规定的 和 自定义的都可以获取 设置属性值 itnode . 属性名称 值        //只能操作w3c规定的属性 itnode . setAttribute(名称,值) …

域名怎么做网站吉林seo网络推广

一.模块的简介 什么是模块: 模块就是一系列功能的结合体 模块的三种来源: 1.内置的 2.第三方的  3.自定义的 模块的四种表现形式: 1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)(***)    2.已被编译为共享库或DLL的C或C扩展…

phpmysql网站京东网站建设缺点

很多朋友问我如何开发一个成功的Teams Bot,他们说Bot Framework SDK看起来简单,但是真要的去开发一款成熟的bot,很多地方还是不知道如何使用。我从最早的bot framework还在beta的时候开始用,后来framework经历了多次大的改动&…

网站建设的经验做法app开发 网站建设

漏电保护器 漏电保护器是低压线路中最常用的保护器之一,简称漏保,又称漏电开关或漏电断路器。漏电保护器除了具有空开的所有保护功能外,还具备漏电保护功能。 需要了解 一根通电导线可以产生磁场,磁场与电流方向遵循右手螺旋关…

做网站月薪wordpress博客站模板下载

转载自 阿里巴巴制定了这 16 条 本文内容整理自《阿里巴巴Java开发手册 1.4.0》,获取完整版请在公众号后台回复关键字:手册。 1、【强制】存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。 说明:有缺陷的底层数…

信托公司网站建设seo 海外

1. 题目 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 “croak” )的组合。 由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不同青蛙的…

网店网站设计品牌营销做得好的品牌有哪些

[react-router] React-Router的路由有几种模式? 1、BrowserRouter:浏览器的路由方式,也就是在开发中最常使用的路由方式 2、HashRouter:在路径前加入#号成为一个哈希值,Hash模式的好处是,再也不会因为我们…

网站建设道冲百度手机助手应用商店下载

在老旧的系统环境下使用Rust开发工具 笔者的一台硬件资源紧张的旧电脑安装了Ubuntu-12.04,希望在其上运行比较新的Rust开发工具,但却发现其因glibc较老,不能正常运行cargo工具,结果如下: yejqUNIX:~$ uname -a Linux…

爱奇艺做任务领vip网站学而思网校官网

目录 ​编辑 一.什么是智能指针 1.RAII 2.智能智能指针 二.为什么需要智能指针 1.内存泄漏 a. 什么是内存泄漏,内存泄漏的危害 b.内存泄漏分类 c.如何检测内存泄漏 d.如何避免内存泄漏 总结一下: 2.为什么需要智能指针以及智能指针的原理 三.智能指针的使用 1.C…

高密做网站哪家好代理义乌百度广告公司

概要 在 es 中,一个字段可能运用于不同的场景,但是某个字段类型的使用场景是有局限的 下面,我们先来看一段 es 查询语句: $must ["bool" > ["should" > [["range" > ["user_id.r…

网站开发的软件环境中国水电建设招标网站

目录 步骤一:首先确认自己是否已经安装JDK步骤二:下载安装Tomcat步骤三:Tomcat配置环境变量步骤四:验证Tomcat配置是否成功步骤五:为IDEA配置Tomcat 步骤一:首先确认自己是否已经安装JDK jdk各版本通用安装…

网站301做下佛山公司官网制作哪家好

以下为阅读《Linux命令行与shell脚本编程大全 第3版》的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:转载于:https://www.cnblogs.com/guochaoxxl/p/7888810.html