之前IOS购买出现过一次问题,所有玩家充值成功但均不能到账,最后更换pem格式证书解决了,见:

http://orientye.com/apple-app-in-purchase-x509_v_err_unable_to_get_issuer_cert_locally-error/

这几天有少量玩家出现了这个问题,同样地,在对这些玩家充值成功后的收据进行验证时,SSL_get_verify_result函数返回X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY错误。

尝试了以下方法:

1 从https://www.apple.com/certificateauthority/下载根证书,用mac上的openssl 命令将其转换为pem格式,依然不行;

2 从mac上的Keychain Access的System Roots里导出AppleRoot相关的几个证书成pem格式(与方法1生成的pem内容是完全一样的),以及Entrust Root,同样不行;

最后,还是去https://curl.haxx.se/docs/caextract.html这里下载了最新的证书(2017-01-18更新),问题得以解决。

在安卓上,有时候会有玩家报多次连击问题。一次单击,误认为是点击了两次或多次,非常影响体验。

经查明,这是cocos2dx 的多点触摸BUG导致,将Cocos2dxGLSurfaceView.java的onTouchEvent函数中ACTION_POINTER_DOWN,ACTION_POINTER_UP屏蔽掉就好了(我们该项目用的是2.2.6版本)。

IOS内存泄露

 

App里的内存泄漏分为两类:

  • Leaked memory: Memory unreferenced by your application that cannot be used again or freed (also detectable by using the Leaks instrument).
  • Abandoned memory: Memory still referenced by your application that has no useful purpose.

利用XCode自带的Instrument,  可以分析出这些内存泄漏。

根据笔者的经验,Leaked memory能分析的是这样的一类内存泄漏:

memAlloc = malloc(100);

当memAlloc没有被释放,此语句再次被执行的时候就会被Instruments的Leak工具检测出来。

麻烦的内存泄漏是Abandoned memory,这类内存一直被缓存,但其实已经没有用了,问题来了,什么是有用,什么是没用呢?

Instrument工具给出的方案是https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/FindingAbandonedMemory.html#//apple_ref/doc/uid/TP40004652-CH80-SW1, 简单来说,用 Mark Generation 的方式,每次Mark的时候,都会生存一个内存快照,然后比较两个快照有什么不同。可想而知,这个是对稍微复杂点的场景来说,还是太不方便。

对于游戏来说,主要的消耗内存的就是纹理和音视频资源了,这一块除了设计好资源管理外,需要提供一个直观方便的dump info,随时能够查看资源分配和释放的情况。然后配合Instrument的工具,也足够使用了。

更高级的内存泄漏,依然是利去hook底层的内存分配和释放函数,IOS方面的内存泄漏可以参考:

https://wereadteam.github.io/2016/02/22/MLeaksFinder/

问题是这样的:客户端用curl函数下载http://52.220.134.249/resource/10104.zip  有时候能顺利下载到资源并解压成功,但大部分情况下会提示解压失败。

跟踪了一下程序,下载过程中进度函数一直显示0, 并未下载成功,但curl_easy_perform却返回了OK,所以会走正常的解压流程,结果自然就是解压失败了。

直觉告诉我,应该还是缺少某个参数,于是试了一下:curl_easy_setopt(_curl, CURLOPT_FOLLOWLOCATION, 1L);  OK了。

用fiddler观察了一下,结果如下,重定向了。但curl_easy_perform在并未下载成功的时候返回OK也算是个BUG吧。

curl-download-res

今天在接入某邻国的支付SDK的时候,碰上了一个乱码问题。
直接表现是,从数据库后台返回给前端网页上的中文及邻国文字都变成了问号,英文没有问题。

分析了一下,我们的数据库是采用UTF-8字符集的,new String(“dataValueXXX”, “UTF-8″)应该是没有问题的,于是设置了response.setContentType(“application/json;charset=UTF-8″);一切就OK了。

其实问题的根本主要是理解下Java的String是怎么处理字符集问题的。

记录一笔,只是感慨时光流逝,当年读书的时候做些项目也碰到过类似的问题,总觉得那时候一知半解还挺折腾,时光流逝,回过头去,看看文档,再想一想,看的明白点了。