supersdk

文档中心

文档中心

下载文档

IM 模块


IM 模块提供聊天室、私聊、实时语音功能。

一、常用接口

1、登录

接口描述:实时语音登录功能,在初始化完成之后,进入游戏的时候调用。

接口调用:

NSDictionary *parameters = @{
                             @"user_id" : @"100", // 用户名
                             @"password" : @"123456", // 密码
                             @"token" : @"" // 使用服务器 token 验证模式时使用该参数,否则使用空字符串
                             };
[SuperSDK invoke:@"social" funcName:@"YMLogin" parameters:parameters];

如果使用 token 请参考: https://github.com/youmesdk/hyperRTC/blob/master/%E6%B8%B8%E5%AF%86H5%E9%9F%B3%E8%A7%86%E9%A2%91%E8%BF%9E%E9%BA%A6%E5%AE%89%E5%85%A8%E6%A0%A1%E9%AA%8C.md

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMLogin"]) {// YM 登录回调
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 登录成功,user_id 为%@", data[@"user_id"]);
            }
            else {
                NSLog(@"YM 登录失败,原因:%@", desc);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMLogin,
parameters : {
    "msg":"登录成功",
    "data":{
        "user_id":"100"
    },
    "code":1
}

2、注销

接口描述:退出账号功能。

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMLogout" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMLogout"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 注销成功");
            }
            else {
                NSLog(@"YM 注销失败,原因:%@", desc);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMLogout,
parameters : {
    "msg":"注销成功",
    "code":1
}

3、加入频道

接口描述:多人聊天,进入同一个房间。

接口调用:

NSDictionary *parameters = @{
                             @"room_id" : @"1000", // 房间号,全局唯一
                            };
[SuperSDK invoke:@"social" funcName:@"YMJoinChatRoom" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMJoinChatRoom"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 加入频道成功,room_id 为:%@", data[@"room_id"]);
            }
            else {
                NSLog(@"YM 加入频道失败,room_id 为:%@", data[@"room_id"]);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMJoinChatRoom,
parameters : {
    "msg":"加入频道成功",
    "data":{
        "room_id":"1000"
    },
    "code":1
}

4、离开频道

接口描述:离开房间。

注意:离开房间后,无法接收到房间信息。

接口调用:

NSDictionary *parameters = @{
                             @"room_id" : @"1000",
                            };
[SuperSDK invoke:@"social" funcName:@"YMLeaveChatRoom" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMLeaveChatRoom"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 离开频道成功,room_id 为:%@", data[@"room_id"]);
            }
            else {
                NSLog(@"YM 离开频道失败,room_id 为:%@", data[@"room_id"]);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMLeaveChatRoom,
parameters : {
    "msg":"离开频道成功",
    "data":{
        "room_id":"1000"
    },
    "code":1
}

5、发送文本消息

接口描述:即时通信私聊功能,发送私聊,群聊文本信息。

接口调用:

NSDictionary *parameters = @{
                             @"receiver_id" : @"100", // 私聊表示接受者的 id,群聊表示频道的 roomid
                             @"chat_type" : @"1", // 1 私聊、 2 聊天室
                             @"content" : @"文本消息内容",
                            };
[SuperSDK invoke:@"social" funcName:@"YMSendTextMessage" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMSendTextMessage"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 发送消息成功,消息 id:%@", data[@"message_id"]);
            }
            else {
                NSLog(@"YM 发送消息失败,消息 id:%@", data[@"message_id"]);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMSendTextMessage,
parameters : {
    "msg":"发送消息成功",
    "data":{
        "forbid_end_time":0,
        "message_id":1528372098303,
        "is_forbid_room":false,
        "send_time":1528375337,
        "reason_type":0
    },
    "code":1
}

6、发送语音转文字消息

接口描述:发送语音消息,同时会回调语音识别出来的文字。

接口调用:

NSDictionary *parameters = @{
                             @"receiver_id" : @"100", // 接收者 用户 ID 或者 频道 ID,私聊传入 userid,频道聊天传入 roomid
                             @"chat_type" : @"1", // 1 私聊、 2 聊天室
                             };
[SuperSDK invoke:@"social" funcName:@"YMStartRecordAudioMessage" parameters:parameters];

7、发送语音不转文字消息

接口描述:仅发送语音消息,不会将语音识别成文字。

接口调用:

NSDictionary *parameters = @{
                             @"receiver_id" : @"100", // 接收者 用户 ID 或者 频道 ID,私聊传入 userid,频道聊天传入 roomid
                             @"chat_type" : @"1", // 1 私聊、 2 聊天室
                             };
[SuperSDK invoke:@"social" funcName:@"YMStartOnlyRecordAudioMessage" parameters:parameters];

8、停止并发送语音

接口描述:即时通信私聊功能,给单独游戏玩家发送私聊语音信息(停止录音并发送)。

接口调用:

NSDictionary *parameters = @{
                             @"attach_msg" : @"" // 透传消息字符串,可以用来附加一些用户的其他属性
                             };
[SuperSDK invoke:@"social" funcName:@"YMStopAndSendAudioMessage" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMStopAndSendAudioMessage"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 发送语音消息成功,message_content:%@", data[@"message_content"]);
            }
            else {
                NSLog(@"YM 发送语音消息失败,message_content:%@", data[@"message_content"]);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMStopAndSendAudioMessage,
parameters : {
    "msg":"发送语音消息成功",
    "data":{
        "message_content":"喂喂喂",
        "send_time":1528376335,
        "is_forbid_room":false,
        "message_id":1528376309021,
        "audio_time":5,
        "forbid_end_time":0,
        "path":"\/var\/mobile\/Containers\/Data\/Application\/53EB7877-E862-40D4-B57D-32C622663E84\/Library\/Caches\/AudioRecord\/2611715137.pcm.wav",
        "reason_type":0
    },
    "code":1
}

9、取消语音

接口描述:取消录音不发送。

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMCancleAudioMessage" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMCancleAudioMessage"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 取消录音成功");
            }
            else {
                NSLog(@"YM 取消录音失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMCancleAudioMessage,
parameters : {
    "msg":"取消录音成功",
    "code":1
}

10、播放语音

接口调用:

NSDictionary *parameters = @{
                             @"path" : self.lastSendAudioPath
                             };
[SuperSDK invoke:@"social" funcName:@"YMStartPlayAudio" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMStartPlayAudio"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 播放语音消息成功,path:%@", data[@"path"]);
            }
            else {
                NSLog(@"YM 播放语音消息成功,path:%@", data[@"path"]);
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMStartPlayAudio,
parameters : {
    "msg":"播放语音成功",
    "data":{
        "path":"\/var\/mobile\/Containers\/Data\/Application\/3FF94CCD-DB55-44EC-B74B-D108FF1B85F0\/Library\/Caches\/AudioRecord\/3992812021.pcm.wav"
    },
    "code":1
}

11、停止语音播放

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMStopPlayAudio" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMStopPlayAudio"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"停止语音播放成功");
            }
            else {
                NSLog(@"停止语音播放成功");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMStopPlayAudio,
parameters : {
    "msg" : "停止语音播放成功",
    "code" : 1
}

12、收到消息的回调

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMOnReceiveMessage"]) {
            if (code==BCORE_SUCCESS) {
                int messageType = [data[@"message_type"] intValue];
                NSString *sender = [data[@"chat_type"] isEqualToString:@"0"] ? @"私聊" : @"聊天室";
                switch (messageType) {
                    case 0: //文本消息
                        
                        NSLog(@"收到%@发来的%@消息,消息内容:%@",data[@"sender_id"], sender, data[@"message_content"]);
                        break;
                        
                    case 1: //语音消息
                        imVC.lastRecvAudioPath = data[@"path"];
                        NSLog(NSString stringWithFormat:@"收到%@发来的%@语音消息,文字识别结果:%@,fileSize:%@,audioTime:%@",data[@"sender_id"], sender, data[@"message_content"], data[@"file_size"], data[@"audio_time"]);
                        break;
                        
                    default:
                        break;
                }
            }
            else {
                
            }
        }
     }
 }

文本消息回调:

moduleName : social,
funcName : YMOnReceiveMessage,
parameters : {
            "msg":"收到文字消息",
            "data":{
                    "message_content":"文本消息内容",
                    "distance":0,
                    "message_id":1528688724416,
                    "message_type":"0",
                    "create_time":1528688724,
                    "chat_type":"0",
                    "receiver_id":"100",
                    "sender_id":"100"
                    },
            "code":1
          }

语音消息回调:

moduleName : social,
funcName : YMOnReceiveMessage,
parameters : {
            "msg":"收到语音消息",
            "data":{
                    "message_content":"发送语音消息。",
                    "distance":0,
                    "message_id":1528700010992,
                    "message_type":"1",
                    "file_size":163738,
                    "audio_time":5,
                    "create_time":1528700010,
                    "path":"\/var\/mobile\/Containers\/Data\/Application\/9488D459-EBF8-4C25-94F4-849779C0F5BB\/Library\/Caches\/YIMVoiceCache\/1528700010992.wav",
                    "chat_type":"0",
                    "receiver_id":"100",
                    "sender_id":"100"
                    },
            "code":1
            }

13、加入实时语音频道

接口调用:

NSDictionary *parameters = @{
                             @"user_id" : @"100",
                             @"room_id" : @"1000",
                             };
[SuperSDK invoke:@"social" funcName:@"YMJoinChannelSingleMode" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMJoinChannelSingleMode"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM加入语音频道成功");
            }
            else {
                NSLog(@"YM加入语音频道失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMJoinChannelSingleMode,
parameters : {"msg":"加入语音频道成功","data":{"room_id":"1000","param":"100"},"code":1}

14、离开实时语音频道

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMLeaveChannelAll" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMLeaveChannelAll"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 离开语音频道成功");
            }
            else {
                NSLog(@"YM 离开语音频道失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMLeaveChannelAll,
parameters : {"msg":"离开语音频道成功","data":{"room_id":"","param":""},"code":1}

二、IM 可选功能接口

1、开始录音

接口描述:开始录音功能(需要在初始化成功后,登录成功之后调用),结束录音调用”停止录音”,取消录音调用”取消录音”。

接口调用:

NSDictionary *parameters = @{
    @"translate" : @"0", // 是否翻译成文字  1:翻译 0:不翻译
};
[SuperSDK invoke:@"social" funcName:@"YMStartAudioSpeech" parameters:parameters];

2、停止录音

接口描述:停止录音功能(需要在启动录音之后调用),不通过游密发送该语音消息!

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMStopAudioSpeech" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMStartAudioSpeech"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 录音成功");
            }
            else {
                NSLog(@"YM 录音失败");
            }
        }
    }
}

日志打印:

moduleName : social,
funcName : YMStartAudioSpeech,
parameters : {
        "msg":"录音成功",
        "data":{
            "path":"/var/mobile/Containers/Data/Application/637A42E0-85B7-4CDC-810A-567AF6FA2A86/Library/Caches/AudioRecord/3033701311.wav",
            "audio_time":4,
            "message_content":"一二三四五六七。",
            "download_url":"https://cn-s-youme-im.s3.cn-north-1.amazonaws.com.cn/9f/9f47e7d27a6246b8a4ddd8ff844cfc14.amr?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAPNCTFJWBUFW4LOPA%2F20201217%2Fcn-north-1%2Fs3%2Faws4_request&X-Amz-Date=20201217T080719Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f994b561c0de1f09ea5e409dcd5631ee45cf4f1b7bb3b496816aa1a315db1a67",
            "file_size":117452
        },
        "code":1
}

3、根据录音下载音频文件

接口描述:根据录音返回的 download_url 链接下载录音文件。

接口调用:

// 语音文件的 url 地址,YMStartAudioSpeech 返回的 downloadURL 地址
NSDictionary *parameters = @{
                             @"downloadURL" : @"https://cn-s-youme-im.s3.cn-north-1.amazonaws.com.cn/9f/9f47e7d27a6246b8a4ddd8ff844cfc14.amr?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAPNCTFJWBUFW4LOPA%2F20201217%2Fcn-north-1%2Fs3%2Faws4_request&X-Amz-Date=20201217T080719Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=f994b561c0de1f09ea5e409dcd5631ee45cf4f1b7bb3b496816aa1a315db1a67", // 语音文件的url地址,YMStartAudioSpeech返回的downloadURL地址
                             @"strSavePath" : @"/var/mobile/Containers/Data/Application/637A42E0-85B7-4CDC-810A-567AF6FA2A86/Library/Caches/AudioRecord/1234567890.wav"   // 语音文件的本地存放地址,带文件名的全路径
                             };
[SuperSDK invoke:@"social" funcName:@"YMDownloadAudioByUrl" parameters:parameters];

日志打印:

moduleName : social,
funcName : YMDownloadAudioByUrl,
parameters : {
    "msg":"根据url下载录音文件成功",
    "data":{
        "audioTime":2,
        "strFromUrl":"https:\/\/cn-s-youme-im.s3.cn-north-1.amazonaws.com.cn\/00\/0084cb70c9036dde0493dd97574c12ef.amr?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAPNCTFJWBUFW4LOPA%2F20230823%2Fcn-north-1%2Fs3%2Faws4_request&X-Amz-Date=20230823T085648Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=03597706b336e49ce3a128454f47487ef3a26b1da754220cf99b3221bd4c3252",
        "strSavePath":"\/var\/mobile\/Containers\/Data\/Application\/0378A130-F026-4D2F-9C77-6FDEEA52A010\/Library\/Caches\/test.wav"
    },
    "code":1
}

4、设置录音缓存目录

接口描述:设置录音时用于保存录音文件的缓存目录,如果没有设置,SDK 会在 APP 默认缓存路径下创建一个文件夹用于保存音频文件。

接口调用:

NSDictionary *parameters = @{
                             	@"path" : @"xxx" // 缓存目录绝对路径,需要先创建好该目录
                            };
[SuperSDK invoke:@"social" funcName:@"YMSetAudioCachePath" parameters:parameters];

5、获取语音缓存目录

接口描述:返回当前设置的录音缓存目录的完整路径。

接口调用:

NSString *path = [SuperSDK invokeString:@"social" funcName:@"YMGetAudioCachePath" parameters:nil];
NSLog(@"%@", path);	

// 例: /var/mobile/Containers/Data/Application/DE33ABA8-6717-4D82-933D-246526A1B4F9/Library/Caches/AudioRecord/

6、清理语音缓存目录

接口描述:清空当前设置的录音缓存目录。

接口调用:

BOOL isSuccess = [SuperSDK invokeBool:@"social" funcName:@"YMClearAudioCachePath" parameters:nil]; // 例: 1 成功, 0 失败

7、获取 IM 频道成员数量

接口描述:必须是已经进入的房间。

接口调用:

NSDictionary *parameters = @{
                             @"room_id" : @"1000",
                             };
[SuperSDK invoke:@"social" funcName:@"YMGetRoomMemberCount" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMGetRoomMemberCount"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 获取房间成员数量成功,room_id 为%@,count 为%@", data[@"room_id"], data[@"count"]);
            }
            else {
                NSLog(@"YM 获取房间成员数量失败,room_id 为%@,count 为%@", data[@"room_id"], data[@"count"]);
            }
        }
     }
 }

回调日志打印:

moduleName : social,
funcName : YMGetRoomMemberCount,
parameters : {"msg":"获取房间成员数量成功","data":{"room_id":"1000","count":1},"code":1}

8、设置只识别语音文字不发送消息

接口描述:适用于语音转文字,再发送文字消息。

接口调用:

NSDictionary *parameters = @{
                             @"recognition" : @"1", // 0 识别语音文字并发送语音消息、其他只识别语音的文字
                             };
[SuperSDK invoke:@"social" funcName:@"YMSetOnlyRecognizeSpeechText" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMSetOnlyRecognizeSpeechText"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 设置只识别语音文字成功");
            }
            else {
                NSLog(@"YM 设置只识别语音文字失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMSetOnlyRecognizeSpeechText,
parameters : {
    "msg" : "设置只识别语音文字成功",
    "code" : 1
}

9、识别语音文字的回调

接口描述:只识别语音文字不发送消息的回调

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMOnGetRecognizeSpeechText"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 识别语音文字成功,message_content:%@", data[@"message_content"]);
            }
            else {
                NSLog(@"YM 识别语音文字失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMOnGetRecognizeSpeechText,
parameters : {
    "msg":"识别语音文字成功",
    "data":{
        "message_content":"嘿嘿。",
        "message_id":1529490319218
    },
    "code":1
}

10、屏蔽/解除屏蔽用户消息

接口调用:

NSDictionary *parameters = @{
                             @"user_id" : @"100",
                             @"block" : @"1", // 0 解除屏蔽 / 其他屏蔽
                             };
[SuperSDK invoke:@"social" funcName:@"YMBlockUser" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMBlockUser"]) {
            if (code==BCORE_SUCCESS) {
                NSString *state = [data[@"block"] isEqualToString:@"0"] ? @"解除屏蔽" : @"屏蔽";
                NSLog(@"YM %@ 成功,用户:%@ 状态:%@", state, data[@"user_id"], state);
            }
            else {
                NSLog(@"YM 屏蔽 / 解除屏蔽失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMBlockUser,
parameters : {{
    "msg":"屏蔽成功",
    "data":{
        "user_id":"100",
        "block":"1"
    },
    "code":1
}

11、解除所有已屏蔽用户

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMUnBlockAllUser" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMUnBlockAllUser"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 解除所有已屏蔽用户成功");
            }
            else {
                NSLog(@"YM 解除所有已屏蔽用户失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMUnBlockAllUser,
parameters : {
    "msg" : "解除所有已屏蔽用户成功",
    "code" : 1
}

12、获取被屏蔽消息用户

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMGetBlockUsers" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMGetBlockUsers"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 获取被屏蔽用户成功,列表:%@", data[@"user_list"]);
            }
            else {
                NSLog(@"YM 获取被屏蔽用户失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMGetBlockUsers,
parameters : {
    "msg":"获取被屏蔽消息用户成功",
    "data":{
        "user_list":[
            "100"
        ]
    },
    "code":1
}

13、举报功能

接口描述:对用户的违规行为进行举报,管理员在后台进行审核处理并将结果通知用户。

接口调用:

NSDictionary *parameters = @{
                                @"user_id" : @"100",          // 被举报用户 ID
                                @"chat_type" : @"2",          // 1 私聊、 2 聊天室
                                @"reason" : @"100",           // 原因
                                @"description" : @"这人有毒",  // 原因描述
                                @"nickname" : @"二狗子",       // 昵称
                                @"level" : @"999",            // 角色等级
                                @"vip_level" : @"9999",       // VIP 等级
                             };
[SuperSDK invoke:@"social" funcName:@"YMAccusation" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMAccusation"]) {
            NSString *result = @"";
            switch ([data[@"result"] intValue]) {
                case 0:
                    result = @"忽略";
                    break;
                case 1:
                    result = @"警告";
                    break;
                case 2:
                    result = @"禁言";
                    break;
                default:
                    break;
            }
            NSLog(@"YM 收到举报处理结果,用户:%@,时间:%@,结果:%@", data[@"user_id"], data[@"accusation_time"], result);
        }
     }
 }

回调日志打印:

moduleName : social,
funcName : YMAccusation,
parameters : {
    "msg":"收到举报处理结果",
    "data":{
        "user_id":"100",
        "result":"1",
        "accusation_time":1529571229
    },
    "code":1
}

三、实时语音可选功能接口

1、切换语音输出设备

接口描述:默认输出到扬声器,在加入房间成功后设置,如无听筒输出的需求尽量不要调用该接口。

接口调用:

NSDictionary *parameters = @{
                             @"loudspeaker" : @"0", // 0:输出到扬声器,1:输出到听筒
                             };
[SuperSDK invoke:@"social" funcName:@"YMsetOutputToSpeaker" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMsetOutputToSpeaker"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM切换语音输出设备成功");
            }
            else {
                NSLog(@"YM切换语音输出设备失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMsetOutputToSpeaker,
parameters : {
    "msg" : "切换语音输出设备成功",
    "code" : 1
}

2、设置扬声器状态

接口描述:打开/关闭扬声器,该状态值在加入房间成功后设置才有效。

接口调用:

NSDictionary *parameters = @{
                             @"mute" : @"0", // 0:关闭扬声器,1:开启扬声器
                             };
[SuperSDK invoke:@"social" funcName:@"YMsetSpeakerMute" parameters:parameters];

3、设置麦克风状态

接口描述:打开/关闭麦克风,该状态值在加入房间成功后设置才有效。

接口调用:

NSDictionary *parameters = @{
                             @"mute" : @"0", // 0:关闭麦克风,1:开启麦克风
                             };
[SuperSDK invoke:@"social" funcName:@"YMsetMicrophoneMute" parameters:parameters];

4、设置音量大小

接口描述:设置当前程序输出音量大小,建议该状态值在加入房间成功后按需再重置一次。

接口调用:

NSDictionary *parameters = @{
                             @"volume" : @"66", // 音量大小,范围 [ 0 - 100 ]
                             };
[SuperSDK invoke:@"social" funcName:@"YMSetVolume" parameters:parameters];

5、获取音量大小

接口描述:获取当前程序输出音量大小,此音量值为程序内部的音量,与系统音量相乘得到程序使用的实际音量。

接口调用:

[SuperSDK invoke:@"social" funcName:@"YMGetVolume" parameters:nil];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMGetVolume"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"当前程序输出音量大小为%@", data[@"volume"]);
            }
            else {
                NSLog(@"YM 获取当前程序输出音量大小失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMGetVolume,
parameters : {
    "msg":"获取当前程序输出音量大小成功",
    "data":{
        "volume":66
    },
    "code":1
}

6、设置是否释放麦克风

接口描述:设置当麦克风静音时,是否释放麦克风设备(需要在初始化成功后,加入房间之前调用)。

释放:当麦克风静音时,释放麦克风设备,此时允许第三方模块使用麦克风设备录音。

不释放:不管麦克风是否静音,麦克风设备都会被占用。

接口调用:

NSDictionary *parameters = @{
                             @"releasemic" : @"0", // 0:释放麦克风,1:不释放麦克风
                             };
[SuperSDK invoke:@"social" funcName:@"YMSetReleaseMicWhenMute" parameters:parameters];

接口回调:

+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
    NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
    
    NSDictionary *retParam = nil;
    if (parameters) {
        NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
        if (jsonData) {
            retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
        }
    }
    
    int code = [[retParam objectForKey:@"code"] intValue];
    NSString *desc = [retParam objectForKey:@"msg"];
    id data  = [retParam objectForKey:@"data"];
    
    if ([moduleName isEqualToString:@"social"]) {
        if ([funcName isEqualToString:@"YMSetReleaseMicWhenMute"]) {
            if (code==BCORE_SUCCESS) {
                NSLog(@"YM 设置静音释放麦克风成功");
            }
            else {
                NSLog(@"YM 设置静音释放麦克风失败");
            }
        }
     }
 }

日志打印:

moduleName : social,
funcName : YMSetReleaseMicWhenMute,
parameters : {
    "msg" : "设置静音释放麦克风成功",
    "code" : 1
}