zoukankan      html  css  js  c++  java
  • LeanCloud SDK 中秒杀70%问题的调试方法

    非常多同学在LeanCloud上遇到的不少问题,事实上能够自我解决的,如今介绍一下LeanCloud上的调试方法。

    LeanCloud 是通过 REST API来进行前后端分离的。这意味着当出现故障的时候,首先应该看看网络请求是什么,来确定是client发出的请求不正确,还是服务端处理请求不正确。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上也是一样的。

    应用启动后调用下面函数,



    针对于这样一个查找用户的函数。查找username包括有子串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

    网络请求都能够这般输出日志,能够依据输出的日志来推断是哪一步出了错。

  • 相关阅读:
    对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解
    openSUSE leap 42.3 实现有线 无线同时用
    Fedora27 源配置
    Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
    openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
    OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    OpenSUSE Leap 42.3 安装java(Oracle jre)
    linux下支持托盘的邮件客户端Sylpheed
    Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    Firefox 浏览器添加Linux jre插件
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6806036.html
Copyright © 2011-2022 走看看