背景:
前任以webview打包的方式配合公司前端同学制作的脚手架以小程序的方式将公司产品接入了支付宝渠道的小程序,然今年中下旬开始渠道那边通知建议接入小游戏渠道于是着手尝试。接入过程中遇到各种花式问题,故留文备忘。
QA:
1. Q:文档上部分接口同时提供了异步和同步实现的接口,标注了最早生效版本;然实际开发中发现图省事使用同步接口常会有api调用失败的情况。
A:统一使用异步接口。
2. Q:锁帧接口无效 / 开启音频导致的卡顿
A:使用10.5.16以上的支付宝app
3. Q:纹理渲染
A:实际表现来看接入前后没啥区别,该卡还是卡
4. Q:字体模糊
A:支付宝渠道小游戏对字体透明度预乘处理的实现和其他常见渠道有所出入,将对应控件的secBlendFactor设置为cc.macro.BlendFactor.ONE即可;
PS:如果是和我一样是已经开发完部分或各个渠道的资源在同一个分支,建议使用代码批量设置:
label["_srcBlendFactor"] = cc.macro.BlendFactor.ONE;
)
5. Q:banner广告接入部分手机报错61101或create失败或create后迟迟收不到回调,不论是successCallback还是failCallback
A:可能是传参中给的left和top过大引起的;注意使用getSystemInfo返回值里的window宽高(逻辑像素)而非screen宽高(物理像素)进行相关计算;
PS:ios目前(2023.09.05)发现一个问题是横屏游戏时,部分机型宽高的返回值反过来了
6. Q:缓存接口存在延时
A:支付宝缓存接口可以直接存取Object,个人实现是仅在启动游戏时读一次为cacheRoot,后续遇到需要读的地方实际上只是从cacheRoot中读取相应字段;存的话直接将当前的cacheRoot存进去
7. Q:文件操作差异
A:总体上说支付宝小游戏的文件api和微信小游戏的类似,需注意时支付宝api操作目录时记得去掉结尾的分隔符;
更为重要的一点是my.dowmloadFile接口,目前(2023.09.05)文档上和实际使用情况不一样,个人目前封装:
return new Promise<boolean>(resolve => {
try {
my.downloadFile({
url: url,
filePath: path,
success(res) {
console.log(AliPayPlatformNew.tag + `, timestamp: [${Date.now()}], `, `downloadFile success, url : ${url}, res: `, res);
return resolve(res.statusCode == 200);
},
fail(err) {
console.error(AliPayPlatformNew.tag + `, timestamp: [${Date.now()}], `, `downloadFile fail, url : ${url}, err: `, err);
return resolve(false);
},
});
} catch (error) {
console.error(AliPayPlatformNew.tag + `, timestamp: [${Date.now()}], `, `downloadFile error, url : ${url}, err: `, error);
return resolve(false);
}
});
主要分歧在于传参按文档说法的话是没有filePath用于指定下载后文件路径,取而代之在success回调中会有个 apFilePath指代下载文件的临时缓存路径。
8. Q:开发过程中有一台手机会出现在加载游戏是报【unzip failed:单个文件超限】的error
A:emm暂时没处理,先上线观察一下,因为只有这一台手机会出现(红米M2012K11AC)。说实话也不知道咋处理,估计只能重新分包。
9. Q:使用minidev上传包报错【版本正在生成中】
A:实测下来是因为已经有一个和当前上传版本相同版本号的包存在,在支付宝开放后台删除这个包或者换一个版本号再上传即可