微信小游戏/抖音小游戏SDK接入踩坑记录

文章目录

  • 前言
  • 问题记录
    • 1、用是否存在 wx 这个 API 来判断是微小平台还是抖小平台不生效
    • 2、微小支付的参数如何获取?
    • 3、iOS 平台不支持虚拟支付怎么办?
      • 微小 iOS 端支付时序图:
      • 抖小 iOS 端支付:
    • 4、展示广告时多次回调 onClose
    • 5、在使用单例时 this 引起的 bug
    • 6、使用 fetch 或 axios 封装网络请求框架时编译报错

前言

上两篇文章写了如何搭建一个小游戏聚合SDK以及如何打包前端SDK,这篇文章会记录我在接入微小和抖小时遇到的问题及解决办法。

问题记录

1、用是否存在 wx 这个 API 来判断是微小平台还是抖小平台不生效

官方没有提供判断是微小环境和抖小环境的API,在聚合SDK里需要想办法判断当前环境然后调用对应环境的API,比如在微小环境下不能调用到抖音的登录。微小的API都是 wx 调用,抖音的API 都是 tt 调用,当使用这个区别来区分环境时发现并不生效,原因是抖小也引入了wx api 。需要查找其他办法。

**方法一:**可以根据小游戏 appId 来判断,微小 appIdwx 开头的,比如 wx05be1ceba191eb56 ,抖小的 appIdtt 开头的,比如:tt98abci12lhhiopw52

**方法二:**在官方 API 文档中查到各自特有方法判断,比如抖小的 API tt.getLaunchOptionsSync 微小就没有。另 tt.getLaunchOptionsSync 这个 api 可以获取抖小的小游戏 appIdwx.getAccountInfoSync 就是微小特有的 API。

// 平台检测
export function getPlatformType() {if (typeof wx.getAccountInfoSync !== 'undefined' && typeof wx.getSystemSetting === 'function') {return WeChatMiniSDK} else if (typeof tt.getLaunchOptionsSync !== 'undefined' && typeof tt.canIUse === 'function') {return DouyinMiniSDK} 
}

2、微小支付的参数如何获取?

根据微小支付文档API https://developers.weixin.qq.com/minigame/dev/api/midas-payment/wx.requestMidasPaymentGameItem.html 在前端调用微小支付接口时需要传递 paySigsignature ,但是这两个参数的参数签名都不是前端生成的,需要服务端生成。也就是在用户创建微小订单时需要先向开发者服务端获取签名信息,至于如何简化流程可以和开发者服务端商量。

3、iOS 平台不支持虚拟支付怎么办?

根据微小/抖小后台虚拟支付的开通里提示,虚拟支付是不支持 iOS 端的。经过调研现有小游戏,iOS 端的支付都是开发者另辟蹊径实现的。微小/抖小的流程也并不一致,下面分开说。

微小 iOS 端支付时序图:

在这里插入图片描述

  1. 用户发起支付
  2. CP创建订单,向中台前端SDK

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

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

相关文章

Python 3 教程第24篇(输入和输出)

Python3 输入和输出 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法,标准输…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

尚硅谷学习笔记——Java设计模式(一)设计模式七大原则

一、介绍 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,提出的解决方案。我们希望我们的软件能够实现复用性、高稳定性、扩展性、维护性、代码重用性,所以…

【iOS】知乎日报总结

文章目录 前言首页网络请求轮播图上滑加载图片请求 文章详情页WKWebView的使用点赞、收藏持久化——FMDB的使用 其他问题沙盒问题单元格点击其他 总结 前言 在系统学习了OC语言和UI控件后,知乎日报是第一个比较大的项目,耗时一个多月时间,里面…

网安瞭望台第6期 :XMLRPC npm 库被恶意篡改、API与SDK的区别

国内外要闻 XMLRPC npm 库被恶意篡改,窃取数据并部署加密货币挖矿程序 网络安全研究人员发现了一起在 npm 包注册表上活跃了一年多的软件供应链攻击。名为 0xengine/xmlrpc 的 npm 包最初是一个无害的库,基于 JavaScript,用于 Node.js 的 XML…

双向链表

目录 链表的分类 概念 双向链表的实现 ① 结构 ② 初始化 ③ 打印 ④ 插入数据 ⑤ 删除数据 ⑥ 查找数据 ⑦ 在pos位置之前插入数据 ⑧ 删除pos位置的数据 ⑨ 销毁链表 总结 链表的分类 虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构&…

怎么样才算得上熟悉高并发编程?

提到并发编程很多人就会头疼了;首先就是一些基础概念:并发,并行,同步,异步,临界区,阻塞,非阻塞还有各种锁全都砸你脸上,随之而来的就是要保证程序运行时关键数据在多线程…

PyCharm中Python项目打包并运行到服务器的简明指南

目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释…

clickhouse 分片键的重要性

文章目录 背景反思为啥出现问题为啥默认的语义是local 背景 问题背景 详细内容可以看这个 反思为啥出现问题 为啥会出现链接里出现的问题,对于goal join 和 join 语义不一样的问题,那是因为分片键设计不合理的情况 如果表a和表b 都是user_id 作分片键…

S4 UPA of AA :新资产会计概览

通用并行会计(Universal Parallel Accounting)可以支持每个独立的分类账与其他模块集成,UPA主要是为了支持平行评估、多货币类型、财务合并、多准则财务报告的复杂业务需求 在ML层面UPA允许根据不同的分类账规则对物料进行评估,并…

数据结构之堆:原理与实现

1. 什么是堆? 堆(Heap)是一种特殊的完全二叉树,它的每个节点都遵循以下性质之一: 最大堆(Max-Heap):每个节点的值都大于等于其子节点的值,根节点是最大值。最小堆&…

DreamCamera2相机预览变形的处理

最近遇到一个问题,相机更换了摄像头后,发现人像角度顺时针旋转了90度,待人像角度正常后,发现 预览时图像有挤压变形,最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示,顺时针旋…

GPT相关的学术库——收藏更新自用

GOT-OCR2.0 General OCR Theory: Towards OCR-2.0 via a Unified End-to-end Model https://github.com/Ucas-HaoranWei/GOT-OCR2.0/tree/main ChatPaper 工具名称工具作用是否在线?在线预览备注ChatPaper通过ChatGPT实现对论文进行总结,帮助科研人进…

LLM之学习笔记(一)

前言 记录一下自己的学习历程,也怕自己忘掉了某些知识点 Prefix LM 和 Causal LM区别是什么? Prefix LM (前缀语⾔模型)和 Causal LM(因果语言模型)是两者不同类型的语言模型,它们的区别在于生…

Python语法基础(三)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

用Pycharm安装manim

由于版本和工具的差异,manim的安装方式不尽相同。本文用Pycharm来安装manim. 一、准备工作:安装相应版本的python、pycharm和ffmpeg. 此处提供一种安装ffmpeg的方式 下载地址:FFmpeg 下载后,解压到指定目录。 配置环境变量&am…

【线程】Java多线程代码案例(2)

【线程】Java多线程代码案例(2) 一、定时器的实现1.1Java标准库定时器1.2 定时器的实现 二、线程池的实现2.1 线程池2.2 Java标准库中的线程池2.3 线程池的实现 一、定时器的实现 1.1Java标准库定时器 import java.util.Timer; import java.util.Timer…

云原生时代的轻量级反向代理Traefik

Traefik 是一个用于路由和管理网络流量的反向代理,同时也是一个支持多种协议(HTTP、HTTPS、TCP、UDP)的负载均衡器。它通过自动服务发现和动态配置,帮助开发者和运维团队轻松管理复杂的应用架构。 Traefik 的主要特点如下&#x…

JavaEE---计算机是如何工作的?

1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…

【C++】简单数据类型详解

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯字符型(char)1.1 ASCII 码表 💯整型(int)2.1 整型的分类2.2 有符号和无符号整型2.3 跨平台差异2.4 整型数据类型…