十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这里实现flutter第三方地图导航,选用最简单的方式--调用第三方地图客户端;但各种地图客户端用的坐标系不一定相同,先了解下常见的坐标系:
站在用户的角度思考问题,与客户深入沟通,找到德惠网站设计与德惠网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖德惠地区。
地图应用api坐标系:
在 pubspec.yaml 文件中添加依赖插件:
一般android和ios调起第三方应用是通过scheme方式,这里调起第三方地图客户端导航也一样,如高德地图,ios scheme为iosamap,android scheme为androidamap; 所以flutter需要引用url_launcher;
未完待续~~
flutter作为一个相对来说比较新兴的框架,相比于其他框架来说避免不了存在生态不完善的问题。要想实现flutter直播,可以接入即构科技的Express Flutter SDK,然后通过集成、初始化SDK、登录房间服务器、用户推送自己的本地音视频、拉取远端的音视频流等简单五个步骤实现简单的实时音视频场景进行直播。
点击 “协议、税务和银行业务”
内购用的是付费应用程序,先签署《付费应用程序协议》,同意后状态变更为“用户信息待处理”,等待审核。
状态更改完毕后,点击“开始设置税务、银行业务和联系信息”。
(1)添加银行账户,按照要求填写相关内容即可。
(2)选择报税表,并填写。所有与 Apple 有商业合作者必选都是美国,若有其他需求,可以多选。
继续填写,首先认证公司基本信息,选择所有人类型,确认无误后认证条款处打对勾
Part I 部分,继续核对公司相关信息,选填内容可不填。
Part III 部分,签署税务条约,设置利益限制条款的种类,选填内容可不填。此部分如果需要可勾选上下图勾选框,不需要可不勾选,我们这个项目没有用到part III 部分,所以没有勾选。
Part XXX 部分,确认之前填写的信息,勾选完毕后,提交
(3)填写联系信息,共5个。高级管理、财务、技术、法务、营销。只需要提供5个人的基本信息即可。
只可使用一次的产品,使用之后即失效,必须再次购买。
示例: 钓鱼 App 中的鱼食。
只需购买一次,不会过期或随着使用而减少的产品。
示例: 游戏 App 的赛道。
允许用户在固定时间段内购买动态内容的产品。除非用户选择取消,否则此类订阅会自动续期。
示例: 每月订阅提供流媒体服务的 App。
允许用户购买有时限性服务的产品。此 App 内购买项目的内容可以是静态的。此类订阅不会自动续期。
示例: 为期一年的已归档文章目录订阅。
App 内购买项目的截屏,即所售项目的示意图。例如,如果 App 内购买项目是一本图书,您可以提交图书的截屏。您也可以提交购买页的截屏。该截屏仅用于 Apple 审核,不会在 App Store 中显示。
截屏要求如下:
iOS 至少需要 640 x 920 像素
Apple tvOS 需要 1920 x 1080 像素
macOS 需要 1280 x 800 像素
App 审核图像上传后,可以替换,但无法移除。当您的 App 内购买项目处于审核中时,您无法更新截屏。
沙箱账号是不能直接在App Store进行登录的,只能在点击了购买商品之后,在弹出的登录框进行登录 。
验证是否已登录沙箱测试账号:
设置--iTunes Store与App Store,页面拉到最底部,会看到沙箱账户项会列出你已登录的沙箱测试账号!
操作方法一:打开App Store应用首页滑到最下方--选中AppleID--注销
操作方法二:设置--iTunes Store与App Store--选中AppleID--注销
checks if the client can make payments(检测App是否能支付)
getAvailablePurchases
Get all non-consumed purchases 获取未消费的商品
打印信息查询;
原因:
没有先执行getProducts,直接执行requestPurchase方法,要先拉取商品列表,再执行购买操作.
问题描述;
1.漏单必须要处理,玩家花RMB购买的东西却丢失了,是绝对不能容忍的。所谓的漏单就是玩家已经正常付费,却没有拿到该拿的道具。
解决:只要购买成功,便将购买记录(receipt等账单信息)保存下来,然后将账单信息传送给我们游戏服务器,游戏服务器获得账单后,和苹果服务器验证,账单有效的话,回馈给游戏服务器处理,游戏服务器处理后,返回给游戏客户端处理,处理完毕,将本地保存的购买记录删除。
官方文档:向苹果校验支付凭证
21000 App Store无法读取你提供的JSON数据
21002 收据数据不符合格式
21003 收据无法被验证
21004 你提供的共享密钥和账户的共享密钥不一致
21005 收据服务器当前不可用
21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中
21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证 【请求sandbox校验支付凭证】
21008 收据信息是产品环境中使用,但却被发送到测试环境中验证
消耗类型: 例如:金币、道具等。
非续订订阅: non-renewable subscription 例如:VIP
您的首个 App 内购买项目必须以新的 App 版本提交。请创建您的 App 内购买项目,然后前往 App 的“App Store”页,从“App 内购买项目”中进行选择,点按“提交”。 了解更多
在上传二进制文件并提交首个 App 内购买项目以供审核后,您可以使用下表提交其他 App 内购买项目。
唐巧-iOS应用内付费(IAP)开发步骤列表
未完~待续
当使用内购购买过商品之后没有把这个交易关闭,所以再次去购买商品后就会调用以前已经购买成功的交易去购买因为已经购买过,才会有这个提示
原因:添加内购项目时,信息填写不完整,app审核图像未上传
处理方法:上传app审核图片( 合适的尺寸 ),点击提交,状态改为正在准备审核中。
这个是内购选择类型不匹配原因导致。
购买成功之后,Apple会返回以下四个数据给应用
Reference
Review the updated Paid Applications Schedule.
游客身份解决方案:即不登录也要能购买
1)服务器端做一个苹果审核机制,审核期间游客身份可以进行一切行为,一旦审核通过,修改服务端即可达到强制用户登录进行内购买的目的(这个有点。。。)
2)游客可以进行内购买,购买时以设备UUID为准,生成一个游客账号,将购买信息保存在服务器和本地,当用户登录正式账户后判断此设备是否进行过内购,有的话提示用户将游客身份购买的权益与现有账号绑定,如果绑定,游客权益则迁移到正式账户,如果不迁移,则游客身份和正是账户是两个独立账户,正式账户不享有游客身份的权益(我用的这个)
内购游客模式解决方案
iOS内购规则
本文讲解是的是,flutter 如何添加推送能力,极光推送也有一个插件,但是好像无法实现点击推送,让APP 冷启动并并进入对应的业务子页面。
最好的办法就是自己去实现一下,一方面增加交互的理解,还可以加深记忆,总之能自己造轮子的自己造一个。
在这里,我们公司采用的友盟推送,其实逻辑都差不多的,下面我们进入正题。
到这里基本上就算搞定了,但是点击推送的冷启动咋办,接下来
如果我们目前的项目是Android的,但是接下来我们希望部分页面可以使用Flutter进行开发,甚至我们希望在Native页面中嵌入FlutterUI组件,那么我们该如何实现呢?
假设你现在Android项目的目录的结构是这样的
这时候如果你想创建一个Flutter模块,使得Android模块和Flutter模块之间可以进行交互,我们可以通过Android Studio新建一个Flutter Module,具体过程是:File — New — New Module ,之后选择Flutter Module,指定Project Location的路径为
也就是说,最终你的项目结构会是这样的
接下来在Android Module的 build.gradle 文件中添加flutter依赖
先创建一个Flutter页面
这里比较重要的是 window.defaultRouteName 这个字段,这个字段可以接收从Native传递过来的参数 (下文我们会介绍原生传递参数的方法),也就是说通过这个字段我们就可以进行Flutter页面的路由的分发
我们可以直接在Android的 MainActivity 中启动一个 FlutterActivity ,这里的 initialRoute 方法中传递的参数就对应Flutter层的 window.defaultRouteName
注意:需要在 AndroidManifest.xml 注册 FlutterActivity
自己创建一个 FlutterAppActivity 继承自 FlutterActivity
在 MainActivity 中启动 FlutterAppActivity (另外别忘了在 AndroidManifest.xml 中注册 FlutterAppActivity )
两种启动方式的区别
如果单纯只是想打开一个Flutter页面,两种方式实际上基本没有太大区别,第一种方式也许还会更简单一点。但是,在Flutter开发中,我们往往还需要开发一些Native插件供Flutter调用,如果使用复写 FlutterActivity 的方式更有利于我们在 FlutterActivity 中注册我们的Native插件,所以实际开发中一般推荐使用第二种方式
扩展思考
initialRoute 从名称上看起来是Flutter提供给我们进行Native与Flutter交互的路由跳转的,但是实际上他就是一个字符串,我们不仅仅可以传递一个路由名称,有时候我们也可以通过这个参数传递一串JSON数据,然后在Flutter端进行解析,这样我们就可以通过这个参数做更多的事情
activity_main.xml
FrameLayout 用于承载Flutter组件
MainActivity.java
使用 FragmentManager 将 FlutterFragment 添加到 FrameLayout 容器中
运行结果
上半部分是原生的TextView,下半部分是Flutter的Text组件
本节主要介绍了Native和Flutter之间的页面跳转,以及同一个页面中Native与Flutter组件的组合。接下来会介绍如何编写Android插件与Flutter进行数据交互
在本博客中,我们将探讨Flutter中的堆叠式卡轮播。 我们还将实现一个演示程序,并学习在您的flutter应用程序中使用 stacked_card_carousel 包创建一个带有垂直轮播的堆叠卡。
用于创建带有堆叠卡片的垂直轮播的小部件。 下面的演示视频显示了如何在Flutter中创建带有垂直旋转木马的堆叠卡。 它显示了在您的flutter应用程序中如何使用stacked_card_carousel软件包来使用堆叠式卡轮播。 它显示了垂直圆盘传送带滑动卡的列表,所有卡向上滑动并堆叠,称为堆叠式卡传送带。 它会显示在您的设备上。
堆叠式卡轮播的一些属性是:
在lib文件夹中创建一个名为style_card.dart的新dart文件。
首先,我们创建StyleCard类,将在后续的DEMO中调用它
我们将制作一个 card 控件. 在card控件中, 我们加入一个elevation 属性和一个column控件。 在column中, 我们加入一个container用于包含image, title 和 description. 然后在stacked_card_demo页面中使用它。
在lib文件夹中创建一个新的名为stacked_card_demo.dart的dart文件。
现在,我们将创建一个styleCards列表,并在其中添加一个StyleCard类。
我们创建了八个卡片控件,并在其中添加了image,title和description。 程序运行后,我们将看到一个卡片列表, 当用户向上滑动时,所有卡片都将堆叠在一起; 当用户向下滑动时,卡片都将回到原始位置;
效果如下:
Demo地址: