LeanCloud SDK 的调试方法

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

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

时间: 2024-08-05 23:30:44

LeanCloud SDK 的调试方法的相关文章

ONS C++ Windows SDK 调试方法及注意事项

此文将展示ONS C++ Windows SDK 整个调试过程,笔者直接使用sdk包中的example消息发送示例代码,开发环境为win7, 64位,Visual Studio Professional 2013(版本 12.0.21005.1 REL). 下载最新sdk包(文中使用代码为2015年10月14号发布),并解压(本地保存目录为D:\Doc\ONS\C++\aliyun-ons-client-cpp-windows). 在调试前请详细阅读使用文档说明ALIYUN_ONS_CLIENT

Android Studio 2.1 NDK断点调试方法

Android Studio 2.1 NDK断点调试方法(基于Android 2.1, gradle 2.1.0) 1.创建一个Android Studio Project 2.设置NDK路径. 菜单中选择: File->Project Structure 在弹出的窗口的左侧选项框中,选择SDK Location,在右侧设置Android NDK location. 2.修改.\build.gradle如下: replase classpath 'com.android.tools.build:

Linux内核调试方法总结

一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_stack() 五  printk() 1  printk函数的健壮性 2  printk函数脆弱之处 3  LOG等级 4  记录缓冲区 5  syslogd/klogd 6  dmesg 7 注意 8 内核printk和日志系统的总体结构 9  动态调试 六  内存调试工具 1  MEMWATCH 2  YAMD

【Win10 UWP】QQ SDK(一):SDK基本使用方法

每当开发一个应用需要社交分享的应用时,总是心里咯噔一下:到底什么时候分享能加上QQ和微信?除了WP8.0版本的微信SDK,官方似乎从未正面发布过适应时代发展的QQ SDK,就连后台,也没有一个可以创建WP应用的入口(其实WP QQ团队很早就已经在开发WP版的QQ SDK,只是网站那边一直没人管上线这事,具体你也懂). 吐槽完毕. 作为一个长期以来,致力于散播温暖,散播希望的小清新无公害WP开发者,今天又要给广大WP开发者传播希望了.博主拿到了非正式版的QQ SDK,并且做了一些封装,仅供学习交流

Windows 下常见的反调试方法

稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度. ①最简单也是最基础的,Windows提供的API接口:IsDebuggerPresent(),这API实际上就是访问PEB的BeingDebugged标志来判断是否处于调试状态. if (IsDebuggerPresent()) //API接口 { AfxMessageBox(L"检测到调试器"); } else { AfxMessageBox(L&qu

VC的常用调试方法

前言 VS是非常强大的IDE,所以掌握VSVC的常用方法,将会使得我们找出问题解决问题事半功倍. 目录 VSVC的常用调试方法 前言 1. Watch窗口查看伪变量 2. 查看指针指向的一序列值 3. 内存泄露查找 4. 调试Release版本 5. 远程调试 6. 函数断点 7. 数据断点. 8. 代码执行时间 9. 格式化数据 10. 格式化内存 Watch窗口查看伪变量 按MSDN的介绍,伪变量就是用来查看特定信息的术语.例如当调用的API失败时,可以用GetLastError获取对应的错

调试方法

一. 调试模式ThinkPHP 专门为开发过程而设置了调试模式,调试模式开启后,特别方便我们进行排错和调整.但由于它执行效率会稍低,所以在正式部署项目的时候,关闭调试模式. 1 // 入口文件处,开启调试模式 建议开发阶段开启 部署阶段注释或者设为false 2 define('APP_DEBUG',t t rue); 开启来会告诉你错误的一些具体信息,部署项目后,错误信息是给用户看的,这时不需要列出错误的具体信息在哪 下图为用户看到的错误页面 调试模式在开发中的优势在于: 1.开启日志记录,任

Android快速调试方法

Android快速调试方法 前言:目前市面上OTT网络机顶盒几乎全部使用Android系统,公司目前是多个人使用一个编译服务器,编译一次Android系统花费时间较长,调试Android某一部分功能时候就不得不编译整个Android系统来调试,严重降低了工作开发效率,巧合之下看到公司大牛写的Android调试方法,放与网络与大家参考学习. 公司网络机顶盒(OTT)盒子使用Amlogic提供的芯片,下面就以amlogic Android系统为例. 1 Uboot快速调试方法 1.1 编译 #! /

Firefox下javascript调试方法

前面博文谈了一下IE浏览器下javascript的调试方法,今天没事干就把火狐浏览器(Firefox)下的javascript调试方法也看了一下,记录在此,希望对大家有所帮助. 我们这次使用的代码页面为document获取对象博文中的按name属性获取对象的代码. <html> <head> <title>getElementsByName</title> </head> <body> <form id="form1&