我正在开发视频会议应用程序,因此我需要为用户创建一个独立的会议室。所以我使用opentok(tokbox)sdk for android。下面是我的opentok的gradle编译文件:
compile 'com.opentok.android:opentok-android-sdk:2.12.0'
compile 'com.tokbox:opentok-server-sdk:2.3.2'
现在我在opentok服务器sdk(java)的帮助下创建了会话ID和令牌ID。这是用于生成会话ID和令牌ID的代码。
//java code
OpenTok openTok = new OpenTok(Integer.parseInt(OpenTokConfig.API_KEY), OpenTokConfig.SECRET_KEY);
try {
SessionProperties sessionProperties = new SessionProperties.Builder().mediaMode(MediaMode.ROUTED).build();
Session session = openTok.createSession(sessionProperties);
sessionId = session.getSessionId();
//successfully we got the session id here
tokenId = openTok.generateToken(sessionId); //app crashed here
} catch (OpenTokException e) {
e.printStackTrace();
}
调试完这段代码后,我们成功获得了会话ID,但是我在生成tokenid时遇到了问题。此时突然崩溃了,它返回
`Caused by: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.decodeBase64
at com.opentok.util.Crypto.decodeSessionId(Crypto.java:47)
at com.opentok.OpenTok.generateToken(OpenTok.java:131)
at com.opentok.OpenTok.generateToken(OpenTok.java:181)`
我已经深入调试了opentok sdk应用程序崩溃的方法
//class name is : Crypto
public static List<String> decodeSessionId(String sessionId) throws UnsupportedEncodingException {
sessionId = sessionId.substring(2);
sessionId = sessionId.replaceAll("-", "+").replaceAll("_", "/");
byte[] buffer = Base64.decodeBase64(sessionId); //app crashed in this line
sessionId = new String(buffer, "UTF-8");
return new ArrayList<String>(Arrays.asList(sessionId.split("~")));
}
我知道这个问题与解码问题有关。我在很多地方都搜索过这个问题,但是我没有得到任何关于这个问题的相关答案.Opentok团队只是说升级你的sdk&#39; s。请给出正确的方向。
答案 0 :(得分:1)
这与此问题Apache Commons Codec with Android: could not find method
相同OpenTok Java SDK旨在用于服务器端应用程序,而不是Android应用程序,因为否则会危及您的API密钥。有人可以拿它并用它来创建自己的OpenTok会话,你就得到了账单。建议的方法是使用您从Android应用程序调用的服务器端API来获取sessionId和令牌。
如果您仍希望在Android应用中使用此工具,则可以使用commons-codec 1.4+来获取此方法。否则,您可能需要分叉OpenTok Java SDK并使用旧版本的Base64.decodeBase64方法,该方法采用byte []而不是String。