很多同学在LeanCloud上遇到的不少问题,其实可以自我解决的,现在介绍一下LeanCloud上的调试方法。
LeanCloud 是通过 REST API来进行前后端分离的,这意味着当出现问题的时候,首先应该看看网络请求是什么,来确定是客户端发出的请求不对,还是服务端处理请求不对。LeanCloud 上有专门的REST API 文档。
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":"\u5c0fz","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":"\u5c0fz","owner":"53f0d534e4b0c1ae470ca958","size":45257},"__type":"File"},"username":"\u5c0fz","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 <span style="font-family: Arial, Helvetica, sans-serif;">-k </span><span style="font-family: Arial, Helvetica, sans-serif;">-X GET </span><span style="font-family: Arial, Helvetica, sans-serif;">--compressed </span>
-H 'x-avoscloud-request-sign: APP_SIGN'
-H 'X-avoscloud-Application-Production: 1'
-H 'X-avoscloud-Application-Id: APP_ID'
-H 'User-Agent: AVOS Cloud iOS-v2.6.8 SDK'
-H 'X-avoscloud-Session-Token: flg9yuyki9hfpblqp6t6hwbfd'
-H 'Accept: application/json'
"https://api.leancloud.cn/1.1/users?order=-updatedAt&where={"username":{"$regex":".*lzw.*"},"objectId":{"$ne":"544f2a25e4b0e9dff2e9b272"}}"
可以看到查找用户,正则匹配.*lzw.*,同时objectId不是自己的,来找到其它人,并且根据更新时间的逆序排序。
那么就清晰了,能更多弄清楚后面是怎么工作的。
更多例子
我们再来几个例子,
调试 login
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
网络请求都可以这般输出日志,可以根据输出的日志来判断是哪一步出了错。