引起:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.decodeBase64 OpenTok Tokbox

时间:2017-11-15 09:43:26

标签: java android opentok nosuchmethoderror tokbox

我正在开发视频会议应用程序,因此我需要为用户创建一个独立的会议室。所以我使用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。请给出正确的方向。

1 个答案:

答案 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。