Вызвано: java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.decodeBase64 OpenTok Tokbox

Я разрабатываю приложение для видеоконференций, поэтому мне нужно создать независимые комнаты для пользователей для конференции. поэтому я использую opentok (tokbox) sdk для Android. ниже мои файлы компиляции gradle для opentok:

compile 'com.opentok.android:opentok-android-sdk:2.12.0'
compile 'com.tokbox:opentok-server-sdk:2.3.2'

Теперь я создаю идентификатор сеанса и идентификатор токена с помощью opentok server sdk (java). это код для генерации идентификатора сеанса и идентификатора токена.

//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();
}

После отладки этого кода мы успешно получили идентификатор сеанса, но у меня возникла проблема с генерацией токенида. В этот момент приложение внезапно вылетает, оно возвращает

`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. Пожалуйста, дайте верное направление.


person krish    schedule 15.11.2017    source источник
comment
Я уже добавил в файл gradle, скомпилировал 'commons-codec: commons-codec: 1.10', но не повезло   -  person krish    schedule 15.11.2017


Ответы (1)


Это то же самое, что и эта проблема Кодек Apache Commons с Android: мог не найти метод

OpenTok Java SDK предназначен для использования в серверном приложении, а не в вашем приложении Android, потому что в противном случае вы скомпрометируете свой секрет API. Кто-то может взять его и использовать для создания своих собственных сессий OpenTok, и вы получите счет. Рекомендуемый способ сделать это - иметь серверный API, который вы вызываете из своего Android-приложения для получения sessionId и токена.

Если вы все еще хотите, чтобы это работало в вашем приложении для Android, вы можете включить commons-codec 1.4+, чтобы получить этот метод. В противном случае вам может потребоваться разветвить OpenTok Java SDK и использовать старую версию метода Base64.decodeBase64, который принимает byte [] вместо String.

person Adam Ullman    schedule 16.11.2017
comment
Привет, Адам, мы перешли на серверный api для получения идентификатора сеанса opentok и идентификатора токена, я думаю, что это простой способ. Ребята не генерируют сеанс на стороне сервера и идентификаторы токенов в приложении для Android. - person krish; 17.11.2017