解决 LeanCloud SDK 中 70% 问题的调试方法
来源:互联网 发布:淘宝 苏宁易购旗舰店 编辑:程序博客网 时间:2024/06/06 20:51
很多同学在 LeanCloud 上遇到的不少问题,其实可以自我解决的,现在介绍一下 LeanCloud 上的调试方法。
LeanCloud 是通过 REST API 来进行前后端分离的,这意味着当出现问题的时候,首先应该看看网络请求是什么,来确定是客户端发出的请求不对,还是服务端处理请求不对。LeanCloud 上有专门的 REST API 文档。
概要
? ? 通过调用允许打印日志的函数,来打印更多的日志,包括网络请求日志,根据具体的 REST API 请求和返回结果,从而快速定位问题。若对某个接口函数有疑惑,可快速翻阅 API文档。
? ? 初始化时调用以下函数来开启日志。注意发布应用时关闭日志,避免泄露数据。
Android SDK 2.6.7+:
AVOSCloud.setDebugLogEnabled(true);
iOS SDK :
setenv("LOG_CURL", "YES", 0);
Android SDK 调试方法
先介绍 Android SDK 的调试方法,
开启调试日志
首先在 Application 的 onCreate 中,开启调试日志,
然后,针对于下面的请求,fetch 一个 _User 对象,同时获取 friends 字段里的对象,
然后那里断点一下,可以看到,刚刚的请求和应答是这样的,[点击查看大图]
curl -X GET \ -H "X-avoscloud-Application-Id: APP_ID"\ -H "X-avoscloud-Application-Key: YourAppKey"\ -G --data-urlencode 'include=friends' \ https://api.leancloud.cn/1.1/users/53f0d534e4b0c1ae470ca958
以及返回的 json 字符串,
{ "gender": 1, "friends": { "__type": "Relation", "className": "_User" }, "location": { "longitude": 116.316858, "latitude": 39.985525, "__type": "GeoPoint" }, "sex": true, "avatar": { "key": "4IC5arNWrQo6lC4jOCamCm8Zhh0aVLINVPpO6T0p", "name": "小z", "mime_type": "application/octet-stream", "bucket": "x3o016bx", "url": "http://ac-x3o016bx.qiniudn.com/4IC5arNWrQo6lC4jOCamCm8Zhh0aVLINVPpO6T0p", "createdAt": "2014-12-12T11:10:41.739Z", "objectId": "548acd31e4b03d0b8f8d4d83", "updatedAt": "2014-12-12T11:10:41.739Z", "metaData": { "_checksum": "251933a19cd401bae53aafd5cb445a5c", "_name": "小z", "owner": "53f0d534e4b0c1ae470ca958", "size": 45257 }, "__type": "File" }, "username": "小z", "mobilePhoneVerified": false, "createdAt": "2014-08-17T16:15:48.069Z", "objectId": "53f0d534e4b0c1ae470ca958", "importFromParse": false, "emailVerified": false, "updatedAt": "2014-12-17T06:56:56.842Z" }
日志过滤
可以专门对此类日志进行过滤一下,以便快速获取信息,
Tag是:
===AVOS Cloud===
那么可以在 刚刚那个 REST API文档,看看这个请求是什么意思,文档上面说,
对那个 REST API 文档,搜索一下 include 即可以找到。
那么有了 curl 请求和请求结果,就可以判断很多事情了,有没有返回自己想要的值、返回了哪些字段等。对于 Pointer 类型的字段,返回的是 Pointer 类型,还是 Object 类型,Pointer 类型的话,只有 objectId,Object 类型还有相应的字段。
API 在线测试工具
LeanCloud 还有特别好用的 API在线测试工具,比如针对上面的请求,我们迅速找到相应的 API,
然后,
只要把写入 class 和 objectdId 既可以获得格式化的 json 字符串。
就可以看看原来的 fetch 代码发生了什么。
iOS SDK 调试方法
iOS SDK 上也是一样的,
应用启动后调用以下函数,
针对于这样一个查找用户的函数,查找用户名包含有子串 partName 的所有用户,
在结束的时候打上断点,那么可以看到日志输出,
这个请求经过 urlencode 了,找个工具 decode 一下,http://tool.chinaz.com/Tools/URLEncode.aspx,可以看到的是,
curl -i -k -X GET --compressed -H 'x-avoscloud-request-sign: 517d516e7c09a72822e116e64d11e2ce,1418816439658' -H 'X-avoscloud-Application-Production: 1' -H 'X-avoscloud-Application-Id: x3o016bxnkpyee7e9pa5pre6efx2dadyerdlcez0wbzhw25g' -H 'User-Agent: AVOS Cloud iOS-v2.6.8 SDK' -H 'X-avoscloud-Session-Token: axchejue4dmu04h5radozyvnc' -H 'Accept: application/json' "https://api.leancloud.cn/1.1/users?order=-updatedAt&where={"username":{"$regex":".*lzw.*"},"objectId":{"$ne":"54913d21e4b0c4eaaccc3a3e"}}"
可以看到查找用户,正则匹配.lzw.,同时 objectId 不是自己的,来找到其它人,并且根据更新时间的逆序排序。
那么就清晰了,能更多弄清楚后面是怎么工作的。
更多例子
我们再来几个例子,
调试 login
login 的时候发出的请求,
curl -i -k -X POST --compressed \ -d '{"username":"lzw12","password":"lzw12"}' \ -H 'x-avoscloud-request-sign: 3bd58a85549a3879442028630278ec43,1418814108622' \ -H 'X-avoscloud-Application-Production: 1' \ -H 'X-avoscloud-Application-Id: x3o016bxnkpyee7e9pa5pre6efx2dadyerdlcez0wbzhw25g' \ -H 'User-Agent: AVOS Cloud iOS-v2.6.8 SDK' \ -H 'Content-Type: application/json; charset=utf-8' \ -H 'Accept: application/json' \ "https://api.leancloud.cn/1.1/login"
可以看到,传入了 username 和 password。
调试 save
创建一条记录,
日志是:
curl -X POST -H "X-avoscloud-Application-Id: APP_ID" -H "X-avoscloud-Application-Key: YourAppKey" -H "Content-Type: application/json" -d '{"requests":[{"body":{"__children":[],"__internalId":"c9d38635-8336-4448-bb84-d99d89d15b4a","content":"这是一条Todo"},"method":"POST","path":"/1.1/classes/Todo"}]}' https://api.leancloud.cn/1.1/batch/save
可以看到发出了/batch/save 的请求,批量保存。
调试 push
再来看推送的时候的请求,代码是这样的,
setQuery 那句是说,根据 installationId 来找到自己,然后进行推送。
curl -X POST -H "X-avoscloud-Application-Id: APP_ID" -H "X-avoscloud-Application-Key: YourAppKey" -H "Content-Type: application/json" -d '{"channels":["public"],"data":{"alert":"hello world from avoscloud."},"where":{"installationId":"4f55cffe-19d3-4d2f-b309-ddadd4f07b4e"}}' https://api.leancloud.cn/1.1/push
网络请求都可以这般输出日志,可以根据输出的日志来判断是哪一步出了错。
- 解决 LeanCloud SDK 中 70% 问题的调试方法
- 解决 LeanCloud SDK 中 70% 问题的调试方法
- LeanCloud SDK 中秒杀70%问题的调试方法
- 解决 eclipse中 SDK Manager并且安卓虚拟机无法运行的问题方法之一
- Leancloud默认值指向一个AVFile的方法
- leancloud安装时ruby版本的问题
- 解决Win8在DOS中使用debug调试汇编问题的方法
- 更新了LeanCloud的SDK后编译报错
- 解决eclipse中 Android SDK Manager 图标不见的方法
- 解决eclipse中 Android SDK Manager 图标不见的方法
- 解决eclipse中Android SDK和ADT不见了的方法
- 解决Andorid SDK中离线文档打开慢的问题
- 百度地图sdk使用中遇到的问题及解决
- 解决Android studio中min sdk xx >device sdk xx的问题
- LeanCloud android sdk安装指南
- 调试MOST SSO中遇到的问题的解决过程
- 解决有时候silverlight在VS2008中不能调试的问题
- 问题调试方法。。。更新中
- 64ListView中item中有CheckBox带来的选择状态混乱的解决
- android拍照获得图片URI为空的处理方法
- 5 things you didn't know about ... Java performance monitoring, Part 2
- linux环境变量的配置方式的区别
- 追逐自己的梦想----------辅助制作第六课:背包数组分析和根据物品名称来使用物品
- 解决 LeanCloud SDK 中 70% 问题的调试方法
- Java 代码工具
- 设计 zmq.rs ——用 Rust 实现的 ZeroMQ(一)
- hdu 1171使用母函数导致Time Limit Exceeded的小细节
- 语义学习之address
- 线程静态同步与非静态差别
- 谁来支撑企业无线服务平台?
- 使用http://itunes.apple.com/lookup?id=获取不到版本
- 轻视频课程:SVG矢量图形基础入门(一)