【问题标题】:Caused by: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.decodeBase64 OpenTok Tokbox引起:java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.decodeBase64 OpenTok Tokbox
【发布时间】:2017-11-15 09:43:25
【问题描述】:

我正在开发视频会议应用程序,所以我需要为用户创建一个独立的会议室。所以我正在使用适用于 android 的 opentok (tokbox) sdk。以下是我为 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();
}

调试完这段代码,我们成功得到了session id,但是我遇到了生成tokenid的问题。此时App突然崩溃,它返回

`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。请给出正确的方向。

【问题讨论】:

  • 我已经添加到 gradle 文件中,编译 'commons-codec:commons-codec:1.10',但没有运气

标签: java android opentok nosuchmethoderror tokbox


【解决方案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。

【讨论】:

  • 嗨亚当,我们转移到服务器端 api 来获取 opentok 会话 ID 和令牌 ID,我认为这是简单的方法。伙计们不会在 android 应用程序中生成服务器端会话和令牌 ID。
猜你喜欢
  • 2014-04-18
  • 2019-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多