适用场景

LeanCloud 是通过 REST API 来进行前后端分离的,当出现问题的时候,最好是先检查日志里的网络请求,如果有必要的话再和 REST API 文档进行比对,以此来判断是客户端发出的请求不对,还是服务端处理请求不对。

提交工单反馈问题时,客服通常会索要复现的日志来帮助排查问题。本文介绍如何查看日志并通过日志来初步排查问题。

Objective-C SDK 调试指南

开启调试日志

// 在 Application 初始化代码执行之前执行
[AVOSCloud setAllLogsEnabled:YES];

运行并查看日志

我们以即时通信服务为例,运行下面的代码查询 Tom 的某个会话。

AVIMClient *tom = [[AVIMClient alloc] initWithClientId:@"Tom"];
AVIMConversationQuery *query = [tom conversationQuery];
[query getConversationById:@"5da92fe07c4cc935c804361c" callback:^(AVIMConversation *conversation, NSError *error) {
    if (conversation) {
        NSLog(@"查询成功!");
    }else{
        NSLog(@"查询失败,错误码:%ld,错误信息:%@",(long)error.code,error.userInfo);
    }
}];

Xcode 运行后查看控制台打印情况如图:

5
控制台打印的报错信息是:

查询失败,错误码:9002,错误信息:{
    NSLocalizedFailureReason = "IM client not open.";
}

翻阅 LeanCloud 即时通信文档4 可知,iOS SDK 和 Android SDK 需要调用开发者手动执行 open 方法登录到即时通信服务器。参考文档作出如下修改:

AVIMClient *tom = [[AVIMClient alloc] initWithClientId:@"Tom"];
//登录即时通讯服务器
[tom openWithCallback:^(BOOL succeeded, NSError *error) {
    if(succeeded) {
        AVIMConversationQuery *query = [tom conversationQuery];
        [query getConversationById:@"5dba9e1f7c4cc935c8dbbe84" callback:^(AVIMConversation *conversation, NSError *error1) {
            if (conversation) {
            NSLog(@"查询对话成功!");
            }else{
            NSLog(@"查询会话失败,错误码:%ld,错误信息:%@",(long)error1.code,error.userInfo);
            }
        }];
    }
}];

Xcode 运行后查看控制台打印情况如图:

即时通信遇到问题可以通过日志中的请求与返回结果查看,调用 LeanCloud 服务是否正常。

即时通讯的错误码详解见:即时通讯云端错误码说明5