资讯专栏INFORMATION COLUMN

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

paraller / 2903人阅读

摘要:很多同学在上遇到的不少问题,其实可以自我解决的,现在介绍一下上的调试方法。更多例子我们再来几个例子,调试的时候发出的请求,可以看到,传入了和。调试创建一条记录,日志是这是一条可以看到发出了的请求,批量保存。

很多同学在 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  

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15563.html

相关文章

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

    摘要:很多同学在上遇到的不少问题,其实可以自我解决的,现在介绍一下上的调试方法。更多例子我们再来几个例子,调试的时候发出的请求,可以看到,传入了和。调试创建一条记录,日志是这是一条可以看到发出了的请求,批量保存。 很多同学在 LeanCloud 上遇到的不少问题,其实可以自我解决的,现在介绍一下 LeanCloud 上的调试方法。 LeanCloud 是通过 REST API 来进行前后端...

    freecode 评论0 收藏0
  • 使用Leancloud实现React Native App消息推送(Push Notificati

    摘要:前言在上一篇文章中我们详细讲解了用实现消息推送的流程,今天本文将继续讲解实现的消息推送。接入在接入之前,还是推荐先阅读官方的消息推送开发指南。实现该的定位为接收并初步解析通知数据。 前言 在上一篇文章 中我们详细讲解了用Leancloud实现iOS消息推送的流程,今天本文将继续讲解实现Android的消息推送。 接入Leancloud 在接入Leancloud之前,还是推荐先阅读Lea...

    liaosilzu2007 评论0 收藏0
  • LeanCloud + Ionic3 迅速重构应用

    摘要:的数据强制刷新由于的数据绑定与更新策略,有时取回数据时数据并不能引起页面的变更,这时候就需要强制刷新页面绑定的数据了。这次重构差不多就用了四天的时间,写了个个个,按时交活儿希望本文可以在小应用的快速构建上给大家一个参考 作者:李宜栋 ​​【 玩转 LeanCloud 】开发者经验分享: 学校有一个高考志愿填报的应用需要重构,之前的实现是通过构建 Laravel RESTful API ...

    geekidentity 评论0 收藏0
  • 3年,从工程师到创始人

    摘要:我们的产品覆盖了和,目前项目全都架在的云引擎之上。我们的方案是把业务代码从中抽出来了,做成了移动端,这样业务能在和中共用,移动端是基于的云引擎环境下开发的。在这个过程中,云引擎和都发挥了重要作用。 【玩转 LeanCloud 】活动开发经验分享: 作者:黄涛 大家好,我是 htoooth,在一家电商公司做 Node.js 开发,爱折腾,喜欢追新语言,像 golang、elixir、cl...

    AlienZHOU 评论0 收藏0
  • 手游开发如何选择后端服务

    摘要:云函数是万金油为实现用户游戏数据存储和每日任务分发,我们最先用了存储服务和云引擎。不过我们并没有用提供的来直接调用存储服务,而是选择用调用云引擎里面的云函数,然后通过云函数调用存储服务来实现相应的逻辑。 【 玩转 LeanCloud 】开发者投稿分享: 作者:赵天泽 作为一个通过 LeanCloud 入门后端开发的小白,一年多的开发历程让我收获满满。多个项目也在 LeanCloud 可...

    codecook 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<