将yim
复制到Cocos2d-x开发工具生成的游戏目录根目录下。
对proj.android/jni/Android.mk
文件进行如下修改,仅需修改标注部分,其余部分无需处理。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := cocos2dlua_shared
LOCAL_MODULE_FILENAME := libcocos2dlua
LOCAL_SRC_FILES := \
../../Classes/AppDelegate.cpp \
../../Classes/ide-support/SimpleConfigParser.cpp \
../../Classes/ide-support/RuntimeLuaImpl.cpp \
../../Classes/ide-support/lua_debugger.c \
hellolua/main.cpp \
# #########添加如下代码.########
../../../../yim/LuaYIM.cpp
# #########添加如下代码########
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
# #########添加如下代码,添加头文件路径.注意上一行结尾处添加换行符\########
$(LOCAL_PATH)/../../../../yim/include \
$(LOCAL_PATH)/../../../../yim/
# ###############################################################
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2d_lua_static
LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static
# #############添加如下代码,链接动态库##############################
LOCAL_SHARED_LIBRARIES := YIM
# ###############################################################
#_COCOS_LIB_ANDROID_BEGIN
#_COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
# ###################### 包含YMSDK子配置 #########################
include $(LOCAL_PATH)/../../../../yim/lib/android/Android.mk
# ###############################################################
$(call import-module,scripting/lua-bindings/proj.android)
$(call import-module,tools/simulator/libsimulator/proj.android)
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
若不需要语音转文字功能,需要对yim/lib/android/Android.mk
文件进行如下修改:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := YIM
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libyim.so \
include $(PREBUILT_SHARED_LIBRARY)
# ############# 不使用翻译可以删除下面内容 ##############
include $(CLEAR_VARS)
LOCAL_MODULE := YIMNLS
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libnlscppsdk.so \
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := YIMU
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)+/libuuid.so \
include $(PREBUILT_SHARED_LIBRARY)
# ###################################################
yim/lib/android/
目录中如下文件复制到proj.android/libs/
目录下。(其中alisr.jar和asr-v1.0.2.aar是语音识别包,如没有使用语音识别功能则不需要添加。)
yim.jar
alisr.jar
asr-v1.0.2.aar
android-support-v4.jar
如果接入的是带google语音识别的版本,
allprojects {
repositories {
//添加google语音识别需要的
jcenter()
google()
//添加结束
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//添加google语音识别需要的
compile "io.grpc:grpc-okhttp:1.32.2"
compile "io.grpc:grpc-protobuf-lite:1.4.0"
compile "io.grpc:grpc-stub:1.4.0"
compile 'javax.annotation:javax.annotation-api:1.2'
//添加结束
}
如果接入的是带云知声语音识别的版本:
allprojects {
repositories {
//添加云知声语音识别需要的
mavenCentral()
//添加结束
}
}
dependencies {
implementation fileTree(include: ['*.jar','*.aar'], dir: 'libs')
//添加云知声语音识别需要的
implementation 'com.android.support:appcompat-v7:24.1.1'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
//添加结束
}
proj.android/AndroidManifest.xml
文件,确保声明了如下权限: <!-- 添加到application节点内 -->
<application xxxx>
<receiver android:name="com.youme.im.NetworkStatusReceiver" android:label="NetworkConnection" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>
<!-- 添加到跟application平级 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 获取地理位置的权限,可选 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
打开Eclipse,导入上一步的Android工程,在项目中第一个启动的AppActivity
中的onCreate
中增加以下Java代码:
注意必须把游密的初始化加到第一行,否则可能出现部分机型加载so不正常
@Override
protected void onCreate(Bundle bundle)
{
//下面的两个调用顺序不能错
com.youme.im.IMEngine.init(this);
super.onCreate(bundle); //super.onCreate是默认已经有的,不用再复制
}
如果打包或生成APK时需要混淆,则需要在proguard.cfg
文件中添加如下代码:
-keep class com.youme.** {*;}
-keep class com.iflytek.**
-keepattributes Signature
yim
复制到Cocos2d-x开发工具生成的游戏目录根目录下。Build Settings -> Search Paths -> Header Search Paths
中添加头文件路径:$(SRCROOT)/../../../yim/include/
。 Build Settings -> Search Paths -> Framework Search Paths
中添加框架文件路径:$(SRCROOT)/../../../yim/lib/ios/
。 Build Settings -> Search Paths -> Library Search Paths
中添加库文件路径:$(SRCROOT)/../../../yim/lib/ios/
。 在Build Phases -> Link Binary With Libraries
添加如下依赖库:
libc++.1.tbd
libsqlite3.0.tbd
libresolv.9.tbd
SystemConfiguration.framework
libYouMeCommon.a
libyim.a
libz.tbd
CoreTelephony.framework
AVFoundation.framework
AudioToolbox.framework
CoreLocation.framework
AliyunNlsSdk.framework
//如果是带语音转文字的sdk需要添加,该库是动态库,需要在General -> Frameworks,libraries,and Embedded Content
处将其改成Embed & Sign
。
libBoringSSL.a
//如果是带google语音转文字的sdk需要
libgoogleapis.a
//如果是带google语音转文字的sdk需要
libgRPC-Core.a
//如果是带google语音转文字的sdk需要
libgRPC-ProtoRPC.a
//如果是带google语音转文字的sdk需要
libgRPC-RxLibrary.a
//如果是带google语音转文字的sdk需要
libgRPC.a
//如果是带google语音转文字的sdk需要
libnanopb.a
//如果是带google语音转文字的sdk需要
libProtobuf.a
//如果是带google语音转文字的sdk需要
UniSoundSDKDynamic.xcframework
//如果是带云知声语音转文字的sdk需要添加,该库是动态库,需要在General -> Frameworks,libraries,and Embedded Content
处将其改成Embed & Sign
。CFNetwork.framework
//如果是带云知声语音转文字的sdk需要。
Security.framework
//如果是带云知声语音转文字的sdk需要。
libicucore.A.tbd
//如果是带云知声语音转文字的sdk需要。
Build Phases ->Copy Bundle Resources
里加入 gRPCCertificates.bundle
。 需要为iOS10以上版本添加录音权限配置
iOS 10 使用录音权限,需要在 info
新加Privacy - Microphone Usage Description
键,值为字符串,比如“语音聊天需要录音权限”。
首次录音时会向用户申请权限。配置方式如图(选择Private-Microphone Usage Description)。
info
新加 Privacy - Location Usage Description
键,值为字符串,比如“查看附近的玩家需要获取地理位置权限”。首次使用定位时会向用户申请权限,配置方式如上图录音权限。将yim
复制到Cocos2d-x开发工具生成的游戏目录根目录下。
拷贝yim下的两个文件:LuaYIM.h,LuaYIM.cpp 到Classes目录,并加入项目。
拷贝yim/lib/x86 目录下的yim.dll, yim.lib, libusc.dll, jsoncpp-0.y.z.dll, libeay32.dll, nlscppsdk.dll, pthreadVC2.dll, ssleay32.dll
拷贝到执行目录(如果是64位机器,使用yim/lib/x64)。
在项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 中添加
$(ProjectDir)..\..\..\yim\include
。
yim.lib
(该库是release模式下的 如果运行的时候是debug模式请添加yim_Debug.lib,如果不存在yim_Debug.lib则代表yim.lib通用)。android-support-v4.jar
,这样可以兼容targetSdkVersion="23"
及其以上版本的录音授权模式,如果项目之前已经有Android-support依赖,可以不用引入SDK包内的android-support-v4.jar
。引入C++头文件
#include <LuaYIM.h>
readme.txt
MainScene.lua
为了方便说明如何调用接口,我们全文中都把youmeim作为YIM的实例对象使用
接口和示例:
local youmeim = cc.YIM:create()
仅需调用一次初始化,应避免反复初始化。
初始化接口的输入参数strAppKey
和strAppSecret
需要根据实际申请得到的值进行替换。
接口示例:
local errorcode = youmeim:init(strAppKey,strAppSecret)
参数:
strAppKey
:用户游戏产品区别于其它游戏产品的标识,可以在游密官网获取、查看。
strAppSecret
:用户游戏产品的密钥,可以在游密官网获取、查看。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 初始化之后需要立即设置回调处理方法。SDK内部所有的较长耗时的接口调用都会采用异步回调的方式返回结果,所以需要开发者实现:
-- 登录登出回掉
youmeim.OnLogin = function (errorcode,youmeID)
print("errorcode:" .. errorcode .. " youmeID:" .. youmeID)
end
youmeim.OnLogout = function ()
print("11: OnLogout")
end
-- 下载语音文件回调
youmeim.OnDownload = function ( errorcode, strSavepath, bodytype,chattype, serial,recvid,senderid,content,params,duration, createtime )
print("OnDownload:" .. serial .. " errorcode:" .. errorcode .. " path:" .. strSavepath)
end
-- 文本和自定义消息发送状态回掉
youmeim.OnSendMessageStatus = function(serial, errorcode, sendTime, isForbidRoom, reasonType, endTime)
print("OnSendMessageStatus" .. serial .. " errorcode:" .. errorcode)
end
-- 自己的语音消息发送状态回调
youmeim.OnSendAudioMessageStatus = function(serial, errorcode, content, localpath, duration, sendTime, isForbidRoom, reasonType, endTime)
print("OnSendAudioMessageStatus" .. serial .. " errorcode:" .. errorcode .. " content:" .. content .. " localpath:" .. localpath .. " duration:" .. duration)
end
-- 接收到他人的消息回调
youmeim.OnRecvMessage = function(bodytype,chattype, serial,recvid,senderid,content,params,duration)
print("OnRecvMessage" .. bodytype .. " chattype:" .. chattype .. " serial:" .. serial .. " recvid:" .. recvid .. " senderid:" .. senderid .. " content:" .. content .. " param:" .. params .. " duration: " .. duration)
if bodytype == 1 then
-- 文本消息
end
if bodytype == 5 then
-- 音频文件可以下载
youmeim:downloadAudioFile(serial,"C:\\Users\\joexie\\Desktop\\data\\11.wav")
end
end
-- 进入聊天频道的回调
youmeim.OnJoinChatroom = function(chatroomid ,errorcode)
print("OnJoinChatroom id:" .. chatroomid .. "errorcode:" .. errorcode)
end
-- 获取录音文件地址
youmeim.OnSpeechStatus =function(errorcode,requestid,downloadurl,duration,filesize,localpath,text)
end
-- 私聊消息历史记录查询结果
youmeim.OnQueryHistory = function(errorcode,targetid,remaincoutn,msglist)
for i=1,#msglist do
local chatType = msglist[i]["ChatType"]
local duration = msglist[i]["Duration"]
local param = msglist[i]["Param"]
local recid = msglist[i]["ReceiveID"]
local senderid = msglist[i]["SenderID"]
local serial = msglist[i]["Serial"]
local text = msglist[i]["Text"]
local msgType = msglist[i]["MessageType"]
local localpath = msglist[i]["LocalPath"]
end
end
-- 最近联系人查询回调
youmeim.OnGetRecentContacts =function(errorcode,contactLists)
for i=1,#contactLists do
print("OnGetRecentContacts " .. contactLists[i])
end
end
-- 有新消息通知
youmeim.OnRevMessageNotify=function (chattype, target )
end
-- 获取指定用户信息回调
youmeim.OnGetUserInfo = function ( errorcode, strUserInfo )
if errorcode == 0 and string.len(strUserInfo) ~= 0 then
local info = json.decode( strUserInfo )
print( info.nickname ..",".. info.server_area .. ",".. info.location .."," ..info.level .."," ..info.vip_level..","..info.extra)
end
end
--获取玩家登录状态回调
youmeim.OnGetUserStatus = function ( errorcode ,strUserID, status )
print("获取玩家登录状态,userID:"..strUserID.."_status:"..status)
end
--录音播放完成回调
youmeim.OnPlayCompletion = function ( errorcode, path )
print("播放结束:"..path)
end
-- 自己的语音消息开始上传的回调
youmeim.OnStartSendAudioMessage = function(serial,errorcode,content,localpath,duration)
print("OnStartSendAudioMessage" .. serial .. " errorcode:" .. errorcode .. " content:" .. content .. " localpath:" .. localpath .. " duration:" .. duration)
end
-- 文本翻译回调
youmeim.OnTranslateTextComplete = function(errorcode, requestID, text, srcLangCode, destLangCode)
printf("onTranslateTextComplete errorcode:"..errorcode.." requestID:"..requestID.." text:"..text.." srcLangCode:"..srcLangCode.." destLangCode:"..destLangCode);
end
-- 获取当前地理位置回调
youmeim.OnUpdateLocation = function(errorcode, districtCode, country, province, city, districtCounty, street, longitude, latitude)
printf("onUpdateLocation errorcode:"..errorcode.." districtCode:"..districtCode.." country:"..country.." province:"..province.." city:"..city.." longitude:"..longitude.." latitude:"..latitude);
end
-- 查找附近的人回调
youmeim.OnGetNearbyObjects = function(errorcode, startDistance, endDistance, nearbyList)
printf("onGetNearbyObjects errorcode:"..errorcode.." startDistance:"..startDistance.." endDistance:"..endDistance);
for i=1,#nearbyList do
local userID = msglist[i]["UserID"]
local distance = msglist[i]["Distance"]
local longitude = msglist[i]["Longitude"]
local latitude = msglist[i]["Latitude"]
local country = msglist[i]["Country"]
local province = msglist[i]["Province"]
local city = msglist[i]["City"]
local districtCounty = msglist[i]["DistrictCounty"]
local street = msglist[i]["Street"]
printf("userID:"..userID.."distance:"..distance.." longitude:"..longitude.." latitude:"..latitude.." country:"..country.." province:"..province.." city:"..city);
end
end
-- 用户进入频道
youmeim.OnUserJoinChatroom = function onUserJoinChatroom(chatroomid, userID)
print("onUserJoinChatroom chatroomid:" .. chatroomid .. " userID:" .. userID)
end
-- 用户退出频道
youmeim.OnUserLeaveChatroom = function onLeaveJoinChatroom(chatroomid, userID)
print("onLeaveJoinChatroom chatroomid:" .. chatroomid .. " userID:" .. userID)
end
-- 获取麦克风状态
youmeim.OnGetMicrophoneStatus = function onGetMicrophoneStatus(status)
print("onGetMicrophoneStatus status:" .. status)
end
-- 举报处理结果
youmeim.OnAccusationResultNotify = function onAccusationResultNotify(result, userID, accusationTime)
print("onAccusationResultNotify result:" .. result .. " userID:" .. userID .. " accusationTime:" .. accusationTime)
end
-- 接收公告
youmeim.OnRecvNotice = function onRecvNotice(notice)
local noticeID = notice["NoticeID"]
local channelID = notice["ChannelID"]
local noticeType = notice["NoticeType"]
local noticeContent = notice["NoticeContent"]
local linkText = notice["LinkText"]
local linkAddress = notice["LinkAddress"]
local beginTime = notice["BeginTime"]
local endTime = notice["EndTime"]
print("noticeID:"..noticeID.." channelID:"..channelID.." noticeType:"..noticeType.." noticeContent:"..noticeContent.." linkText:"..linkText.." linkAddress:"..linkAddress)
end
-- 撤销公告
youmeim.OnCancelNotice = function onCancelNotice(noticeID, channelID)
print("onCancelNotice noticeID" .. noticeID .. " channelID:" .. channelID)
--查询禁言状态
youmeim.OnGetForbiddenSpeakInfo = function ( errorcode, arrForbiddenInfos )
print("收到禁言数据:"..errorcode..",count:"..#arrForbiddenInfos)
for i = 1, #arrForbiddenInfos do
local info = arrForbiddenInfos[i];
print("禁言:channel:"..info["channelID"]..","..","..info["reasonType"]..","..info["endTime"]);
print(info["isForbidRoom"])
end
end
-- 开始重连
youmeim.OnStartReconnect = function ()
print("OnStartReconnect")
-- 重连结果
youmeim.OnRecvReconnectResult = function (result)
print("OnRecvReconnectResult result:" .. result)
-- 录音音量值,音量值范围:0~1, 频率:1s iOS约2次,Android约8次
youmeim.OnRecordVolume = function (volume)
print("OnRecordVolume volume:" .. volume)
-- 注册回调
youmeim.registerScriptHandler(youmeim,
youmeim.OnLogin,
youmeim.OnLogout,
youmeim.OnDownload,
youmeim.OnSendMessageStatus,
youmeim.OnSendAudioMessageStatus,
youmeim.OnRecvMessage,
youmeim.OnJoinChatroom,
youmeim.OnSpeechStatus,
youmeim.OnQueryHistory,
youmeim.OnGetRecentContacts,
youmeim.OnRevMessageNotify,
youmeim.OnGetUserInfo,
youmeim.OnGetUserStatus,
youmeim.OnPlayCompletion,
youmeim.OnStartSendAudioMessage,
youmeim.OnTranslateTextComplete,
youmeim.OnUpdateLocation,
youmeim.OnGetNearbyObjects,
youmeim.OnDownloadByUrl,
youmeim.OnUserJoinChatroom,
youmeim.OnUserLeaveChatroom,
youmeim.OnGetMicrophoneStatus,
youmeim.OnAccusationResultNotify,
youmeim.OnRecvNotice,
youmeim.OnCancelNotice,
youmeim.OnGetForbiddenSpeakInfo,
youmeim.OnGetRoomMemberCount,
youmeim.OnBlockUser,
youmeim.OnUnBlockAllUser,
youmeim.OnGetBlockUsers
);
--注册开始重连回调
youmeim.bindScriptHandler(youmeim,2,youmeim.OnStartReconnect)
--注册重连结果回调
youmeim.bindScriptHandler(youmeim,3,youmeim.OnRecvReconnectResult)
--注册录音音量回调
youmeim.bindScriptHandler(youmeim,4,youmeim.OnRecordVolume)
--注册离开所有房间回调
youmeim.bindScriptHandler(youmeim,5,youmeim.OnLeaveAllChatRooms)
--注册获取指定用户距离回调
youmeim.bindScriptHandler(youmeim,6,youmeim.onGetDistance)
--注册从服务器查询房间历史消息回调
youmeim.bindScriptHandler(youmeim,7,youmeim.onQueryRoomHistoryMessageFromServer)
--注册用户资料变更通知
youmeim.bindScriptHandler(youmeim,8,youmeim.OnUserInfoChangeNotify)
--注册设置用户基本资料回调
youmeim.bindScriptHandler(youmeim,9,youmeim.OnSetUserInfo)
--注册查询用户基本资料回调
youmeim.bindScriptHandler(youmeim,10,youmeim.OnQueryUserInfo)
--注册设置用户头像回调
youmeim.bindScriptHandler(youmeim,11,youmeimOnSetPhotoUrl)
--注册切换用户在线状态回调
youmeim.bindScriptHandler(youmeim,12,youmeim.OnSwitchUserOnlineState)
--注册查找用户回调
youmeim.bindScriptHandler(youmeim,13,youmeim.OnFindUser)
--注册请求添加好友回调
youmeim.bindScriptHandler(youmeim,14,youmeim.OnRequestAddFriend)
--注册被添加为好友通知
youmeim.bindScriptHandler(youmeim,15,youmeim.OnBeAddFriendNotify)
--注册被请求添加为好友通知
youmeim.bindScriptHandler(youmeim,16,youmeim.OnBeRequestAddFriendNotify)
--注册处理被请求添加为好友回调
youmeim.bindScriptHandler(youmeim,17,youmeim.OnDealBeRequestAddFriend)
--注册请求添加好友结果通知
youmeim.bindScriptHandler(youmeim,18,youmeim.OnRequestAddFriendResultNotify)
--注册删除好友回调
youmeim.bindScriptHandler(youmeim,19,youmeim.OnDeleteFriend)
--注册被好友删除通知
youmeim.bindScriptHandler(youmeim,20,youmeim.OnBeDeleteFriendNotify)
--注册拉黑好友回调
youmeim.bindScriptHandler(youmeim,21,youmeim.OnBlackFriend)
--注册查询我的好友回调
youmeim.bindScriptHandler(youmeim,22,youmeim.OnQueryFriends)
--注册查询好友请求列表回调
youmeim.bindScriptHandler(youmeim,23,youmeim.OnQueryFriendRequestList)
开始重连回调:
youmeim.OnStartReconnect=function()
end
重连结果回调:
youmeim.OnRecvReconnectResult=function(result)
end
result
:重连结果,0-重连成功,1-重连失败,再次重连,音量值范围:0~1, 频率:1s ios 约2次,android 约8次。
音量回调通知:
youmeim.OnRecordVolume=function(volume)
end
volume
:音量值。 登录接口需要用户提供用户名、密码。登录为异步过程,通过回调函数返回是否成功,成功后方能进行后续操作。 用户首次登录会自动注册,自行设置登录用户名和登录密码,如果后台已存在此用户名,则会提示校验密码(用户名和密码的格式见下方相关参数说明)。
接口示例:
local errorcode = youmeim:login("userid","user_password","token")
参数说明:
userid
:用户ID,由调用者分配,不可为空字符串,只可由字母或数字或下划线组成,长度限制为255字节。
user_password
:用户密码,不能为空,一般固定为"123456"即可。
token
:使用服务器token验证模式时使用该参数,否则使用空字符串:"",由restAPI获取token值。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义
回调通知:
youmeim.OnLogin = function (errorcode,youmeID)
end
errorcode
:错误码。youmeID
:用户ID。 如用户主动退出或需要进行用户切换,则需要调用登出操作,登出接口为logout
。
接口示例:
local errorcode = youmeim:logout()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义
回调通知:
youmeim.OnLogout = function ()
end
设置用户信息后,在游密消息管理后台才能看到消息发送者的详细信息。
接口示例:
local errorcode = youmeim.setUserInfo( strUserInfo )
参数:
strUserInfo
:字符串,用户信息的json串。包含字段: nickname
,server_area_id
,server_area
,location_id
,location
,level
,vip_level
,extra
。
nickname
:用户昵称。
server_area_id
:游戏服ID。
server_area
:游戏服名称。
location_id
:游戏大区ID。
location
:游戏大区名。
level
:角色等级。
vip_level
:玩家VIP等级。
extra
:其它自定义扩展信息,建议用json字符串。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 接口示例:
local errorcode = youmeim.getUserInfo( strUserID )
参数:
strUserID
:字符串,用户的ID(登录IM,发送消息时用的ID)。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetUserInfo = function( errorcode, strUserID strUserInfo )
end
errorcode
:错误码。strUserID
:用户ID。strUserInfo
:用户详细信息,包含以下字段nickname
,server_area_id
,server_area
,location_id
,location
,level
,vip_level
,extra
。 接口示例:
local errorcode = youmeim.queryUserStatus(strUserID)
参数:
strUserID
:字符串,用户的ID(登录IM,发送消息时用的ID)。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetUserStatus = function(errorcode, strUserID, status)
end
errorcode
:错误码,查询请求是否成功的通知。strUserID
:查询的用户ID。status
:登录状态,0表示在线,1表示离线。(如查询的用户ID是未注册的,用户状态返回的是离线状态) 通过joinChatRoom
接口加入聊天频道,如果频道不存在则后台自动创建。有了这个ID就可以收发频道消息。开发者要保证频道号全局唯一,以避免用户进入错误频道。
接口示例:
local errorcode = youmeim:joinChatRoom(room_id)
参数:
room_id
:请求加入的频道ID,仅支持数字、字母、下划线组成的字符串,区分大小写,长度限制为255字节。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnJoinChatroom=function(channelID, errorcode)
end
channelID
:频道ID。errorcode
:错误码。 通过leaveChatRoom
接口离开频道。
接口示例:
local errorcode = youmeim:leaveChatRoom(room_id)
参数:
room_id
:请求离开的频道ID,字符串。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 通过leaveAllChatRooms
接口离开所有已进入的频道。
接口示例:
local errorcode = youmeim:leaveAllChatRooms()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnLeaveAllChatRooms=function(errorcode)
end
errorcode
: 错误码。 此功能默认不开启,需要的请联系我们开启此服务。联系我们,可以通过专属游密支持群或者技术支持的大群。
小频道(小于100人)内,当其他用户进入频道,会收到OnUserJoinChatRoom
通知。
原型:
youmeim.OnUserJoinChatroom = function onUserJoinChatroom(chatroomid, userID)
chatRoomID
:频道ID。userID
:用户ID。 小频道(小于100人)内,当其他用户退出频道,会收到OnUserLeaveChatRoom
通知。
原型:
youmeim.OnUserLeaveChatroom = function onLeaveJoinChatroom(chatroomid, userID)
chatRoomID
:频道ID。userID
:用户ID。 接口示例:
local errorcode = youmeim:getRoomMemberCount("roomID")
参数:
roomID
:房间ID(已成功加入此频道才能获取该频道的人数)。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetRoomMemberCount = function onGetRoomMemberCount(errorcode, roomID, count)
end
errorcode
:错误码。chatRoomID
:频道ID。count
:频道中的成员数量。 通过OnRecvMessage
接口被动接收消息,需要开发者实现。
接收消息通知:
youmeim.OnRecvMessage = function(bodyType,chatType,serial,recvID,senderID,content,param,duration,createTime,giftID,giftCount,anchor,fileName,fileSize,fileType,fileExtension,extraParam)
end
bodyType
: 消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。chatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天,3是群发消息。serial
: 消息ID。recvID
: 消息接收者ID。senderID
: 消息发送者ID。content
: 文本消息内容/语音识别出的文本。param
:附加参数(语音消息,礼物消息,文本消息)。duration
:语音时长(单位:秒)。createTime
:消息发送时间。giftID
:礼物ID。giftCount
:礼物数量。anchor
:主播ID。fileName
:文件名。fileSize
:文件大小。fileType
:文件类型,0-其它,1-音频(语音),2-图片,3-视频。fileExtension
:文件扩展信息。extraParam
:附加信息。 异步返回结果通过OnSendMessageStatus
接口返回。
接口示例:
local requestid = youmeim:sendTextMessage("str_reciver_id",iChatType,"message_content", "attachParam");
参数:
str_reciver_id
:接收者ID,私聊传入用户ID,频道聊天传入频道ID。
iChatType
:整型,1
表示私聊,2
表示频道聊天。
message_content
:聊天内容。
attachParam
:发送文本附加信息。
返回值:
requestid
:消息id号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。
回调通知:
youmeim.OnSendMessageStatus = function(serial, errorcode, sendTime, isForbidRoom, reasonType, forbidEndTime)
end
serial
:消息序列号,用于校验一条消息发送成功与否的标识。errorcode
:错误码。sendTime
:消息发送时间。isForbidRoom
:若发送的是频道消息,显示在此频道是否被禁言,true-被禁言,false-未被禁言。reasonType
:若在频道被禁言,禁言原因类型,0-未知,1-发广告,2-侮辱,3-政治敏感,4-恐怖主义,5-反动,6-色情,7-其它。forbidEndTime
:若在频道被禁言,禁言结束时间。 用于群发文本消息的接口,每次不要超过200个用户。
接口示例:
local errorcode = youmeim:multiSendTextMessage(userids,text)
参数:
userids
:接受消息的用户id列表,比如:{"userid_1","userid_2","userid_3"}
。
text
:文本消息内容,比如:"text content"
。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 给主播发送礼物消息的接口,支持在游密主播后台查看礼物消息信息和统计信息。客户端还是通过OnRecvMessage
接收消息。
接口示例:
local requestid = youmeim:sendGift(strAnchorId, strChannel, intGiftId, intGiftCount, strExtraParam)
参数:
strAnchorId
:游密后台设置的对应的主播游戏id。
strChannel
:主播所进入的频道ID,通过joinChatRoom
进入频道的用户可以接收到消息。
intGiftId
:礼物物品id,特别的是0
表示只是留言。
intGiftCount
:礼物物品数量。
strExtraParam
:扩展内容json字符串,目前要求包含如下字段:
{"nickname":"","server_area":"","location":"","score":"","level":"","vip_level":"","extra":""}
。
requestid
:消息id号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。接口示例:
local requestid = youmeim:sendCustomMessage(receiverID, chatType, content)
参数:
receiverID
:接收者(用户ID或者频道ID),字符串。
chatType
:聊天类型,int,1-私聊,2-频道聊天。
content
:自定义消息内容。
返回值:
requestid
:消息id号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。
OnSendMessageStatus = function(serial, errorcode, sendTime, isForbidRoom, reasonType, forbidEndTime)
serial
:消息序列号。errorcode
:错误码。sendTime
:文件发送时间。isForbidRoom
:若发送的是频道消息,表示在此频道是否被禁言,true-被禁言,false-未被禁言(errorcode为禁言才有效)。reasonType
:若在频道被禁言,禁言原因类型,0-未知,1-发广告,2-侮辱,3-政治敏感,4-恐怖主义,5-反动,6-色情,7-其它。forbidEndTime
:若在频道被禁言,禁言结束时间(errorcode为禁言才有效)。 发送文件消息,异步返回结果通过OnSendMessageStatus
接口返回,客户端还是通过OnRecvMessage
接收消息。
接口示例:
local requestid = youmeim:sendFile(receiverID, chatType, filePath, extraParam, fileType)
参数:
receiverID
:接收者(用户ID或者频道ID),字符串。
chatType
:聊天类型,int,1-私聊,2-频道聊天。
filePath
:要发送文件的路径,包括文件名,字符串。
extraParam
:扩展内容,格式自己定义,自己解析,字符串。
fileType
:文件类型,0-其它,1-音频(语音),2-图片,3-视频,int。
返回值:
requestid
:消息id号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。
OnSendMessageStatus = function(serial, errorcode, sendTime, isForbidRoom, reasonType, forbidEndTime)
serial
:消息序列号。errorcode
:错误码。sendTime
:文件发送时间。isForbidRoom
:若发送的是频道消息,表示在此频道是否被禁言,true-被禁言,false-未被禁言(errorcode为禁言才有效)。reasonType
:若在频道被禁言,禁言原因类型,0-未知,1-发广告,2-侮辱,3-政治敏感,4-恐怖主义,5-反动,6-色情,7-其它。forbidEndTime
:若在频道被禁言,禁言结束时间(errorcode为禁言才有效)。 接收消息接口在OnRecvMessage回调,通过bodytype == 7
分拣出文件消息,用serial
来下载文件,调用函数downloadAudioFile
下载文件,下载成功会通知OnDownload
。
windows下,会对下载接口的保存路径参数的'/'转换为'\';如果传入的保存路径参数不符合windows下的路径格式,下载回调中的保存路径可能和传入的保存路径不同。
接口示例:
local errorcode = youmeim:downloadAudioFile(serial,save_path)
参数:
serial
:消息ID,数字字符串。
save_path
:指定文件保存路径(带文件名的全路径),比如"/sdcard/cache/1.wav",如果目录不存在,SDK会自动创建,字符串。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnDownload = function(errorcode,savePath,bodyType,chatType,serial,recvID,senderID,content,param,audioTime,createTime)
end
errorcode
:下载结果错误码。savePath
:保存路径。bodyType
:消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。chatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
serial
:消息ID。recvID
:消息接收者ID。senderID
:消息发送者ID。content
:语音识别的文本内容。param
:发送语音的附加信息。audioTime
:语音时长(单位:秒)。createTime
:消息发送时间。 语音消息聊天简要流程:
setDownloadAudioMessageSwitch()在初始化之后,启动语音之前调用;若设置了自动下载语音消息,不需再调用downloadAudioFile()接口,收到语音消息时会自动下载,自动下载完成也会收到downloadAudioFile()接口对应的OnDownload()回调。
接口示例:
local errorcode = youmeim:setDownloadAudioMessageSwitch(download);
参数:
download
:true-自动下载语音消息,false-不自动下载语音消息(默认)。
errorcode
:0
为调用成功,非0
表示调用失败,详细描述见错误码定义。 sendAudioMessage
提供语音识别功能,将语音识别为文字,默认输入语音为普通话,识别文字为简体中文,可通过youmeim:setSpeechRecognizeLanguage
函数设置语言。此服务需要联系我们进行配置。
接口示例:
local errorcode = youmeim:setSpeechRecognizeLanguage(language)
参数:
language
:语言(0-普通话 1-粤语 2-四川话 3-河南话 4-英语 5-繁体中文)。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
sendAudioMessage
提供语音识别功能,将语音识别为文字,默认输入语音为普通话,识别文字为简体中文,可通过youmeim:SetSpeechRecognizeLanguageByCode
函数设置语言;支持海外多种语言,需要联系我们配置此服务。
接口示例:
local errorcode = youmeim:SetSpeechRecognizeLanguageByCode(languageCode)
参数:
languageCode
:语言代码,BCP-47格式(如zh-CN, en-US )。 支持的语言列表:https://cloud.google.com/speech/docs/languages。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 调用sendAudioMessage
接口就开始录音(该接口支持语音转文字,若不需要转文字建议使用sendOnlyAudioMessage
),调用stopAudioMessage
后自动停止录音并发送。调用cancleAudioMessage
取消本次消息发送。
注意:语音消息最大的时长是1分钟(超过1分钟就自动发出去)。
接口示例:
// 带文字识别的录音接口
local requestid = youmeim:sendAudioMessage("reciver_id",chatType)
// 不带文字识别的录音接口
local requestid = youmeim:sendOnlyAudioMessage("reciver_id",chatType)
参数:
reciver_id
:接收者ID,私聊传入用户ID,频道聊天传入频道ID,字符串。
chatType
:整型,1表示私聊,2表示频道聊天。
requestid
:消息id号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。 接口示例:
local errorcode = youmeim:stopAudioMessage(extra_param)
参数:
extra_param
:给语音消息附加自定义参数,比如json字符串。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
异步回调接口:
结束录音并发送接口对应两个回调接口,若语音成功发送出去能得到两个回调通知,语音发送失败则只会得到发送语音结果回调
。
// 开始上传语音回调,(调用stopAudioMessage停止语音之后,成功发送语音消息之前),录音结束,开始发送录音的通知,这个时候已经可以拿到语音文件进行播放
youmeim.OnStartSendAudioMessage = function(serial,errorcode,content,localpath,duration)
end
// 发送语音结果回调,自己的语音消息发送成功或者失败的通知。
youmeim.OnSendAudioMessageStatus = function(serial, errorcode, content, localpath, duration, sendTime, isForbidRoom, reasonType, forbidEndTime)
end
参数:
serial
:消息序列号,用于校验一条消息发送成功与否的标识。
errorcode
:等于0才是操作成功。
content
:语音转文字识别的文本内容,如果没有用带语音转文字的接口,该字段为空字符串。
localpath
:录音生成的wav文件的本地完整路径,比如"/sdcard/xxx/xxx.wav"。
duration
:录音时长,整型(单位为秒)。
sendTime
:语音发送时间。
isForbidRoom
:若发送的是频道消息,表示在此频道是否被禁言,true-被禁言,false-未被禁言(errorcode为禁言才有效)。
reasonType
:禁言原因,参见ForbidSpeakReason(errorcode为禁言才有效)。
forbidEndTime
:禁言截止时间戳的字符串(errorcode为禁言才有效)。
接口示例:
local errorcode = youmeim:cancleAudioMessage()
参数:
无。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 接收消息接口在OnRecvMessage回调,通过bodytype == 5
分拣出语音消息,用serial
来下载语音文件,调用函数downloadAudioFile
下载语音消息,下载成功会通知OnDownload
。
windows下,会对下载接口的保存路径参数的'/'转换为'\';如果传入的保存路径参数不符合windows下的路径格式,下载回调中的保存路径可能和传入的保存路径不同。
接口示例:
local errorcode = youmeim:downloadAudioFile(serial,save_path)
参数:
serial
:消息ID,数字字符串。
save_path
:指定文件保存路径(带文件名的全路径),比如"/sdcard/cache/1.wav",如果目录不存在,SDK会自动创建,字符串。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnDownload = function(errorcode,savePath,bodyType,chatType,serial,recvID,senderID,content,param,audioTime,createTime)
end
errorcode
:下载结果错误码。savePath
:保存路径。bodyType
:消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。chatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
serial
:消息ID。recvID
:消息接收者ID。senderID
:消息发送者ID。content
:语音识别的文本内容。param
:发送语音的附加信息。audioTime
:语音时长(单位:秒)。createTime
:消息发送时间。 接口示例:
local errorcode = youmeim:startPlayAudio( path )
参数:
path
:语音文件的完整路径。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnPlayCompletion = function( errorcode, path )
end
errorcode
:错误码。path
:被播放的音频文件地址。 接口示例:
local errorcode = youmeim:stopPlayAudio( )
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 设置语音播放的音量大小。
接口示例:
youmeim:setVolume( volume )
volume
:音量值,取值范围0.0f
- 1.0f
,默认值为 1.0f
。 接口示例:
local bPlaying = youmeim:isPlaying( )
bPlaying
:是否正在播放,true
表示在播放,false
表示不在播放。 设置录音时用于保存录音文件的缓存目录,如果没有设置,SDK会在APP默认缓存路径下创建一个文件夹用于保存音频文件。 该接口建议初始化之后立即调用 。
接口示例:
youmeim:setAudioCacheDir(dir_path)
参数:
dir_path
:缓存录音文件的文件夹路径,如果目录不存在,SDK会自动创建。
获取当前设置的录音缓存目录。
接口示例:
local path = youmeim:getAudioCachePath()
清理语音缓存目录(注意清空语音缓存目录后历史记录中会无法读取到音频文件,调用清理历史记录接口也会自动删除对应的音频缓存文件)
接口示例:
local bClearing = youmeim:clearAudioCachePath()
true
:表示清理成功,false
:表示清理操作失败。 此功能是为了只获取语音识别的文字,不发送语音消息,接口调用与发送语音消息相同,但在成功录音后仅会收到识别的语音文本通知,不会收到OnSendAudioMessage回调。 实现只识别语音文字功能的接口调用顺序:setOnlyRecognizeSpeechText->sendAudioMessage->stopAudioMessage->OnGetRecognizeSpeechText
接口示例:
local errorcode = youmeim:setOnlyRecognizeSpeechText(recognition);
参数:
recognition
:true-只识别语音文字,false-识别语音文字并发送语音消息。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
成功调用发送语音消息接口后的通知接口:
youmeim.OnGetRecognizeSpeechText = function (serial, errorcode, text)
end
serial
:消息ID。errorcode
:错误码。text
:返回的语音识别文本内容。 这是一个异步操作,操作结果会通过回调参数返回。(该接口会临时占用麦克风)。
接口示例:
local errorcode = youmeim:getMicrophoneStatus()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetMicrophoneStatus = function onGetMicrophoneStatus(status)
end
status
:麦克风状态值,0-可用,1-无权限,2-静音,3-不可用。 接口示例:
local requestid = youmeim:startAudioSpeech(translate)
参数:
translate
:是否需要语音转文字。
requestid
:消息序列号,字符串类型(实际是长整型数字),-1
表示调用失败,失败后不会有回调通知。 该接口只上传到服务器并异步返回音频文件的下载链接,不会自动发送,该接口对应startAudioSpeech()
。
接口示例:
local errorcode = youmeim:stopAudioSpeech()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
相关接口:
-- 取消本次录音
local errorcode = youmeim:cancleAudioMessage()
回调通知:
``` lua youmeim.OnSpeechStatus=function(errorcode,requestid,downloadurl,duration,filesize,localpath,text) end
errorcode
:错误码。requestid
:消息ID。downloadurl
:语音文件的下载地址。duration
:录音时长,单位秒。filesize
:文件大小,字节。localpath
:本地语音文件的路径。text
:语音识别结果,可能为空字符串。 接口示例:
local errorcode = youmeim:downloadFileByUrl( downloadurl, save_path)
参数:
downloadurl
:语音文件的url地址,OnSpeechStatus接口返回,字符串。
save_path
:下载语音文件的本地存放地址,带文件名的全路径,字符串。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnDownloadByUrl = function ( errorcode, fromUrl, savePath)
end
errorcode
:错误码。fromUrl
:下载的语音文件url。savePath
:本地存放地址。 若屏蔽用户的消息,此屏蔽用户发送的私聊/频道消息都接收不到。
接口示例:
local errorcode = youmeim:blockUser("userID", block)
参数:
userID
:需屏蔽/解除屏蔽的用户ID。
block
:true-屏蔽 false-解除屏蔽。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnBlockUser = function onBlockUser(errorcode, userID, block)
end
errorcode
:错误码。userID
:用户ID。block
:true-屏蔽 false-解除屏蔽。 接口示例:
local errorcode = youmeim:unBlockAllUser()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnUnBlockAllUser = function onUnBlockAllUser(errorcode)
end
errorcode
:错误码。 获取被自己屏蔽接收消息的所有用户。
接口示例:
local errorcode = youmeim:getBlockUsers()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetBlockUsers = function onGetBlockUsers(errorcode, userList)
end
errorcode
:错误码。userList
:屏蔽用户ID数组。 在自动接收消息和手动接收消息间切换,默认是自动接收消息。
接口示例:
local errorcode = youmeim:setReceiveMessageSwitch( roomIDs, autoReceive)
参数:
roomIDs
:频道ID的数组,比如:{"room1","room2"}
。
autoReceive
:true
为自动接收消息,false
为手动接收消息,默认为true
。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 在手动接收消息模式,需要调用该接口后才能收到 OnRecvMessage
通知。
接口示例:
local errorcode = youmeim:getNewMessage( roomIDs)
参数:
roomIDs
:频道ID的数组,比如:{"room1","room2"}
。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 在手动接收消息模式,若设置了OnRevMessageNotify的监听,会通知新消息的数量。
通知接口:
youmeim.OnRevMessageNotify=function (chattype, target)
end
chattype
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
target
:如果是频道聊天,该值为频道ID;私聊该值为空。 设置频道消息是否保存,默认不保存。私聊历史记录默认保存
。
接口示例:
local errorcode = youmeim:setRoomHistoryMessageSwitch( roomIDs, save )
参数:
roomIDs
:要设置的频道ID列表,比如:{"room1","room2"}
save
:true
保存频道聊天记录,false
不保存频道聊天记录,默认为false
。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义 从服务器拉取频道最近的聊天历史记录。 这个功能默认不开启,需要的请联系我们修改服务器配置。联系我们,可以通过专属游密支持群或者技术支持的大群。
接口示例:
local errorcode = youmeim:queryRoomHistoryMessageFromServer(roomID,count,direction)
参数:
roomID
:字符串,频道id。
count
:整型,消息数量(最大30条)。
directon
:历史消息排序方向 0:按时间戳升序 1:按时间戳逆序。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
-- 与常规聊天一致
youmeim.onQueryRoomHistoryMessageFromServer = function(errorcode, roomID, remain, messageList)
end
参数:
errorcode
:错误码。
roomID
: 频道ID。
remain
: 剩余消息数量,该参数已弃用,目前返回值都是。
messageList
:消息列表。
备注:
该回调返回的消息记录会包括已屏蔽用户的消息。
messageList
中的每一条消息包含的关键字如下:
ChatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
MessageType
:消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。
MessageID
:消息ID。
CreateTime
:消息发送时间。
ReceiveID
:消息接收者ID。
SenderID
:消息发送者ID。
若MessageType=1(文本消息)有如下关键字:
Content
:文本消息内容。
若MessageType=5(语音消息)有如下关键字:
Content
:若使用的是语音转文字录音,此值为语音识别的文本内容,否则是空字符串。
ExtraParam
:发送语音时的附加参数。
AudioDuration
:语音时长(单位:秒)。
若MessageType=7(文件消息)有如下关键字:
ExtraParam
:附加参数。
FileType
:文件类型,0-其它,1-音频(语音),2-图片,3-视频。
FileSize
:文件大小。
FileName
:文件名称。
FileExtension
:扩展内容。
若MessageType=8(礼物消息)有如下关键字:
ExtraParam
:附加参数。
GiftID
:礼物ID。
GiftCount
:礼物数量。
Anchor
:主播ID。
接口示例:
local errorcode = youmeim:queryHistoryMessage(strTargetID, chatType, strStartMessageID, intCount, intDirection )
参数:
strTargetID
:私聊为用户的id/频道聊天为频道ID。
chatType
: 聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
strStartMessageID
:起始历史记录消息id(与requestid不同),为"0"
表示首次查询,将倒序获取count
条记录(lua不支持long,所以使用的是数字字符串)。
intCount
:最多获取多少条。
intDirection
:历史记录查询方向,startMessageID=0
时,direction使用默认值0;strStartMessageID>0
时,0
表示查询比strStartMessageID
小的消息,1
表示查询比strStartMessageID
大的消息。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
相关函数:
对于房间本地记录,需要先设置自动保存房间消息。setRoomHistoryMessageSwitch
。
回调通知:
youmeim.OnQueryHistory = function(errorcode,targetid,remaincount,msglist)
for i=1,#msglist do
local chatType = msglist[i]["ChatType"]
local duration = msglist[i]["Duration"]
local param = msglist[i]["Param"]
local recid = msglist[i]["ReceiveID"]
local senderid = msglist[i]["SenderID"]
local serial = msglist[i]["Serial"]
local text = msglist[i]["Text"]
local msgType = msglist[i]["MessageType"]
local localpath = msglist[i]["LocalPath"]
end
end
回调参数:
errorcode
:错误码。
targetid
:用户ID/频道ID。
remaincount
:剩余历史消息条数。
msgList
:消息列表。
备注:
msgList
中的每一条消息包含的关键字如下:
ChatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
MessageType
:消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。
Serial
:消息ID。
CreateTime
:消息发送时间。
ReceiveID
:消息接收者ID。
SenderID
:消息发送者ID。
若MessageType=1(文本消息)有如下关键字:
Text
:文本消息内容。
若MessageType=5(语音消息)有如下关键字:
Text
:若使用的是语音转文字录音,此值为语音识别的文本内容,否则是空字符串。
Param
:发送语音时的附加参数。
Duration
:语音时长(单位:秒)。
LocalPath
:语音消息文件的本地路径。
建议定期清理本地历史记录。
接口示例:
local errorcode = youmeim:deleteHistoryMessage( chatType, strTime)
参数:
chatType
:聊天类型,1私聊,2频道聊天。
strTime
:数字字符串,Unix timestamp,精确到秒,表示删除这个时间点之前的所有历史记录。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 可以根据消息ID删除对应的本地聊天历史记录。
接口示例:
local errorcode = youmeim:deleteHistoryMessageByID(strMessageID)
参数:
strMessageID
:数字字符串,如果指定了大于"0"的值,将删除指定消息id的历史记录
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义 可以根据用户ID或者频道ID删除对应的本地聊天历史记录,保留消息ID白名单中的消息记录,白名单列表为空时删除与该用户ID或频道ID有关的所有本地聊天历史记录。
原型:
local errorcode = youmeim:deleteSpecifiedHistoryMessage(targetID,chatType,excludeMesList)
参数:
targetID
:用户ID或者频道ID。
chatType
:聊天类型,私聊/频道聊天,1是私聊,2是频道聊天。
excludeMesList
:消息ID白名单,若无白名单,传{""}。
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 该接口是根据本地历史消息记录生成的最近联系人列表,按最后聊天时间倒序排列。该列表会受清理历史记录消息的接口影响。
原型:
local errorcode = youmeim:getContact()
参数:
无。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
yimInstance.OnGetRecentContacts =function(errorcode,contactLists)
for i=1,#contactLists do
print("OnGetRecentContacts userid:" .. contactLists[i])
end
end
回调参数:
errorcode
:错误码。
contactLists
:最近联系人列表。
contactLists
中每一条记录包含以下关键字:
ContactID
:联系人ID。
MessageType
:消息类型,0-未知类型,1-文本消息,2-自定义消息,3-表情,4-图片,5-语音,6-视频,7-文件,8-礼物。
MessageContent
:消息内容。
CreateTime
:消息创建时间。
将文本翻译成指定语言的文本,异步返回结果。
接口示例:
local requestID = youmeim:translateText(strText, destLanguage, srcLanguage);
参数:
strText
:待翻译文本。
destLanguage
:目标语言编码。
srcLanguage
:原语言编码。
回调通知:
youmeim.OnTranslateTextComplete = function(errorcode, requestID, text, srcLangCode, destLangCode)
end
errorcode
:错误码,0表示成功。requestID
:请求ID。text
:翻译成指定语言的文本。srcLanguage
:原语言编码。destLanguage
:目标语言编码。 考虑到客户端可能需要传递一些自定义消息,关键字过滤方法就直接提供出来,客户端可以选择是否过滤关键字,并且可以根据匹配到的等级进行过滤。比如level
返回的值为'2'表示广告,那么可以在发送时选择不发送,接收方可以选择不展示。
接口示例:
local filter_str = youmeim:GetFilterText(source_string)
参数:
source_string
:消息原文。
建议游戏切入后台时通知该接口,以便于得到更好重连效果。 调用onPause(false),在游戏切入后台后,若IM是登录状态,依旧接收IM消息; 调用onPause(true),游戏切入后台,即使IM是登录状态也不会接收IM消息;在游戏恢复运行时会主动拉取暂停期间未接收的消息,收到OnRecvMessage()回调。
接口示例:
youmeim:onPause(pauseReceiveMessage)
pauseReceiveMessage
:是否暂停接收IM消息,true-暂停接收 false-不暂停接收。 建议游戏从后台激活到前台时通知该接口,以便于得到更好重连效果。
接口示例:
youmeim:onResume()
accusation
接口提供举报功能,对用户违规的发言内容行为进行举报,管理员在后台进行审核处理并将结果通知用户。
接口示例:
local errorcode = youmeim:accusation(userID, source, reason, description, extraParam)
参数:
userID
:被举报用户ID。
source
:来源(私聊/频道,1是私聊,2是频道聊天)。
reason
:原因,由用户自定义枚举。
description
:原因描述。
extraParam
:附加信息JSON格式 ({"nickname":"","server_area":"","level":"","vip_level":""})。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
举报处理结果通知 当管理员对举报进行审核处理后,会将举报处理结果通知用户。
举报结果通知:
youmeim.OnAccusationResultNotify = function onAccusationResultNotify(result, userID, accusationTime)
end
result
:处理结果,0-忽略,1-警告,2-禁言。userID
:被举报用户ID。accusationTime
:举报时间。 用户查询其所在频道的禁言状态。
接口示例:
local errorcode = youmeim.getForbiddenSpeakInfo()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetForbiddenSpeakInfo = function ( errorcode, arrForbiddenInfos )
end
回调参数:
errorcode
:错误码。
arrForbiddenInfos
:禁言状态列表,每一个代表一个频道的禁言状态。
arrForbiddenInfos
中每条记录包含以下关键字:
channelID
:频道ID。
isForbidRoom
:此频道是否被禁言,true-被禁言,false-未被禁言。
reasonType
:禁言原因类型,0-未知,1-发广告,2-侮辱,3-政治敏感,4-恐怖主义,5-反动,6-色情,7-其它。
endTime
:若被禁言,禁言结束时间。
基本流程:申请开通公告功能->后台添加新公告然后设置公告发送时间,公告消息类型,发送时间,接收公告的频道等。->(客户端流程) 设置对应监听-> 调用对应接口->回调接收
1.公告发送由后台配置,如类型、周期、发送时间、内容、链接、目标频道、次数、起始结束时间等。
2.公告三种类型:跑马灯,聊天框,置顶公告, (1) 跑马灯,聊天框公告可设置发送时间,次数和间隔(从指定时间点开始隔固定间隔时间发送多次,界面展示及显示时长由客户端决定)。 (2) 置顶公告需设置开始和结束时间(该段时间内展示)。
3.三种公告均有一次性、周期性两种循环属性, 一次性公告,到达指定时间点,发送该条公告; 周期性公告,跟一次性公告发送规则一致,但是可以设置发送周期(在每周哪几天的指定时间发送)。
4.跑马灯与聊天框公告只有发送时间点在线的用户才能收到该公告,显示规则由客户端自己决定,两者区别主要是界面显示的区分。
5.置顶公告有显示起始和结束时间,表示该时段内显示,公告发送时间点在线的用户会收到该公告,公告发送时间点未在线用户,在公告显示时段登录,登录后可通过查询公告接口查到该公告。
6.公告撤销 仅针对置顶公告,公告显示时段撤销公告,客户端会收到公告撤销通知,界面进行更新。
管理员在后台发布公告,当到达指定时间会收到该公告,界面根据不同类型的公告进行展示。
原型:
youmeim.OnRecvNotice = function onRecvNotice(notice)
参数:
notice
:公告信息。
notice
包含以下关键字:
NoticeID
:公告Id。
ChannelID
:发布公告的频道ID。
NoticeType
:公告类型。
NoticeContent
:公告内容。
LinkText
:公告链接关键字。
LinkAddress
:公告链接地址。
BeginTime
:公告开始时间。
EndTime
:公告结束时间。
对于某些类型的公告(如置顶公告),需要在界面展示一段时间,如果管理员在该时间段执行撤销该公告,会收到撤销公告通知,界面进行相应更新。
原型:
youmeim.OnCancelNotice = function onCancelNotice(noticeID, channelID)
noticeID
:公告ID。channelID
:发布公告的频道ID。 公告在配置的时间点下发到客户端,对于某些类型的公告(如置顶公告)需要在某个时间段显示在,如果用户在公告下发时间点未在线,而在公告展示时间段内登录,应用可根据自己的需要决定是否展示该公告,queryNotice
查询公告,结果通过上面的OnRecvNotice
异步回调返回。
接口示例:
local errorcode = youmeim.queryNotice()
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。 获取用户当前的地理位置
接口示例:
local errorcode = youmeim:getCurrentLocation()
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnUpdateLocation = function(errorcode, districtCode, country, pronvice, city, districtCounty, street, longitude, latitude)
end
errorcode
:错误码。districtCode
:地理区域编码。country
:国家。pronvice
:省份。city
:城市。districtCounty
:区县。street
:街道。longitude
:经度。latitude
:纬度。 获取附近的目标(人 房间) ,若需要此功能,请联系我们开启LBS服务。若已开启服务,此功能生效的前提是自己和附近的人都获取了自己的地理位置,即调用了IM的获取当前地理位置接口。
接口示例:
local errorcode = youmeim:getNearbyObjects(count, "serverAreaID", districtLevel, resetStartDistance)
参数:
count
:获取附近的目标数量(一次最大200)。
serverAreaID
:区服ID(对应设置用户信息中的区服,如果只需要获得本服务器的,要填;否则填"")。
districtLevel
:行政区域等级,一般填0,0-未知,1-国家,2-省份,3-城市,4-区县,5-街道,int。
resetStartDistance
:是否重置查找起始距离,1-从距自己0米开始查找,0-从上次查找返回的最远用户开始查找。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetNearbyObjects = function(errorcode, neighbourList, startDistance, endDistance)
回调参数:
errorcode
:错误码,0表示成功。
neighbourList
:附近的人地理位置信息列表。
startDistance
:搜索的起始距离。
endDistance
:搜索的终止距离。
neighbourList
中的每条记录包含以下关键字:
UserID
:附近用户ID。
Distance
:与自己的距离。
Longitude
:经度。
Latitude
:纬度。
Country
:国家。
Province
:省份。
City
:城市。
DistrictCounty
:区县。
Street
:街道。(目前只精确到区县,街道为保留字段)
从资源和耗电方面的考虑,SDK不自动监听地理位置的变化,如果调用方有需要可调用SetUpdateInterval
接口,设置更新时间间隔,SDK会按设定的时间间隔监听位置变化并通知上层。调用该接口之前,需要调用getCurrentLocation成功获取自己的地理位置。(如果应用对地理位置变化关注度不大,最好不要设置自动更新)
接口示例:
youmeim:setUpdateInterval(interval)
interval
:更新时间间隔(单位:分钟)。 获取与指定用户距离之前,需要调用getCurrentLocation
成功获取自己的地理位置,指定的用户也调用getCurrentLocation
成功获取其地理位置。若指定的用户未成功获取到其地理位置,会返回无效的距离。
接口示例:
local errorcode = youmeim:getDistance(userID)
参数:
userID
:用户ID,字符串。
返回值:
errorcode
:0
为调用成功,非0
表示调用失败,失败后不会有回调通知,详细描述见错误码定义。
回调通知:
youmeim.OnGetDistance = function(errorcode, userID, distance)
end
}
errorcode
:错误码。userID
: 用户ID。distance
: 距离(米)。 必须在初始化之前调用 根据游戏主要发行区域,选择合适的 IM 服务器区域。如果不调用该接口进行设置,默认的服务器区域是中国。
接口示例:
youmeim:SetServerZone(zone)
zone
:整型,见服务器部署地区定义。 ServerZone_China = 0, // 中国大陆,默认
ServerZone_Singapore = 1, // 新加坡
ServerZone_America = 2, // 美国
ServerZone_HongKong = 3, // 香港
ServerZone_Korea = 4, // 韩国
ServerZone_Australia = 5, // 澳洲
ServerZone_Deutschland = 6, // 德国
ServerZone_Brazil = 7, // 巴西
ServerZone_India = 8, // 印度
ServerZone_Japan = 9, // 日本
ServerZone_Ireland = 10, // 爱尔兰
错误码 | 含义 |
---|---|
YIMErrorcode_Success = 0 | 成功 |
YIMErrorcode_EngineNotInit = 1 | IM SDK未初始化 |
YIMErrorcode_NotLogin = 2 | IM SDK未登录 |
YIMErrorcode_ParamInvalid = 3 | 无效的参数 |
YIMErrorcode_TimeOut = 4 | 超时 |
YIMErrorcode_StatusError = 5 | 状态错误 |
YIMErrorcode_SDKInvalid = 6 | Appkey无效 |
YIMErrorcode_AlreadyLogin = 7 | 已经登录 |
YIMErrorcode_LoginInvalid = 1001 | 登录无效 |
YIMErrorcode_ServerError = 8 | 服务器错误 |
YIMErrorcode_NetError = 9 | 网络错误 |
YIMErrorcode_LoginSessionError = 10 | 登录状态出错 |
YIMErrorcode_NotStartUp = 11 | SDK未启动 |
YIMErrorcode_FileNotExist = 12 | 文件不存在 |
YIMErrorcode_SendFileError = 13 | 文件发送出错 |
YIMErrorcode_UploadFailed = 14 | 文件上传失败,上传失败 一般都是网络限制上传了 |
YIMErrorcode_UsernamePasswordError = 15, | 用户名密码错误 |
YIMErrorcode_UserStatusError = 16, | 用户状态为无效用户 |
YIMErrorcode_MessageTooLong = 17, | 消息太长 |
YIMErrorcode_ReceiverTooLong = 18, | 接收方ID过长(检查频道名) |
YIMErrorcode_InvalidChatType = 19, | 无效聊天类型 |
YIMErrorcode_InvalidReceiver = 20, | 无效用户ID |
YIMErrorcode_UnknowError = 21, | 未知错误 |
YIMErrorcode_InvalidAppkey = 22, | AppKey无效 |
YIMErrorcode_ForbiddenSpeak = 23, | 被禁止发言 |
YIMErrorcode_CreateFileFailed = 24, | 创建文件失败 |
YIMErrorcode_UnsupportFormat = 25, | 支持的文件格式 |
YIMErrorcode_ReceiverEmpty = 26, | 接收方为空 |
YIMErrorcode_RoomIDTooLong = 27, | 房间名太长 |
YIMErrorcode_ContentInvalid = 28, | 聊天内容严重非法 |
YIMErrorcode_NoLocationAuthrize = 29, | 未打开定位权限 |
YIMErrorcode_UnknowLocation = 30, | 未知位置 |
YIMErrorcode_Unsupport = 31, | 不支持该接口 |
YIMErrorcode_NoAudioDevice = 32, | 无音频设备 |
YIMErrorcode_AudioDriver = 33, | 音频驱动问题 |
YIMErrorcode_DeviceStatusInvalid = 34, | 设备状态错误 |
YIMErrorcode_ResolveFileError = 35, | 文件解析错误 |
YIMErrorcode_ReadWriteFileError = 36, | 文件读写错误 |
YIMErrorcode_NoLangCode = 37, | 语言编码错误 |
YIMErrorcode_TranslateUnable = 38, | 翻译接口不可用 |
YIMErrorcode_SpeechAccentInvalid = 39, | 语音识别方言无效 |
YIMErrorcode_SpeechLanguageInvalid = 40, | 语音识别语言无效 |
YIMErrorcode_HasIllegalText = 41, | 消息含非法字符 |
YIMErrorcode_AdvertisementMessage = 42, | 消息涉嫌广告 |
YIMErrorcode_AlreadyBlock = 43, | 用户已经被屏蔽 |
YIMErrorcode_NotBlock = 44, | 用户未被屏蔽 |
YIMErrorcode_MessageBlocked = 45, | 消息被屏蔽 |
YIMErrorcode_LocationTimeout = 46, | 定位超时 |
YIMErrorcode_NotJoinRoom = 47, | 未加入该房间 |
YIMErrorcode_LoginTokenInvalid = 48, | 登录token错误 |
YIMErrorcode_CreateDirectoryFailed = 49, | 创建目录失败 |
YIMErrorcode_InitFailed = 50, | 初始化失败 |
YIMErrorcode_Disconnect = 51, | 与服务器断开 |
YIMErrorcode_TheSameParam = 52, | 设置参数相同 |
YIMErrorcode_QueryUserInfoFail = 53, | 查询用户信息失败 |
YIMErrorcode_SetUserInfoFail = 54, | 设置用户信息失败 |
YIMErrorcode_UpdateUserOnlineStateFail = 55, | 更新用户在线状态失败 |
YIMErrorcode_NickNameTooLong = 56, | 昵称太长(> 64 bytes) |
YIMErrorcode_SignatureTooLong = 57, | 个性签名太长(> 120 bytes) |
YIMErrorcode_NeedFriendVerify = 58, | 需要好友验证信息 |
YIMErrorcode_BeRefuse = 59, | 添加好友被拒绝 |
YIMErrorcode_HasNotRegisterUserInfo = 60, | 未注册用户信息 |
YIMErrorcode_AlreadyFriend = 61, | 已经是好友 |
YIMErrorcode_NotFriend = 62, | 非好友 |
YIMErrorcode_NotBlack = 63, | 不在黑名单中 |
YIMErrorcode_PhotoUrlTooLong = 64, | 头像url过长(>500 bytes) |
YIMErrorcode_PhotoSizeTooLarge = 65, | 头像太大(>100 kb) |
YIMErrorcode_ChannelMemberOverflow = 66, | 达到频道人数上限 |
YIMErrorcode_PTT_Start = 2000, | 开始录音 |
YIMErrorcode_PTT_Fail = 2001, | 录音失败 |
YIMErrorcode_PTT_DownloadFail = 2002, | 语音消息文件下载失败 |
YIMErrorcode_PTT_GetUploadTokenFail = 2003, | 获取语音消息Token失败 |
YIMErrorcode_PTT_UploadFail = 2004, | 语音消息文件上传失败 |
YIMErrorcode_PTT_NotSpeech = 2005, | 没有录音内容 |
YIMErrorcode_PTT_DeviceStatusError = 2006, | 语音设备状态错误 |
YIMErrorcode_PTT_IsSpeeching = 2007, | 录音中 |
YIMErrorcode_PTT_FileNotExist = 2008, | 文件不存在 |
YIMErrorcode_PTT_ReachMaxDuration = 2009, | 达到最大时长限制 |
YIMErrorcode_PTT_SpeechTooShort = 2010, | 录音时间太短 |
YIMErrorcode_PTT_StartAudioRecordFailed = 2011, | 启动录音失败 |
YIMErrorcode_PTT_SpeechTimeout = 2012, | 音频输入超时 |
YIMErrorcode_PTT_IsPlaying = 2013, | 在播放 |
YIMErrorcode_PTT_NotStartPlay = 2014, | 未开始播放 |
YIMErrorcode_PTT_CancelPlay = 2015, | 主动取消播放 |
YIMErrorcode_PTT_NotStartRecord = 2016, | 未开始语音 |
YIMErrorcode_PTT_NotInit = 2017, | 未初始化 |
YIMErrorcode_PTT_InitFailed = 2018, | 初始化失败 |
YIMErrorcode_PTT_Authorize = 2019, | 录音权限 |
YIMErrorcode_PTT_StartRecordFailed = 2020, | 启动录音失败 |
YIMErrorcode_PTT_StopRecordFailed = 2021, | 停止录音失败 |
YIMErrorcode_PTT_UnsupprtFormat = 2022, | 不支持的格式 |
YIMErrorcode_PTT_ResolveFileError = 2023, | 解析文件错误 |
YIMErrorcode_PTT_ReadWriteFileError = 2024, | 读写文件错误 |
YIMErrorcode_PTT_ConvertFileFailed = 2025, | 文件转换失败 |
YIMErrorcode_PTT_NoAudioDevice = 2026, | 无音频设备 |
YIMErrorcode_PTT_NoDriver = 2027, | 驱动问题 |
YIMErrorcode_PTT_StartPlayFailed = 2028, | 启动播放失败 |
YIMErrorcode_PTT_StopPlayFailed = 2029, | 停止播放失败 |
YIMErrorcode_PTT_RecognizeFailed = 2030, | 识别失败 |
YIMErrorcode_Fail = 10000 | 语音服务启动失败 |