解决 LeanCloud SDK 中 70% 问题的调试方法

很多同学在 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 中,开启调试日志,

20141217152413968

然后,针对于下面的请求,fetch 一个 _User 对象,同时获取 friends 字段里的对象,

然后那里断点一下,可以看到,刚刚的请求和应答是这样的,[点击查看大图]

20141217154420624

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"  
}  

日志过滤

可以专门对此类日志进行过滤一下,以便快速获取信息,

解决 LeanCloud SDK 中 70% 问题的调试方法_第1张图片

Tag是:

===AVOS Cloud===

那么可以在 刚刚那个 REST API文档,看看这个请求是什么意思,文档上面说,

解决 LeanCloud SDK 中 70% 问题的调试方法_第2张图片

对那个 REST API 文档,搜索一下 include 即可以找到。

那么有了 curl 请求和请求结果,就可以判断很多事情了,有没有返回自己想要的值、返回了哪些字段等。对于 Pointer 类型的字段,返回的是 Pointer 类型,还是 Object 类型,Pointer 类型的话,只有 objectId,Object 类型还有相应的字段。

API 在线测试工具

LeanCloud 还有特别好用的 API在线测试工具,比如针对上面的请求,我们迅速找到相应的 API,

解决 LeanCloud SDK 中 70% 问题的调试方法_第3张图片

然后,
解决 LeanCloud SDK 中 70% 问题的调试方法_第4张图片

只要把写入 class 和 objectdId 既可以获得格式化的 json 字符串。

就可以看看原来的 fetch 代码发生了什么。

iOS SDK 调试方法

iOS SDK 上也是一样的,

应用启动后调用以下函数,
20141217155000968

针对于这样一个查找用户的函数,查找用户名包含有子串 partName 的所有用户,

解决 LeanCloud SDK 中 70% 问题的调试方法_第5张图片

在结束的时候打上断点,那么可以看到日志输出,

解决 LeanCloud SDK 中 70% 问题的调试方法_第6张图片

这个请求经过 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 的时候发出的请求,

20141217162227359

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

创建一条记录,

解决 LeanCloud SDK 中 70% 问题的调试方法_第7张图片

日志是:

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

再来看推送的时候的请求,代码是这样的,

解决 LeanCloud SDK 中 70% 问题的调试方法_第8张图片

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  

网络请求都可以这般输出日志,可以根据输出的日志来判断是哪一步出了错。

你可能感兴趣的:(ios,android,sdk,leancloud)