Версия приложения IOS работает, но Android не работает из-за отсутствия подходящего конструктора для AccessToken для React Native App - PullRequest
0 голосов
/ 24 октября 2018

Как упоминалось в заголовке, версия Ios этого приложения отлично работает на физическом устройстве.Тем не менее, когда я пытаюсь построить его на устройстве Android, я получаю сообщение об ошибке

error: no suitable constructor found for AccessToken(String,String,String,<null>,<null>,<null>,<null>,<null>)
constructor AccessToken.AccessToken(String,String,String,Collection<String>,Collection<String>,AccessTokenSource,Date,Date,Date) is not applicable
(actual and formal argument lists differ in length)
constructor AccessToken.AccessToken(Parcel) is not applicable
(actual and formal argument lists differ in length)

Эта ошибка подсвечивается в файле FBGraphRequestModule.java, особенно в этом методе

    private void setConfig(GraphRequest graphRequest, ReadableMap configMap) {
            if (configMap == null) {
                graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
                return;
            }
            if (configMap.hasKey("parameters")) {
                graphRequest.setParameters(buildParameters(configMap.getMap("parameters")));
            }
            if (configMap.hasKey("httpMethod")) {


graphRequest.setHttpMethod(HttpMethod.valueOf(configMap.getString("httpMethod")));
    }
    if (configMap.hasKey("version")) {
        graphRequest.setVersion(configMap.getString("version"));
    }
    if (configMap.hasKey("accessToken")) {
        graphRequest.setAccessToken(new AccessToken(
            configMap.getString("accessToken"),
            AccessToken.getCurrentAccessToken().getApplicationId(),
            AccessToken.getCurrentAccessToken().getUserId(),
            null,
            null,
            null,
            null,
            null));
    } else {
        graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
    }
}

Подробнеев частности,

if (configMap.hasKey("accessToken")) {
            graphRequest.setAccessToken(new AccessToken(
                configMap.getString("accessToken"),
                AccessToken.getCurrentAccessToken().getApplicationId(),
                AccessToken.getCurrentAccessToken().getUserId(),
                null,
                null,
                null,
                null,
                null));

Мои навыки Java отсутствуют, поэтому я не знаю, как решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Я также столкнулся с этой проблемой сегодня и решил, изменив пакет так, чтобы последний параметр - dataAccessExpirationTime.

new AccessToken(
            configMap.getString("accessToken"),
            AccessToken.getCurrentAccessToken().getApplicationId(),
            AccessToken.getCurrentAccessToken().getUserId(),
            null,
            null,
            null,
            null,
            null,
            null)

Вы увидите эту проблему в файлах FBGraphRequestModule.java и Utility.java.Поэтому, пожалуйста, исправьте оба файла.

0 голосов
/ 05 декабря 2018

У меня возникла та же проблема, насколько я понимаю, что response-native-fbsdk v0.7.0 не заблокировал минорную версию зависимости com.facebook.android:facebook-android-sdk.см compile 'com.facebook.android:facebook-android-sdk:4+' в node_modules/react-native-fbsdk/android/.Facebook выпустил новую версию 4.38.1, ранее известная рабочая версия была 4.37.0.Поскольку младшая версия не была заблокирована, более новая версия com.facebook.android:facebook-android-sdk:4 была снесена и вызвала поломку.

Обновление до реакции-native-fbsdk v0.8.0 и com.facebook.android:facebook-android-sdk:4.38.1 изменяет двоичный пакет, заставляя нас делать этополное обновление приложения (в отличие только от контента пользовательского интерфейса, обновляемого с помощью Code-Push).Мы пытаемся ограничить бинарные выпуски, потому что они больше, и наши пользователи не обязаны обновлять приложение.

Принудительное разрешение версии com.facebook.android:facebook-android-sdk:4+ сработало для нас

В корневом файле build.gradle добавьте или объедините следующее

allprojects {
    configurations.all {
        resolutionStrategy {
            force 'com.facebook.android:facebook-android-sdk:4.37.0'
        }
    }
}

Ref : В этой статье описываются некоторые недостатки наличия динамических зависимостей.Я предлагаю при включении нового модуля блокировки все динамические зависимости.Это поможет гарантировать, что каждая перестройка приводит к предсказуемому результату.

0 голосов
/ 24 октября 2018

У меня была такая же проблема сегодня, обновление react-native-fbsdk до 0.8.0, похоже, исправляет

...