Ios 版本的应用程序有效,但 Android 失败,因为没有为 React Native 应用程序的 AccessToken 找到合适的构造函数

Ios version of app works, but Android fails due to no suitable constructor found for AccessToken for React Native App

如标题中所述,此应用程序的 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 技能不存在,所以我不知道如何解决这个问题。

我今天也遇到了同样的问题,将 react-native-fbsdk 升级到 0.8.0 似乎可以解决问题

我今天也遇到了这个问题,并通过修改包使其具有最后一个参数 - dataAccessExpirationTime 来解决。

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

您将在 FBGraphRequestModule.java 和 Utility.java 文件中看到此问题。 所以请修复这两个文件。

我有同样的问题,我的理解是react-native-fbsdk v0.7.0没有锁定依赖的次要版本com.facebook.android:facebook-android-sdk。请参阅 node_modules/react-native-fbsdk/android/ 中的 compile 'com.facebook.android:facebook-android-sdk:4+'。 Facebook 发布了一个新版本 4.38.1,之前已知的工作版本是 4.37.0。由于未锁定次要版本,com.facebook.android:facebook-android-sdk:4 的较新版本被拉下并导致损坏。

升级到 react-native-fbsdk v0.8.0 和 com.facebook.android:facebook-android-sdk:4.38.1 更改了二进制包,迫使我们进行完整的应用程序更新(而不是仅通过 Code-Push 更新 UI 内容).我们试图限制二进制版本,因为它们更大而且我们的用户不会被迫更新应用程序。

强制解析 com.facebook.android:facebook-android-sdk:4+ 的版本对我们有效

在根 build.gradle 文件中添加或合并以下内容

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

Ref :本文描述了动态依赖的一些缺点。我建议您在包含新模块时锁定所有动态依赖项。这将有助于确保每次重建都会产生可预测的输出。